本文主要是介绍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即可
这篇关于FFmpeg 使用HEVC_QSV编码时仅发送一次PPS问题的解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!