FFmpeg 使用HEVC_QSV編碼時僅發送一次PPS問題的解決方法

        使用最新版本的(3.2.1)的FFmpeg進行HEVC_QSV編碼的時候,只會在開始的時候發送一次PPS,在之後的編碼過程中都不在發送PPS,這導致了需要播流的播放器需先打開,再啓動FFmpeg進行推流,否則只能播放出聲音,沒有畫面。

       FFmpeg 是基於Intel Media SDK來實現HEVC_QSV的,查看了Intel Media SDK的相關文檔,發現PPS的發送時機是由參數IdrIntelval這個參數控制的。這個參數的含義及其變態,下面是摘自《mediasdk-man.pdf》中的一段描述,在H264_QSV和HEVC_QSV中,對IdrInterval設置相同的值,但是表示的含義截然不同。

      、    回過頭來看一下FFmpeg中是如何設置IdrInterval的值的;僅在H264_QSV的時候可以通過命令設置IdrInterval,且默認值爲0,所以H264_QSV在編碼的時候當遇到I幀的時候就會把它當做IDR幀,發送PPS信息;在HEVC_QSV時,IdrInterval的值也被設置爲0(具體FFmpeg內部怎麼處理的,讓IdrInterval在HEVC_QSV的時候也爲0,大家可以自己去 看一下代碼),但此時0表示的含義是隻把第一個I幀當做IDR幀來使用,所以只會在最開始發送PPS的信息。所以僅需要在HEVC_QSV編碼時設置IdrInterval爲1即可

    

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