我通过 FFMPEG 的 libav* api 使用 ffmpeg-4.4-full_build-shared 从我的应用程序生成符合 DVB 的多播 rtp 流。当我使用 mpeg2video 编码器和 h264_qsv 时,一切似乎都正常。但是 mpeg2_qsv 编码器没有设置默认为 0 的 idr_interval 属性。根据 Intel 的 Media SDK 文档,0 意味着 IDR 帧将仅在开始时发送。
如果我在流开始之前启动 VLC,它会在 VLC 获取 IDR 帧时正常工作,但如果我在流启动后启动 VLC,VLC 调试会显示 - mpegvide : waiting for sequence start。
我尝试深入研究 ffmpeg 源代码,据我所知,qsvenc_mpeg2.c 文件中没有启用 idr_interval
https://github.com/Vincit/ffmpeg/blob/master/libavcodec/qsvenc_mpeg2.c#L65
就像在 qsvenc_h264.c 中启用一样
https://github.com/Vincit/ffmpeg/blob/master/libavcodec/qsvenc_h264.c#L69
谢谢你的病人。任何指导将不胜感激。
PS:我真的很害怕自己编译ffmpeg的想法。试过一次,但性能并不是那么好。如果需要的话,也许 Gyan 先生可以在这里帮助我。