Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video mp4视频在Quicktime/AVplayer和Chrome/Firefox上的不同时间启动_Video_Avfoundation_Mp4_Avplayer_Quicktime - Fatal编程技术网

Video mp4视频在Quicktime/AVplayer和Chrome/Firefox上的不同时间启动

Video mp4视频在Quicktime/AVplayer和Chrome/Firefox上的不同时间启动,video,avfoundation,mp4,avplayer,quicktime,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的。 如果你想亲自看看的话

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

什么会导致忽略开始帧?这是一个比较Quicktime和Firefox在时间零点的计时器倒计时的屏幕截图。请注意Firefox播放器是如何在9:55开始的,而Quicktime播放器是如何提前跳到9:54的。

如果你想亲自看看的话,这是我的名片


谢谢

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

使用ffprobe查看您链接到上面的文件,可以得到:

Input#0,mov,mp4,m4a,3gp,3g2,mj2,来自'c44116b.mp4':
元数据:
主要品牌:qt
次要版本:0
兼容品牌:qt
创建时间:2015-04-25 15:54:30
持续时间:00:00:03.70,开始时间:0.957000,比特率:1164 kb/s
流#0:0(und):视频:h264(主)(avc1/0x31637661),yuv420p(电视,bt709),480x360[SAR 1:1 DAR 4:3],899kb/s,22.99 fps,22.99 tbr,6k tbn,12k tbc(默认)
元数据:
创建时间:2015-04-25 15:54:30
处理器名称:核心媒体数据处理器
编码器:H.264
您可以在这里看到,ffprobe报告的“开始”值为0.957000,对应于1秒的偏移量

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

start参数的目的似乎是为了同步而允许轨道偏移。为什么你的视频中只有一个曲目会出现这种情况还不清楚

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

根据Roman的回答,我使用mp4浏览器更详细地查看了mp4文件。由此我们可以首先看到电影的“时间尺度”:

然后是编辑原子(或编辑框,因为在mp4世界中有时也称为原子):

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

  • 5742/6000=0.957
这与ffprobe报告的“开始时间”以及OP报告的延迟相对应。

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

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

FFmpeg票证中讨论了类似的情况:

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