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

一、问题描述

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

使用caniuse查询H.264兼容性,看似确实具有良好的兼容性:
在这里插入图片描述

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

在这里插入图片描述

二、问题调查

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

  1. MP4 中的编解码器不兼容。MP4 是一种容器格式,可以包含各种视频和音频编解码器。如果 MP4 文件使用 iPhone 不支持的编码格式,iPhone 将无法播放该 MP4 文件。
  2. MP4 文件已损坏。在 MP4 视频录制、传输或下载过程中,文件可能会损坏或损坏。在这种情况下,MP4 文件将无法在 iPhone 以及其他媒体播放器上播放。
  3. MP4 视频分辨率、FPS 或比特率太高。有时,您可以在 iPhone 上播放 MP4,但播放时出现断断续续的情况。这是因为您的 MP4 视频为 4K/8K 分辨率,并且具有高 FPS 或比特率。
    4.您使用的是旧iPhone。iPhone 7 之前的旧版 iPhone 手机无法播放使用 HEVC 编码的 MP4。
  4. 本机视频或电视应用程序不支持 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安装保姆级教程》:

ffprobe -show_streams 20230901-112105.mp4

在这里插入图片描述

更简洁的可以使用以下命令:

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安装保姆级教程》:

ffprobe 112105.mp4

在这里插入图片描述
可以看到文件已经达到4K分辨率,码率51651kb/s, 帧率60fps应该也是过高了。

这里还要提到与视频质量相关的两个参数profilelevel(它们的设定也会影响带码率和帧率值):

当使用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安装保姆级教程》:

ffmpeg -i 20230901-112105.mp4 -vcodec h264 -profile:v high -level 4.1 112105.mp4

在这里插入图片描述

最后使用ffprobe检查一下转换后的profile和level:

ffprobe -v error -select_streams v:0 -show_entries stream=profile,level -of default=noprint_wrappers=1 112105.mp4

在这里插入图片描述
此时,我们再查看一下前面提到的三率值:

在这里插入图片描述
顺便提一下,可能你也注意到上图中码率值有出现3个:
在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/602351.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【响应式编程-05】Lambda方法引用

一、简要描述 Lambda的方法引用也叫引用方法 方法引用初体验方法引用的底层实现方法引用的语法格式方法引用举例 静态方法引用构造方法引用普通方法引用super和this方法引用数组的方法引用 二、方法引用初体验 为什么出现方法引用? 引用已存在方法,避免重…

四则运算 C语言xdoj20

问题描述: 输入两个整数和一个四则运算符,根据运算符计算并输出其运算结果(和、差、积、商、余之一)。注意做整除及求余运算时,除数不能为零。 输入说明: 使用scanf()函数输入两个整数和一个运算符&#xf…

政府采购变数大,AI PC是联想的“新希望”?

文|新熔财经 作者|余一 发布两款AI PC,并预热CES将有AI PC大动作后,联想似乎找到了计算机终端的新思路。 而在这之前,联想终端业务面临的挑战不可谓不严重。 “事业单位更换纯国产电脑”、“联想被排除在大订单之外…

前端面试题-nodejs

1.什么是nodejs,它与传统的网页服务器有什么不同? 是什么?nodejs是基于Chrome V8引擎的JavaScript运行环境,它可以使JavaScript代码在服务器上运行。 有什么不同?第一,nodejs采用事件驱动、非阻塞式I/O模型…

汽车电子行业的 C 语言编程标准

