You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MP4文件中实现音视频(A/V)同步的标准技术方案是什么?

MP4音视频同步实现困惑

我正在使用一款仅含头文件的小型MP4库(minimp4)写入包含AAC音频和HVEC视频流的MP4文件,并通过FFmpeg/ffplay/ffprobe进行检查和播放,但对MP4中的解码时间戳(DTS)、显示时间戳(PTS)、合成时间(CTTS)等概念,以及如何利用它们实现音视频同步感到困惑。

尝试过的解决方法与问题

  • 最初按样本到达顺序写入所有音视频样本,使用预期时长作为样本时长,结果出现视频样本先于音频样本到达时,音频超前于视频的同步问题。
  • 尝试手动设置库写入的“timestamp”参数并使用实际计算的时长,但在非分片模式下此方法无效,且该参数会被写入为解码时间戳(tfdt)而非显示时间戳,这种方式并不恰当。
  • 修改写入函数,丢弃任何早于另一路媒体就绪时间的音视频样本,目前效果良好,但不确定能否长期抵御时间偏移。

查看FFmpeg源码的发现

查看FFmpeg源码时发现,至少ffprobe会在某些情况下将解码时间戳当作显示时间戳使用,相关代码如下:

int64_t pts = pkt->pts != AV_NOPTS_VALUE ? pkt->pts : pkt->dts;

目前我也无法找到有效pkt->pts的来源,这似乎是预期情况。

关于CTTS的疑问

通过搜索了解到CTTS表/合成时间戳,但它似乎更多用于帧重排序(由于我使用的全是I帧视频,无需担心此问题)。

核心困惑

我现在对MP4文件中音视频同步的标准技术方案,或是最通用、兼容性最好的实现方式感到困惑。

内容的提问来源于stack exchange,提问作者Douglas B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:27:19