h、 264视频赢得';我不能在iOS上玩

h、 264视频赢得';我不能在iOS上玩,ios,html,video,encoding,h.264,Ios,Html,Video,Encoding,H.264,我有一个用h.264编码的视频文件不能在iOS上播放,我想知道为什么。以下是HTML: <video style="width: 480px; height: 360px;" autoplay controls> <source src="sample.mp4"> </video> 另外,我通过GSpot运行了它,并获得了一些额外的信息: Container isom: MP4 Base Media v1 [IS0 14496-12:2003] -

我有一个用h.264编码的视频文件不能在iOS上播放,我想知道为什么。以下是HTML:

<video style="width: 480px; height: 360px;" autoplay controls>
    <source src="sample.mp4">
</video>
另外,我通过GSpot运行了它,并获得了一些额外的信息:

Container
isom: MP4 Base Media v1 [IS0 14496-12:2003]
- mp41: MP4 v1 [ISO 14496-1:ch13]

有人能告诉我为什么这个视频不能播放吗?我知道我可以简单地对视频进行重新编码,如果我这样做了,它在iOS上就可以播放了。但是我想知道原始文件有什么问题

为了比较,这里是我对一个重新编码的版本的MediaInfo分析(这个版本有效):

GSpot关于此容器的信息不同(这可能是此容器工作的原因吗?)


我唯一能想到的另一件事是参考帧的数量(我读到的最大值是3),但重新编码的版本有4个,所以我想可能不是这样。

找到了我自己问题的解决方案:

问题是视频使用了h.264主配置文件级别5.1,而iOS仅支持AVC级别3.1(更多信息)

我通过使用十六进制编辑器更改配置文件和级别字节来确认这一点。在文件中搜索ASCII格式的
avcC
,或十六进制格式的
61 76 63 43
。第一个字节通常是
01
,对于这一目的来说并不重要,但之后应该是以下之一:

42 E0 – for Baseline Profile
4D 40 – for Main Profile
58 A0 – for Extended Profile
64 00 – for High Profile
后面的数字是十六进制级别(不含小数点),例如:

1F (31 in dec) is level 3.1
29 (41 in dec) is level 4.1
33 (51 in dec) is level 5.1

如果您查找并替换配置文件/级别字节的所有实例(例如,搜索
4D 40 33
并替换为您想要的字节——在我的例子中是
4D 40 1F
),视频现在应该在iOS上播放。请注意,许多web帮助页面都说iOS需要基线配置文件,但事实并非如此。只要AVC级别为3.1,Main就可以正常工作。

谷歌在苹果网站上的一次点击显示,当前的apple gear支持:H.264基线级别3.0、基线级别3.1、主级别3.1和高调级别4.1。问题不在于基准线和主线,而在于水平。5.1是巨大的比特率/rez,不知道为什么你的微小的低比特率视频的标题会说它需要5.1级解码器。高是个问题。尽管准确,8x8dct是每个cpu进行RD的唯一最重要的x264选项。奇怪的是,当他们支持high 4.1时,他们仍然费心列出基线3.0。AFAIK,基线3.0是高4.1的子集。这不像iphone不能解码基线4.1(没有CABAC,没有8x8dct,比特率比high 4.1低)。可能是将新设备支持的级别添加到列表或其他内容后留下的。此外,我们可以向那些广泛支持h.264但不支持CABAC(和8x8dct)的人开枪吗?现在,由于愚蠢的硬件,所有这些视频的比特率都提高了。@user428517我也遇到了同样的问题,但您发布的说明链接已经失效。你能转寄这个链接吗?你知道我能否在直播流中更改视频标题吗?
Container
isom: MP4 Base Media v1 [IS0 14496-12:2003]
- iso2: MP4 Base Media v2 [ISO 14496-12:2005]
- avc1: MP4 Base w/ AVC ext [ISO 14496-12:2005]
- mp41: MP4 v1 [ISO 14496-1:ch13]
42 E0 – for Baseline Profile
4D 40 – for Main Profile
58 A0 – for Extended Profile
64 00 – for High Profile
1F (31 in dec) is level 3.1
29 (41 in dec) is level 4.1
33 (51 in dec) is level 5.1