同步一直让我着迷,或者准确地说:为什么媒体播放器可以同步观看 .ts,而重新组装的解复用音频+视频却不同步。
所以我试图了解这一点,以及可以采取哪些措施来防止这种情况发生。
我已阅读以下内容:https://trac.handbrake.fr/wiki/LibHandBrakeSync https://trac.handbrake.fr/wiki/LibHandBrakeSync以及sync.c的来源(也可以在wiki上找到)
BitStreamTools 也就此主题编写了理论 101(但我无法链接,因为我是新用户,抱歉)
虽然我认为我对 PCR/PTS 的理解(概念上)是正确的,但我很难理解 handbrake 出色的 A/V 同步论文。
我的问题是:是否有关于音视频同步的直观解释(可以是简短的、短的或更长的)?虽然我知道如果音频或视频点损坏(不连续?),可以从 PCR 重新计算 PTS,但手刹似乎并不依赖于此,而是依赖于它的内部 PTS。 0, += 1/fps (~=5), 10, 15, ....
是否可以通过修复所有音频和视频 PTS 值(并使用相同的偏移量倾斜所有 DTS,从而重新计算 pts 偏移量并更正 .ts(二进制),以便播放器不会“用完帧”,以便说话),从而拥有一个可以解复用的 .ts,然后隔离的轨道会同步(如果放回一起)?
编辑:
或者是否无法通过使用 PCR 重新计算给定 .ts 中的所有 PTS 值来修复?虽然我知道某些帧/音频可能在广播中损坏,因此无法正确呈现,但我将保留对此的处理(例如,如果视频已损坏且具有相应的音频部分,则将其删除,如果音频包损坏等)稍后,为了讨论起见,我假设所有帧都完好无损。 (但是 PTS 值总是正确的,或者什么?)
附录:
我对手刹 A/V 纸的看法是这样的:
在“预期”100 处,偏移量计算为视频 pts (100) - 音频 pts (0) - 内部 PTS,以使音频达到相同的呈现时间,从而给出 99 的 pts 偏移量。在 105 处,偏移量将为 105-5 = 100,而不是 99,但我们继续使用 99 作为偏移量,因为无需重新计算(100-99 = 1. 1/fps
我几乎肯定我对此完全错误,但是有人可以指出我正确的方向吗?