天天看點

gstreamer/deepstream崩潰記錄及分析

今天專門測試了一下攝像頭的斷電問題.這個問題以前一直想做,今天終于下決心.這一套視訊使用的gstreamer/deepstream.如前文所說的結束方法,結束代碼如下:

gst_element_set_state(pipeline,      GST_STATE_NULL);
gst_object_unref(pipeline);      

如果攝像頭已啟動完成,再啟動程式,這兩句是可以正常執行的.

 如果攝像頭沒加電,啟動程式,自然會報錯.然後在結束時,gst_element_set_state(pipeline, GST_STATE_NULL)會導緻崩潰.分析了一下core,并進行了測試,确定是nvidia的解碼器插件(nvdec_h264)在釋放時崩潰.也就是說,此時如果gst_element_set_state(nvdec_h264, GST_STATE_NULL),照樣引起崩潰.

 怎麼辦?吾有兩個辦法:

 先ping一下攝像頭,成功了再啟動任務.這樣就可以徹底避免這個問題.

 加一個探頭,收到解碼調用時記錄一下時間.這樣結束時就可以判斷一下.

 需要重複的是,即使是正常結束,nvidia的解碼器插件(nvdec_h264)大約有100MB的顯存沒有釋放.這個真沒辦法.

 那麼gstreamer是不是就正确結束了呢?應該是的,因為沒看到報錯.記憶體是不是正确釋放了?這個...一時沒有分析.

繼續閱讀