当前位置: 首页 > news >正文

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

一、问题描述

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

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

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

在这里插入图片描述

二、问题调查

首先排除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后使用命令(Windows下下载安装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.H.264的兼容问题

当使用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 支持的最高就是这个档位。

本文转换的方法使用ffmpeg(Windows下下载安装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

在这里插入图片描述

相关文章:

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

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

Pycharm恢复默认设置

window 系统 找到下方目录-->删除. 再重新打开Pycharm C:\Users\Administrator\.PyCharm2023.3 你的不一定和我名称一样 只要是.PyCharm*因为版本不同后缀可能不一样 mac 系统 请根据需要删除下方目录 # Configuration rm -rf ~/Library/Preferences/PyCharm* # Caches …...

简单计算器实现,包括两个数

正在加载中... 简单计算器实现,包括两个数 ❤ 厾罗 简单计算器实现,包括两个数 以下代码用于实现简单计算器实现,包括两个数基本的加减乘除运算: 实例(Python 3.0) # Filename : test.py # author by : www.dida100.com …...

竞赛保研 基于机器视觉的手势检测和识别算法

0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng…...

Android App从备案到上架全过程

不知道大家注意没有,最近几年来,新的移动App想要上架是会非常困难的,并且对于个人开发者和小企业几乎是难如登天,各种备案和审核。但是到底有多难,或许只有上架过的才会有所体会。 首先是目前各大应用市场陆续推出新的声明,各种备案截止日期到12月就要到最后期限责令整改…...

用邮件及时获取变更的公网IP--------python爬虫+打包成exe文件

参考获取PC机公网IP并发送至邮箱 零、找一个发送邮件的邮箱 本文用QQ邮箱为发送邮箱,网易等邮箱一般也有这个功能,代码也是通用的。 第一步:在设置中找到账户,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,点击获…...

c++学习:函数模板+实战

目录 函数模板 思考 如果两个参数的类型不一样可以下面这么写 如果有指定返回参数可以下面这么写 实战 找出三个数中最大的一个 函数模板 实际上就是建立一个通用函数,其函数返回值类型和形参类型不具体指定,用一个虚拟的类型来代表template 是一个…...

three.js gltf后处理颜色异常(伽马校正)

效果&#xff1a; 应用了伽马校正&#xff0c;好像效果不明显 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"><…...

面试经典150题(55-58)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第二十四天&#xff09;完成了4道(55-58)150&#xff1a; 55.&#xff08;19. 删除链表的倒数第 N 个结点&#xff09;题目描述&#xff1a; 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff…...

如果一个n位正整数等于其各位数字的n次方之和

❤ 厾罗 如果一个n位正整数等于其各位数字的n次方之和 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 5^3 3^3 153。 1000以内的阿姆斯特朗数&#xff1a; 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407。 以下代码用于检测用户输…...

solidity显示以太坊美元价格

看过以太坊白皮书的都知道&#xff0c;以太坊比较比特币而言所提升的地方中&#xff0c;我认为最重要的一点就是能够访问外部的数据&#xff0c;这一点在赌博、金融领域应用会很广泛&#xff0c;但是区块链是一个确定的系统&#xff0c;包括里面的所有数值包括交易ID等都是确定…...

ChatGPT学习笔记——大模型基础理论体系

1、ChatGPT的背景与意义 近期,ChatGPT表现出了非常惊艳的语言理解、生成、知识推理能力, 它可以极好的理解用户意图,真正做到多轮沟通,并且回答内容完整、重点清晰、有概括、有条理。 ChatGPT 是继数据库和搜索引擎之后的全新一代的 “知识表示和调用方式”如下表所示。 …...

Termius for Mac/Win:一款功能强大的终端模拟器、SSH 和 SFTP 客户端软件

随着远程工作和云技术的普及&#xff0c;对于高效安全的远程访问和管理服务器变得至关重要。Termius&#xff0c;一款强大且易用的终端模拟器、SSH 和 SFTP 客户端软件&#xff0c;正是满足这一需求的理想选择。 Termius 提供了一站式的解决方案&#xff0c;允许用户通过单一平…...

python如何读取被压缩的图像

读取压缩的图像数据&#xff1a; PackBits 压缩介绍&#xff1a; CCITT T.3 压缩介绍&#xff1a; 读取压缩的图像数据&#xff1a; 在做图像处理的时候&#xff0c;平时都是使用 函数io.imread() 或者是 函数cv2.imread( ) 函数来读取图像数据&#xff0c;很少用PIL.Image…...

华为OD机试 - 寻找最优的路测线路(Java JS Python C)

题目描述 评估一个网络的信号质量,其中一个做法是将网络划分为栅格,然后对每个栅格的信号质量计算。 路测的时候,希望选择一条信号最好的路线(彼此相连的栅格集合)进行演示。 现给出 R 行 C 列的整数数组 Cov,每个单元格的数值 S 即为该栅格的信号质量(已归一化,无单…...

互联网演进历程:从“全球等待”到“全球智慧”的技术革新与商业变革

文章目录 一、导言二、World Wide Wait (全球等待)阶段1. 技术角度2. 用户体验3. 企业收益4. 教育影响 三、World Wide Web (万维网)阶段1. 技术角度2. 用户体验3. 企业收益4. 教育影响 四、World Wide Wisdom (全球智慧)阶段1. 技术角度2. 用户体验3. 企业收益4. 教育影响 五、…...

计算机组成原理——总线

总线特点 1.1. 分时&#xff1a;分时是指同一时刻只允许有一个部件向总线发送信息&#xff0c;若系统中有多个部件&#xff0c;则它们只能分时地向总线发生信息。 1.2. 共享&#xff1a;共享是指总线上可以挂接多个部件&#xff0c;各个部件之间互相交换的信息都可以通过这组线…...

2023.12.27 关于 Redis 数据类型 List 常用命令

目录 List 类型基本概念 List 类型特点 List 操作命令 LPUSH LPUSHX RPUSH RPUSHX LRANGE LPOP RPOP LINDEX LINSERT LREM LTRIM LSET 阻塞版本的命令 阻塞版本 和 非阻塞版本的区别 BLPOP & BRPOP List 类型基本概念 Redis 中的列表&#xff08;list&am…...

【Web】vulhub-httpd apache解析漏洞复现(1)

目录 ①CVE-2017-15715 ②apache_parsing_vulnerability ①CVE-2017-15715 贴出源码&#xff1a; <?php if(isset($_FILES[file])) {$name basename($_POST[name]);$ext pathinfo($name,PATHINFO_EXTENSION);if(in_array($ext, [php, php3, php4, php5, phtml, pht]))…...

市场复盘总结 20240103

仅用于记录当天的市场情况,用于统计交易策略的适用情况,以便程序回测 短线核心:不参与任何级别的调整 昨日回顾: 方法一:指标选股 select * from dbo.ResultAll where 入选类型 like %指标选股% and 入选日期=20240103;方法二:趋势选股法 1、最低价持续3日上涨 2、均价…...

【零基础部署】Ubuntu 安装 Docker 保姆级教程

Docker 是当今最流行的容器化平台之一&#xff0c;它能让你把应用及其依赖打包到一个轻量级的容器中运行。无论你是想搭建开发环境、部署服务&#xff0c;还是学习云原生技术&#xff0c;Docker 都是必备技能。本文将手把手带你从零开始&#xff0c;在 Ubuntu 系统上完成 Docke…...

2026 年行业真相:履职规范背后的管理秘密

现场冲突&#xff1a;安全与进度的激烈碰撞在工程建设领域&#xff0c;安全与进度的冲突一直是个老大难问题。就拿上海中心的建设来说&#xff0c;如此庞大复杂的项目&#xff0c;施工过程中安全管理难度极大。在某些施工阶段&#xff0c;为了赶进度&#xff0c;部分施工人员可…...

别再死磕ViT了!用Swin-Transformer搞定高分辨率图像识别,保姆级原理拆解

高分辨率图像识别新范式&#xff1a;Swin-Transformer实战指南 当计算机视觉工程师面对4K医学影像或卫星地图时&#xff0c;传统ViT模型往往会遭遇显存爆炸的尴尬。我曾在一个遥感项目中发现&#xff0c;直接将ViT应用于20482048像素的图像&#xff0c;单次前向传播就消耗了32G…...

手把手教你用CCS v10为F280049C配置工程:从零搭建、RAM/FLASH切换、到数学库调用的完整流程

F280049C开发实战&#xff1a;CCS v10工程配置与RAM/FLASH切换全指南 第一次接触TI C2000系列DSP时&#xff0c;面对CCS开发环境和复杂的工程配置&#xff0c;很多开发者都会感到无从下手。本文将以F280049C这款高性价比DSP为例&#xff0c;带你从零开始搭建开发环境&#xff…...

auto-rednote:自动化信息整理工具的设计原理与实战应用

1. 项目概述与核心价值 最近在整理个人笔记和知识库时&#xff0c;我遇到了一个几乎所有内容创作者和开发者都会头疼的问题&#xff1a;如何高效地将散落在各处的、格式不一的“红色笔记”&#xff08;比如微信收藏、网页剪藏、临时备忘录&#xff09;自动整理成结构化的、可检…...

从丝杆到直线电机:半导体运动台驱动技术演进与选型指南

1. 半导体运动台驱动技术的核心挑战 在半导体制造领域&#xff0c;运动平台就像精密仪器的心脏&#xff0c;每一次跳动都关乎生产效率和产品质量。想象一下&#xff0c;光刻机要在指甲盖大小的芯片上绘制比头发丝还细的电路&#xff0c;这相当于让一台卡车在足球场上精准停到误…...

工程师如何驾驭参考设计:从复制到创新的实战指南

1. 参考设计的双刃剑&#xff1a;工程师的“爱恨情仇”在电子工程这个行当里混了十几年&#xff0c;我发现自己对“参考设计”的感情&#xff0c;就像对一位能力超群但性格有点别扭的同事。你离不开他&#xff0c;因为他总能帮你快速搞定最棘手的难题&#xff0c;让你在项目截止…...

机器人接触式操作:混合式轨迹优化与策略学习

1. 机器人接触式操作的核心挑战与解决方案在机器人操作领域&#xff0c;接触式任务&#xff08;如物体翻转、装配、精密放置&#xff09;一直是最具挑战性的问题之一。这类任务要求机器人频繁建立和断开与物体的接触&#xff0c;同时需要精确控制接触力和运动轨迹。哪怕几毫米的…...

PS2021神经滤镜离线包保姆级安装指南(附文件夹显示与路径详解)

PS2021神经滤镜离线包安装全流程实战手册 第一次打开Photoshop 2021的神经滤镜功能时&#xff0c;那个漫长的下载进度条简直让人崩溃。特别是当网络环境不稳定时&#xff0c;下载失败的概率直线上升。其实Adobe官方提供了完整的离线安装方案&#xff0c;只是隐藏得比较深——就…...

开源无模式数据表格框架:构建自主可控SaaS应用的核心组件

1. 项目概述&#xff1a;一个为SaaS而生的开源数据表格框架如果你正在寻找一个能嵌入到自己SaaS产品里的数据表格组件&#xff0c;或者想搭建一个类似CRM、内部仪表盘的工具&#xff0c;并且对Airtable、Clay这类产品的闭源、云依赖和定价模式感到头疼&#xff0c;那么你找对地…...