用ffmpeg4.x AV_CODEC_ID_H264編碼器將yuv數據轉換成h264有B幀問題解決

H.265技術在碼率上進行了深度優化,同等畫質下,可以比H.264節省近50%的碼率,使存儲成本大大降低。我們流媒體服務器和流媒體播放器都將會趨向於H265編碼,之前我們實現了H265編碼的播放:EasyRTMP-Android使用H265編碼流程,而現在我們也實現了RTSP/Onvif網絡攝像頭流媒體服務器播放H265編碼視頻。

000.jpeg

本文我們暫時不討論H265,我們來講一下有用戶遇到的關於ffmpeg4.x AV_CODEC_ID_H264編碼器將yuv數據轉換成h264的問題。

有開發者用ffmpeg4.x AV_CODEC_ID_H264編碼器將yuv數據轉換成h264,轉換成的h264裏面有B幀,將h264轉換成mp4,再將yuv轉換成h264的時候是設置了pts和dts的,但是轉成h264後,pts和dts都沒了,再將h264轉換成mp4的時候還得重新設置pts和dts,但是流裏面有B幀,因此pts和dts不能設置成一樣的,這位開發者無法解決此問題。

這是因爲h264文件裏是不會把pts寫進去的,dts也不會,但是他是按照dts的順序寫進去的,可以在avframe裏設置好pts,然後出來avpacket以後,直接把avpacket寫到文件裏。

後來我們跟這塊有了解的同事溝通了一下,將h264直接存mp4,發現裏面沒有I幀,播放器可能無法播放,但是同樣代碼換到ffmpeg3.x上就都能播放。

EasyPLayer。js.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章