IOS:Safari无法播放MP4(H.264编码)

打印 上一主题 下一主题

主题 846|帖子 846|积分 2538

一、问题形貌

MP4利用H.264编码通常具有良好的兼容性,因为H.264是一种广泛支持的视频编码标准。它可以在许多装备和平台上播放,包括电脑、移动装备和流媒体装备。
利用caniuse查询H.264兼容性,看似确实具有良好的兼容性:

然而,今天的前端小伙伴报告IOS上遇到MP4无法播放,而Android上能正常播放。

二、问题调查

考虑一下方面(相关信息可参阅Why and How to Solve MP4 not Playing on iPhone Error?):
   

  • MP4 中的编解码器不兼容。MP4 是一种容器格式,可以包含各种视频和音频编解码器。如果 MP4 文件利用 iPhone 不支持的编码格式,iPhone 将无法播放该 MP4 文件。
  • MP4 文件已破坏。在 MP4 视频录制、传输或下载过程中,文件大概会破坏或破坏。在这种情况下,MP4 文件将无法在 iPhone 以及其他媒体播放器上播放。
  • MP4 视频分辨率、FPS 或比特率太高。偶然,您可以在 iPhone 上播放 MP4,但播放时出现断断续续的情况。这是因为您的 MP4 视频为 4K/8K 分辨率,并且具有高 FPS 或比特率。
    4.您利用的是旧iPhone。iPhone 7 之前的旧版 iPhone 手机无法播放利用 HEVC 编码的 MP4。
  • 本机视频或电视应用程序不支持 MP4。iPhone 上的本机视频或电视应用程序不支持 MP4 播放。在这种情况下,建议您下载第三方媒体播放器。
  确定文件没问题,可以打扫MP4文件破坏,那么可以打扫以下几点:
1.MP4文件的编码

确认文件编码格式是否为H.264(现在H.265有比较大的兼容问题),那么怎样确定文件的编码格式呢?
(1)mp4box.js查看MIME
测试网址:https://gpac.github.io/mp4box.js/test/filereader.html

如果一个MP4视频文件的编码格式为H.264,则其MIME是会包括avc这个字符串的,因此我们可以通过判定MIME中是否包含"avc"从而进行H.264视频编码格式的判定。比方:
不能在线播放的:audio/mp4; codecs="mp4v,mp4a.40.2,tmcd"; profiles="isom,iso2,mp41"
能在线播放的:video/mp4; codecs="avc1.640028,mp4a.40.2,tmcd"; profiles="isom,iso2,avc1,mp41"
(2)利用视频播放软件查看
①PotPlayer

②VLC media player

(3)利用ffprobe查看
必要先下载安装ffmpeg后利用命令,FFmpeg安装可以参考《FFmpeg安装保姆级教程》:
  1. ffprobe -show_streams 20230901-112105.mp4
复制代码

更简便的可以利用以下命令:
  1. ffprobe -v error -select_streams v:0 -show_entries stream=profile,level -of default=noprint_wrappers=1 20230901-112105.mp4
复制代码

