av_interleaved_write_frame

场景

音频和视频来自外部来源(麦克风和摄像头),并且无需任何压缩即可捕获为原始数据(即使是视频)。我使用h264编码视频,而没有压缩音频(PCM)。捕获的音频为:16位,44100khz,立体声。捕获的视频为25FPS。

问题

如何进行音视频交替写入?

解决办法

最好的办法是使用此类应用程序将音频/视频捕获为pts和dts时给出的时间戳。因此,这些并非完全实时的时间戳(来自时钟),而是媒体捕获的时间戳。

av_interleaved_write_frame以这种方式写入otput数据包,以使它们正确交织(也许在内部对其进行排队)。 “正确插入”取决于容器格式,但是通常这意味着输出文件中数据包的DTS标记单调增加。

像大多数FFmpeg API一样,不应由具有相同AVFormatContext的两个线程同时调用av_interleaved_write_frame。我假设您使用互斥锁来确保这一点。如果您这样做,则无论是多线程应用程序还是现在都没有关系。

与在单线程应用程序中的方式相同。 Dts通常是由pts的编解码器生成的。 Pts通常来自捕获设备/解码器以及相应的音频/视频数据。

可以使用实时时间戳,但这实际上取决于您获取它们的方式和时间。

猜你喜欢

转载自blog.csdn.net/fuhanghang/article/details/125294373