我的应用程序需要在输入端的两个(或更多)流之间切换,而只有一个输出(您可以将其视为流多路复用器)。来自输入的帧被解码,然后由于覆盖内容而再次被重新编码。
因此,为了安排AVFrame PTS,我在编码帧之前计算间隔。但问题是,当我在RTMP流和MP4文件之间切换时,视频在每次切换时都会有一点延迟。因此,在第三次切换时,结果流是不同步的。
我不知道我是否遗漏了在编码前必须在帧上修改的内容。我也想过在输出端为帧创建一个独立的PTS,但我不知道如何创建它。
输入流可以具有不同的FPS、时基或编解码器,并且应用程序必须能够处理所有这些流。
发布于 2017-09-05 23:39:36
我找到了根本原因。
问题出在MP4文件上。对于这种类型的文件(出于某种原因),视频和音频包是以错误串的形式读取的(即: 20个视频包,然后是20个音频包),而在RTMP流上则更像是(2个视频包,然后是2个音频包)。所以问题是在读取所有包(即: 20个视频包和10个音频包)之前,开关被应用于,所以在那之后,无论你在那之后做什么,结果流都是不同步的。
我实现的解决方案会等待,直到解码帧的类型与前一个不同。然后是我执行切换的时候。
https://stackoverflow.com/questions/46055623
复制相似问题