若該文為原創文章,轉載請注明原文出處
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/146354088
長沙紅胖子Qt(長沙創微智科)博文大全:開發技術集合(包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機、軟硬結合等等)持續更新中…)
Qt開發專欄:各種問題解決(點擊傳送門)
問題
??寫live555流媒體服務,發現延遲較大,優化緩存區后,邏輯檢查沒問題,但是發現無法成功打開,報錯“StreamParser::afterGettingBytes() ”。
分析過程
??
這里的是一直編碼壓入緩存,rtsp服務器開啟,此時沒有rtsp客戶端連接,所以緩存是沒有被一直消耗的:
??首要優化的就是緩存區的大小,可以讓連接慢一點,但是延遲快一點:
??
??
??直接定位源碼StreamParser::afterGettingBytes() warning: read”
??
??然后打印一下,是不是把指針當字節數了:
??
??分析結果如下:
??
??其調用順序:
??
??
??
??
??所以,是調用了以下幾個變量:
fAfterGettingClientData
fFrameSize
fNumTruncatedBytes
fPresentationTime
fDurationInMicroseconds
??調用如下:
??
??發現對應的就是fFrameSize和fNumTruncatedBytes。
解決
??優化代碼:
??
??這樣,延遲邏輯確實得到優化了:
??
??這里只能說是live555代碼開發的時候,變量沒有初始化0,二次查源碼就發現了,這里的緩存區優化完成。
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/146354088