我可以使用 av_write_frame() 而不是 av_interleaved_write_frame() 吗?

pan*_*ngo 2 directshow ffmpeg libavformat

我正在使用 ffmpeg 在 Windows 平台上编写 AV muxer DirectShow Filter,它将视频和音频流混合到 mp4/ts/flv 文件或 rtsp/rtmp/udp 流中,我确认视频/音频流的 dts 有序增加所以不需要 dts 重新排序,所以我可以用av_write_frame()代替av_interleaved_write_frame()吗?av_write_frame()直接将数据包写入多路复用器,av_interleaved_write_frame()如果没有引用计数,则会复制数据包,所以我更喜欢使用,av_write_frame()因为我认为它应该更有效(没有复制或缓冲),我的想法正确吗?我可以使用av_write_frame()吗?

Ron*_*tje 6

是的。由于文档av_write_frame()状态:

此函数将数据包直接传递给多路复用器,无需任何缓冲或重新排序。如果格式需要,调用者负责正确地交织数据包。希望 libavformat 处理交错的调用者应该调用 av_interleaved_write_frame() 而不是这个函数。