注:ffproble的level=52,应该是对应的H.264标准中Level 5.2。关于这一点,可以从ffproble的文档里得出:
   13.11 h264_metadata:

    13.14 hevc_metadata:(H.265 / HEVC (High Efficiency Video Coding)

  上述两个截图,提到了两个字段:level_idc 和general_level_idc ,这两个分别与H.264和H.265的Level对应,并且对应关系不一样。general_level_idc 与H.265的Level对应关系如下:

codec标准要求level在存储的时候,会先乘以30。也就是general_level_idc =level*30,以是general_level_idc 为153时,对应的H.265的Level为:153/30=5.1。
2.分辨率、帧率FPS及码率

起首先了解一下三者的概念及关系:
   分辨率、帧率和码率是视频质量和播放性能的三个告急参数。
分辨率:分辨率是指图像或视频中的像素数量。常见的分辨率有720p(1280×720)、1080p(1920×1080)和4K(3840×2160)等。分辨率越高,图像或视频的细节和清楚度就越高。
帧率(FPS):帧率是指每秒显示的图像帧数。通常以“帧每秒”来表示。常见的帧率有24、30、60等。帧率越高,视频播放就越流畅,尤其在快速运动的场景中可以或许更好地展现细节。
码率:码率是指视频或音频数据传输速率,通常以每秒传输的比特数来表示,单位为kbps(千比特每秒)或Mbps(兆比特每秒)。码率越高,视频或音频的质量就越高,但同时占用的带宽也会更大。
这三个参数之间存在着密切的关系。高分辨率和高帧率的视频必要更高的码率来保证播放质量(码率 = 分辨率 × 帧率 × 每像素比特数)。比方,一个高分辨率的视频如果帧率较低或者码率不足,大概会出现画面卡顿或者模糊不清的情况。
在制作和传输视频时,必要根据详细情况综合考虑这三个因素,以到达最佳的观看效果和传输性能。
  接下来利用ffprobe命令查看文件的这三个率的值, 必要先安装FFmpeg,安装可以参考《FFmpeg安装保姆级教程》:
  1. ffprobe 112105.mp4
复制代码

可以看到文件已经到达4K分辨率,码率51651kb/s, 帧率60fps应该也是过高了。
这里还要提到与视频质量相关的两个参数profile和level(它们的设定也会影响带码率和帧率值):
当利用H.264编码时,profile和level是指视频编码的配置参数,它们决定了视频的质量、兼容性和性能。详细来说,这些参数包括:
Profile(配置文件):指定了编码器可以利用的特定功能和算法,影响了视频的压缩效率和质量。常见的profile包括Baseline、Main和High。Baseline适用于较低质量的视频,Main适用于一般质量的视频,而High适用于高质量的视频。
Level(级别):指定了视频的参数,如分辨率、帧率和比特率的限制。不同的level对应不同的视频参数限制,比方Level 3.0适用于标清视频,Level 4.1适用于高清视频,Level 5.1适用于超高清视频。
选择合适的profile和level取决于视频的需求和目标平台的兼容性。比方,对于移动装备和低带宽环境,可以选择Baseline profile和较低的level,而对于高清视频和蓝光光盘,则可以选择High profile和更高的level。因此,根据详细的应用场景来选择合适的profile和level组合是非常告急的。
   简单来说:
H.264的Profile和level 可以明白为 gzip的level, 等级越高,文件压缩得越小,传输越快,但cpu斲丧越多。
Profile和level越高越好吗?压缩级别越高不仅在压缩时cpu的斲丧越高,视频在播放时也必要斲丧更多的cpu进行解压,各类型手机的硬件条件不一样,以是支持的压缩级别也不同。
  通过苹果官方文档中ios能支持的视频格式可知,并不是所有h264编码的mp4文件都能在ios中播放:

从上可知,iphone4之后可以利用High Profile Level 4.1。
三、办理方案

如果要保持MP4格式不变,针对IOS的兼容,必要将文件转换成High Profile Level 4.1。
   许多压缩软件或视频转码软件是没有Profile和level选项的,告急原因也是考虑到视频的压缩级别过高,在某些环境下无法播放。现在市场上流行的转码软件,在转码或压缩时:
1.有的不对Profile和level修改,直接进行有损压缩;
2.有的是直接转码为Main Profile level 3.1,是因为iPhone 4 支持的最高就是这个档位。
  注:如果必要利用软件进行转换,可以利用EaseFab Video Converter
本文转换的方法利用ffmpeg,FFmpeg安装可以参考《FFmpeg安装保姆级教程》:
  1. ffmpeg -i 20230901-112105.mp4 -vcodec h264 -profile:v high -level 4.1 112105.mp4
复制代码

末了利用ffprobe检查一下转换后的profile和level:
  1. ffprobe -v error -select_streams v:0 -show_entries stream=profile,level -of default=noprint_wrappers=1 112105.mp4
复制代码

此时,我们再查看一下前面提到的三率值:

顺便提一下,大概你也注意到上图中码率值有出现3个:

这里,整个是9215k,视频是9072k,音频是131k,视频和音频的码率加起来和整个的码率还差一点。其实这里有些封包数据也要算到整个文件的码率中的,以是有一些差异。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我可以不吃啊

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表