我有一个用 h.264 编码的视频文件无法在 iOS 上播放,我想知道原因。这是 HTML:
<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%)
另外,我通过 GSpot 运行了它并获得了一些附加信息:
Container
isom: MP4 Base Media v1 [IS0 14496-12:2003]
- mp41: MP4 v1 [ISO 14496-1:ch13]
谁能告诉我why该视频无法播放?我知道我可以简单地重新编码视频,如果这样做,它在 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%)
GSpot 关于这个容器的信息是不同的(这可能就是这个容器起作用的原因吗?):
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,所以我想这可能不是它。