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


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

本文我們暫時不討論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上就都能播放。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM