天天看點

通過國标GB28181協定級聯出現報錯,視訊也播放不了,如何解決?

經常使用EasyNVR産品的使用者都知道,作為音視訊行業網際網路直播平台,EasyNVR主要功能在于通過RTSP/ONVIF協定,接入前端音視訊采集裝置,通過EasyNVR軟硬體将拉取過來的音視訊流轉化給适合全平台播放的RTMP、HTTP-FLV、HLS格式,極大友善了使用者進行網頁直播、微信直播及接入自身業務平台。

通過國标GB28181協定級聯出現報錯,視訊也播放不了,如何解決?

在經過今年年初的調整之後,EasyNVR已經支援GB國标級聯了,部分使用者在測試新版EasyNVR時回報EasyNVR國标級聯出現了兩個問題:

1.EasyNVR國标級聯儲存配置時會一直提示:上一個配置在啟動中,請稍後啟動!

通過國标GB28181協定級聯出現報錯,視訊也播放不了,如何解決?

檢視代碼後發現級聯注冊失敗會出現遞歸死循環:

通過國标GB28181協定級聯出現報錯,視訊也播放不了,如何解決?

此處需要将遞歸的代碼注釋了,并在調用函數的地方傳遞退出的通道信号就可以解決。

通過國标GB28181協定級聯出現報錯,視訊也播放不了,如何解決?

2.另一個情況是EasyNVR配置了國标級聯資訊和通道後,上級平台播放不了,檢視日志發現代碼panic了:

panic: runtime error: invalid memory address or nil pointer dereference

在檢視具體的報錯的代碼後,發現是因為普通的推流和國标的推流是分開的,StreamClient是分開執行個體化的,而最終調用的推流方法是一緻的。但是前幾天優化了推流代碼,加了幾個屬性,而屬性值的初始化隻在普通推流實作了,是以在國标推流中會出現panic。

該問題的解決就是在國标的StreamClient執行個體化時也初始化了幾個新加的屬性,測試播放後正常了。

繼續閱讀