前言 之前分享了一些编程规范相关的文章,有位读者提到了汽车电子行业的MISRA C标准,说这个很不错。 本次给大家找来了一篇汽车电子行业的MISRA C标准的文章一同学习下。 什么是MISRA? MISRA (The Motor Industry Software Reliability Ass…

微型导轨在设备中起什么作用

微型导轨精度高,摩擦系数小,自重轻,结构紧凑,可以用于电子制造设备、半导体制造设备、医疗设备、光学设备和机器人等各种工业机械设备中,那么微型导轨在设备中起什么作用呢? 1、导向与定位:为机…

G4周:CGAN,手势生成

本文为🔗365天深度学习训练营 中的学习记录博客 原作者:K同学啊|接辅导、项目定制 我的环境: 1.语言:python3.7 2.编译器:pycharm 3.深度学习框架Pytorch 1.8.0cu111 一、CGAN介绍 条件生成对抗网络(…

Visio导出eps格式图片

Visio导出eps格式图片 文章目录 Visio导出eps格式图片1. Visio中使用Adobe Acrobat虚拟打印2. Adobe Acrobat中裁剪并另存为eps格式 如何使用Visio绘图然后导出.eps格式的图片呢?这个过程需要用到Adobe Acrobat,使用Adobe Acrobat的虚拟打印功能&#xf…

ssm基于JAVA的驾校信息管理系统设计论文

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…

Java HashMap 面试题(一)

HashMap 面试题(一) 文章目录 HashMap 面试题(一)3.3 面试题-说一下HashMap的实现原理?面试题-HashMap的put方法的具体流程hashMap常见属性源码分析 3.3 面试题-说一下HashMap的实现原理? HashMap的数据结…

篇三:让OAuth2 server支持密码模式

由于Spring-Security-Oauth2停止维护&#xff0c;官方推荐采用 spring-security-oauth2-authorization-server&#xff0c;而后者默认不支持密码授权模式&#xff0c;本篇实战中采用的版本如下&#xff1a; <dependency><groupId>org.springframework.security<…

1-02VS的安装与测试

一、概述 对于一名C语言程序员而言&#xff0c;进行C语言程序的开发一般需要一个文本编辑器加上一个编译器就足够了。但为了方便起见&#xff0c;我们选择使用集成开发环境——Visual Studio&#xff08;简称VS&#xff09;。安装Visual Studio 下面讲一下如何安装VS&#xff0…

【AI视野·今日Sound 声学论文速览 第三十八期】Mon, 1 Jan 2024

AI视野今日CS.Sound 声学论文速览 Mon, 1 Jan 2024 Totally 5 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers The Arrow of Time in Music -- Revisiting the Temporal Structure of Music with Distinguishability and Unique Orientability as the …

金和OA C6 MailTemplates.aspx SQL注入漏洞复现

0x01 产品简介 金和OA协同办公管理系统软件(简称金和OA),本着简单、适用、高效的原则,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效率的核心思想,为用户提供一整套标准的办公自动化解决方案,以帮助…

【DevOps-07-3】Jenkins集成Sonarqube

一、简要说明 Jenkins安装Sonarqube插件Jenkins安装和配置Sonar-Scanner信息Jenkins打包项目中,增加Sonar-Scanner代码质量扫描二、Jenkins安装Sonarqube插件 1、登录Jenkins管理后台,搜索安装Sonar-Scanner插件 Jenkins管理后台示例:http://192.168.95.131:8080/jenkins/

Oracle数据库新手零基础入门,Oracle安装配置和操作使用详解

一、教程描述 本套教程是专门为初学者量身定制的&#xff0c;无需任何Oracle数据库基础&#xff0c;课程采用循序渐进的教学方式&#xff0c;从Oracle数据库的基础知识开始讲起&#xff0c;并不会直接涉及到一项具体的技术&#xff0c;而是随着课程的不断深入&#xff0c;一些…

docker部署mysql主从复制篇

环境准备&#xff1a;docker服务安装&#xff0c;mysql镜像 配置文件方式&#xff1a;可以挂载目录&#xff0c;也可以写好配置文件&#xff0c;利用docker cp 到容器内&#xff0c;这里直接在启动镜像创建容器时候挂载目录方式服务器上配置文件内容(下图标红路径)&#xff1a…

WEB 3D技术 three.js 顶点缩放

本文 我们来说 顶点缩放 我们官网搜索 BufferGeometry 下面有一个 scale 函数 例如 我们先将代码写成这样 上面图片和资源文件 大家需要自己去加一下 import ./style.css import * as THREE from "three"; import { OrbitControls } from "three/examples/j…

MySQL 临时表

MySQL 临时表 MySQL 临时表在我们需要保存一些临时数据时是非常有用的。 临时表只在当前连接可见&#xff0c;当关闭连接时&#xff0c;MySQL 会自动删除表并释放所有空间。 在 MySQL 中&#xff0c;临时表是一种在当前会话中存在的表&#xff0c;它在会话结束时会自动被销毁…

【教学类-09-04】20240102《游戏棋N*N》数字填写,制作棋子和骰子

作品展示 背景需求&#xff1a; 最近在清理学具材料库&#xff0c;找到一套1年多前的《N*N游戏棋》&#xff0c;把没有用完的棋盘拿出来&#xff0c;&#xff0c;想给大4班换花样&#xff0c;并把它们用掉。 程序代码在这里 【教学类-09-03】20221120《游戏棋10*10数字如何直接…