在流之间切换时调整PTS

时间:2017-09-05 12:59:55

标签: ffmpeg video-streaming libavcodec libav

我的应用程序需要在输入处切换两个(或更多)流,而只有一个输出(您可以将其视为流多路复用器)。来自输入的帧被解码,然后由于覆盖内容而再次重新编码。

因此,为了安排AVFrame PTS,我在编码帧之前计算一个间隔。但问题是当我在RTMP流和MP4文件之间切换时,每次切换时视频都会延迟一点。因此,在第三个开关处,生成的流不同步。

我不知道在编码之前我是否遗漏了必须在帧上修改的内容。我还想在输出中为帧创建一个独立的PTS,但我不知道如何创建它。

输入流可能有不同的FPS,时基或编解码器,应用程序必须能够处理所有这些。

1 个答案:

答案 0 :(得分:0)

我发现了根本原因。

问题是MP4文件。使用这种类型的文件(由于某种原因),视频和音频数据包以错误串(即:20个视频数据包,然后是20个音频数据包)读取,而在RTMP流上则更像(2个视频,然后是2个音频数据包)。 所以问题是交换机正在之前读取所有串(即:20个视频数据包和10个音频数据包),所以在那之后,无论你做什么,结果流都不同步

我实施的解决方案一直等到解码帧的类型与前一个不同。然后是我执行切换时。