當前位置:
首頁 > 最新 > 他說的一定對嗎?-請保持獨立思考的習慣

他說的一定對嗎?-請保持獨立思考的習慣

實際工作中,我們經常會向其他同事諮詢一些技術問題。但是,他給出的答案一定是正確的嗎?

近期項目組遇到這麼個問題,Android平台上軟體解碼RTSP實時視頻流CPU佔用率較高,打算切換到硬體解碼。但是在調用硬體解碼介面的時候返回失敗,原因是視頻流的解析度信息未知,結果又自動切換回了軟解。

那麼,基於RTSP傳輸的視頻流,一般可以從哪裡獲取解析度信息呢?

1.RTSP報文中的SDP,一般會有SPS、PPS信息,這裡可以拿到(具體術語不展開介紹,感興趣自行搜索)。

2.RTP擴展頭:RTP協議允許對頭部進行擴展,當然擴展信息你愛填啥就填啥,並不限於解析度信息,相當於私有信息。

3.碼流中的SPS信息。實際實現中,很多公司都會把SPS、PPS信息穿插在碼流中,一般的做法是SPS、PPS緊挨著I幀,並且位於I幀的前面(位於前面的好處是解碼庫拿到該信息,就可以解碼緊挨著的I幀,否則緊挨著的I幀就要被緩存起來或者丟掉)。有些實現是每個I幀前面都有SPS、PPS,有些實現是僅當視頻信息變化時才插入SPS、PPS。

詢問解碼庫同事,說解析度信息是從RTP擴展頭部獲取的。我們設備端沒有擴展RTP頭,所以取不到解析度信息,導致硬解失敗。這個答覆聽起來挺有道理的,但是仔細想想經不起推敲啊:

1.硬解拿不到解析度信息,軟解就拿到了?如果軟解也拿不到,為何又能解碼?

2.公司的解碼庫經常用來對接第三方設備,別人的設備不一定填充RTP擴展頭,即使填充了,格式也未必和我司的定義一致。難道我們的解碼庫解不了第三方的視頻流?這和事實不符啊。

3.之前調試的設備,從抓包信息看,也並未填充RTP擴展頭,但是卻可以用硬解。

帶著這些疑問再次詢問解碼庫同事,終於得到了合理的答覆:

1.如果存在RTP擴展頭,他們優先從擴展頭獲取解析度信息

2.如果沒有擴展頭,他們就從碼流中的SPS獲取解析度信息

*註:這裡有個遺憾,我們居然沒有使用RTSP報文中的SDP。*

問題依然存在,為何硬解獲取不到解析度,軟解能獲取到呢?

抓包看下吧。原來第一個I幀前無SPS、PPS信息,而後面每個I幀前面都有SPS、PPS。排查設備端代碼發現,RTP封裝庫中,在發第一個I幀的時候,把SPS、PPS信息丟了!!!

通過這次事件可以看到,別人提供給你的信息不一定是準確的,甚至有可能是錯誤的。他不一定是有意給你提供不準確的信息,有可能僅僅是因為他對問題理解的局限性,對相關知識的熟悉程度。為了避免被不準確的信息所害,我們一定要保持獨立思考的習慣,多問幾個為什麼。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 coderhuo 的精彩文章:

TAG:coderhuo |