同步一直让我着迷,或者更准确地说:为什么 .ts 可以被媒体播放器同步观看,而重新组合的多路音频+视频不同步。
所以我试图理解这一点,以及可以做些什么来防止它。
我已阅读以下内容: https : //trac.handbrake.fr/wiki/LibHandBrakeSync 和 sync.c 的来源(也可在 wiki 上找到)
BitStreamTools 也写了一篇关于该主题的 Theory 101(但我无法链接,因为我是新用户,抱歉)
虽然我认为我对 PCR/PTS 的理解(在概念上)是正确的,但我很难遵循 handbrake 出色的 A/V 同步论文。
我的问题是:是否有某种直观的(可以是简短的、简短的或更长的)对 a/v 同步的解释?虽然我知道如果音频或视频 pts 损坏(不连续性?),可以从 PCR 重新计算 PTS,但手刹似乎并不依赖于此,而是依赖于它的内部 PTS。0, += 1/fps (~=5), 10, 15, ....
是否可以通过修复所有音频和视频 PTS 值来重新计算 pts 偏移量并更正 .ts (二进制)(并以相同的偏移量倾斜所有 DTS,因此播放器不会“用完帧”,所以说话),因此有一个可以解复用的.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 < 100 毫秒)。在 150 处,随着视频 pts 的减少而不是增加,再次计算 pts 偏移量...
我几乎可以肯定我对此完全错了,但是有人可以指出我正确的方向吗?
- 乔什