mp4视频在Quicktime / AVplayer与Chrome / Firefox上的不同时间开始播放

时间:2015-04-27 17:31:51

标签: video avfoundation mp4 avplayer quicktime

我有一个非常奇怪的问题。我的OSX应用程序正在生成基于屏幕投射的mp4视频。出于某种原因,如果我在Quicktime或任何基于OSX的AVPlayer中打开此视频,它将在第0帧之前大约14-15帧开始。如果我使用Chrome或Firefox打开mp4,它实际上将在第0帧开始播放

什么可能导致忽略开始帧?这是一个计时器倒计时的屏幕截图,比较Quicktime与Firefox在零时间。注意Firefox播放器如何在9:55启动,而Quicktime播放器则跳到9:54。 enter image description here

如果你想亲眼看看,这是我的sample mp4 file

由于

2 个答案:

答案 0 :(得分:3)

这是一个有趣的问题,你的例子很好地说明了效果。

使用ffprobe查看上面链接的文件会给出:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'c44116b.mp4':
  Metadata:
    major_brand     : qt  
    minor_version   : 0
    compatible_brands: qt  
    creation_time   : 2015-04-25 15:54:30
  Duration: 00:00:03.70, start: 0.957000, bitrate: 1164 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 480x360 [SAR 1:1 DAR 4:3], 899 kb/s, 22.99 fps, 22.99 tbr, 6k tbn, 12k tbc (default)
    Metadata:
      creation_time   : 2015-04-25 15:54:30
      handler_name    : Core Media Data Handler
      encoder         : H.264

你可以在这里看到ffprobe正在报告一个' start' 0.957000,相当于你的1秒偏移。

这并不能解释为什么某些玩家遵守这一点而其他人忽略它(Windows Media播放器也似乎从头开始,而不是偏移)。更新:Roman在下面指出这是一个已知的行为,并且已在ffmpeg列表中进行了讨论(参见Roman的回答)。这可能是由于mp4容器格式的历史,它源自Apple QuickTime规范。

start参数的用途似乎是允许轨道偏移以用于同步目的。为什么在仅包含一首曲目的视频中存在这种情况尚不清楚。

更新:这可能是任何人想要的更多信息,但对于那些感兴趣的人......

继续罗马的回答后,我使用MP4浏览器更详细地了解了mp4文件。由此我们可以首先看到时间尺度'这部电影:

enter image description here

然后编辑原子(或编辑框作为原子有时也会在mp4世界中调用):

enter image description here

编辑原子中的时间字段告诉玩家跳过第一个5742'样本'并从那里开始。将此信息与时间刻度一起使用,它告诉我们每秒有多少样本,我们可以计算它应该延迟的时间:

  • 5742/6000 = 0.957

这对应于“开始时间”' ffprobe报告,以及OP报告的延迟。

答案 1 :(得分:3)

该文件有一个Edit atom,它定义了要作为曲目播放的文件的一部分。

有些解复用器将其考虑在内(从54:24开始)而其他人则忽略(从55:24开始)。

此处在FFmpeg票证中讨论了类似的案例:adher to start media time in QuickTime edts/elst

  

Quicktime和VLC随后根据编辑列表播放文件,但ffmpeg使用整个时间轴。