h.264视频无法在iOS上播放

 -啊-亮---_252_980 发布于 2023-02-02 20:15

我有一个使用h.264编码的视频文件,该文件无法在iOS上播放,我想知道为什么。这是HTML:


该视频在桌面浏览器中可以正常播放,但是在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                           : Main@L5.1
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]

谁能告诉我为什么此视频无法播放?我知道我可以重新编码视频,如果可以,它可以在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                           : High@L2.1
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个,所以我想可能不是。

1 个回答
  • 找到了我自己的问题的解决方案:

    问题是该视频使用了h.264 Main Profile级别5.1,而iOS仅支持AVC级别3.1(更多信息,请参见)。

    我通过按照以下说明使用十六进制编辑器更改配置文件和级别字节来确认这一点。在文件avcC中搜索ASCII或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需要Baseline配置文件,但事实并非如此。只要AVC级别为3.1,Main即可正常工作。

    2023-02-02 20:20 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有