2014-01-14 185 views
2

我有用h.264編碼的視頻文件,不會在iOS上播放,我想知道爲什麼。這裏的HTML:h.264視頻不會在iOS上播放

<video style="width: 480px; height: 360px;" autoplay controls> 
    <source src="sample.mp4"> 
</video> 

此視頻在桌面瀏覽器正常播放,但iOS設備上我看到中間有一條斜線的未點擊播放圖標。我讀過這意味着視頻編碼存在問題,但我不確定問題所在。

我跑到過的MediaInfo視頻:

General 
Format         : MPEG-4 
Format profile       : Base Media 
Codec ID         : isom 
File size        : 706 KiB 
Duration         : 15s 256ms 
Overall bit rate mode     : Variable 
Overall bit rate       : 379 Kbps 

Video 
ID          : 1 
Format         : AVC 
Format/Info        : Advanced Video Codec 
Format profile       : [email protected] 
Format settings, CABAC     : Yes 
Format settings, ReFrames    : 6 frames 
Codec ID         : avc1 
Codec ID/Info       : Advanced Video Coding 
Duration         : 15s 250ms 
Bit rate         : 311 Kbps 
Width         : 480 pixels 
Height         : 360 pixels 
Display aspect ratio      : 4:3 
Frame rate mode       : Constant 
Frame rate        : 24.000 fps 
Color space        : YUV 
Chroma subsampling      : 4:2:0 
Bit depth        : 8 bits 
Scan type        : Progressive 
Bits/(Pixel*Frame)      : 0.075 
Stream size        : 578 KiB (82%) 

Audio 
ID          : 2 
Format         : AAC 
Format/Info        : Advanced Audio Codec 
Format profile       : LC 
Codec ID         : 40 
Duration         : 15s 256ms 
Bit rate mode       : Variable 
Bit rate         : 62.8 Kbps 
Channel(s)        : 2 channels 
Channel positions      : Front: L R 
Sampling rate       : 44.1 KHz 
Compression mode       : Lossy 
Stream size        : 117 KiB (17%) 

而且,我跑它通過G點,並得到了一些額外的信息:

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

誰能告訴我爲什麼視頻不會玩?我知道我可以簡單地重新編碼視頻,如果我這樣做,它可以在iOS上播放。但我想知道原始文件的問題是什麼。

爲了便於比較,下面是我做了重新編碼版本的MediaInfo分析(這一個工程):

General 
Format         : MPEG-4 
Format profile       : Base Media 
Codec ID         : isom 
File size        : 990 KiB 
Duration         : 15s 256ms 
Overall bit rate mode     : Variable 
Overall bit rate       : 532 Kbps 
Writing application      : Lavf53.19.0 

Video 
ID          : 1 
Format         : AVC 
Format/Info        : Advanced Video Codec 
Format profile       : [email protected] 
Format settings, CABAC     : Yes 
Format settings, ReFrames    : 4 frames 
Codec ID         : avc1 
Codec ID/Info       : Advanced Video Coding 
Duration         : 15s 250ms 
Bit rate         : 414 Kbps 
Width         : 480 pixels 
Height         : 360 pixels 
Display aspect ratio      : 4:3 
Frame rate mode       : Constant 
Frame rate        : 24.000 fps 
Color space        : YUV 
Chroma subsampling      : 4:2:0 
Bit depth        : 8 bits 
Scan type        : Progressive 
Bits/(Pixel*Frame)      : 0.100 
Stream size        : 771 KiB (78%) 
Writing library       : x264 core 118 r2085 8a62835 
Encoding settings      : cabac=1/ref=3/deblock=1:0:0/analyse=0x3:0x111/me=hex/subme=6/psy=1/psy_rd=1.00:0.00/mixed_ref=1/me_range=16/chroma_me=1/trellis=1/8x8dct=1/cqm=0/deadzone=21,11/fast_pskip=1/chroma_qp_offset=-2/threads=12/sliced_threads=0/nr=0/decimate=1/interlaced=0/bluray_compat=0/constrained_intra=0/bframes=3/b_pyramid=2/b_adapt=1/b_bias=0/direct=1/weightb=1/open_gop=0/weightp=2/keyint=250/keyint_min=24/scenecut=40/intra_refresh=0/rc_lookahead=40/rc=crf/mbtree=1/crf=22.0/qcomp=0.60/qpmin=0/qpmax=69/qpstep=4/ip_ratio=1.40/aq=1:1.00 

Audio 
ID          : 2 
Format         : AAC 
Format/Info        : Advanced Audio Codec 
Format profile       : LC 
Codec ID         : 40 
Duration         : 15s 256ms 
Bit rate mode       : Variable 
Bit rate         : 111 Kbps 
Maximum bit rate       : 128 Kbps 
Channel(s)        : 2 channels 
Channel positions      : Front: L R 
Sampling rate       : 44.1 KHz 
Compression mode       : Lossy 
Stream size        : 207 KiB (21%) 

G點的這一個集裝箱的信息是不同的(可能這就是爲什麼這個工作?) :

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] 

我能想到的唯一的另一件事是參考幀的數量(我讀過最大爲3),但重新編碼版本有4個,所以我推測這可能不是。

回答

3

找到了解決我自己的問題:

的問題是,視頻中使用的標準H.264 Main Profile 5.1的水平,而iOS只支持AVC水平3.1(更多信息here)。

我通過以下these instructions確認了這一點,使用十六進制編輯器更改配置文件和級別字節。在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上播放。請注意,很多網頁幫助頁面都表示iOS需要基線配置文件,但這似乎並不正確。只要AVC級別爲3.1,主要工作正常。

+1

谷歌在蘋果網站上發佈的消息稱,目前的蘋果設備支持:H.264基線級3.0,基線級3.1,主級3.1和高端級4.1。問題不是基準與主要,而是水平。 5.1是巨大的比特率/雷茲,不知道爲什麼你的微小的低比特率的視頻會有它的標題說它需要一個level5.1解碼器。高是概率。但準確的說,8x8dct是RD每CPU的最重要的x264選項。 https://developer.apple。com/library/ios/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/FrequentlyAskedQuestions/FrequentlyAskedQuestions.html –

+1

奇怪的是,他們仍然懶得列出支持高4.1的基線3.0。 AFAIK,基線3.0是高4.1的子集。它不像iPhone無法解碼基線4.1(沒有CABAC,沒有8x8dct,比4.1的低比特率。)http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Levels。可能會將新設備支持的級別附加到列表中,或者其他內容。另外,我們可以拍攝誰爲h.264廣泛支持,但只有沒有CABAC(和8x8dct)是個好主意?現在由於愚蠢的硬件,所有這些視頻都會帶來更多的比特率。 –