果洛电子商务网站建设哪家好,泉州有专门帮做网站的吗,阴阳师网站建设,什么网站做奢侈品的工厂店一、问题描述
MP4使用H.264编码通常具有良好的兼容性#xff0c;因为H.264是一种广泛支持的视频编码标准。它可以在许多设备和平台上播放#xff0c;包括电脑、移动设备和流媒体设备。
使用caniuse查询H.264兼容性#xff0c;看似确实具有良好的兼容性#xff1a;
然而…一、问题描述
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有比较大的兼容问题那么如何确定文件的编码格式呢 1mp4box.js查看MIME 测试网址https://gpac.github.io/mp4box.js/test/filereader.html 如果一个MP4视频文件的编码格式为H.264则其MIME是会包括avc这个字符串的因此我们可以通过判断MIME中是否包含avc从而进行H.264视频编码格式的判断。例如
不能在线播放的audio/mp4; codecsmp4v,mp4a.40.2,tmcd; profilesisom,iso2,mp41 能在线播放的video/mp4; codecsavc1.640028,mp4a.40.2,tmcd; profilesisom,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 streamprofile,level -of defaultnoprint_wrappers1 20230901-112105.mp4注ffproble的level52应该是对应的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/305.1。
2.分辨率、帧率FPS及码率
首先先了解一下三者的概念及关系 分辨率、帧率和码率是视频质量和播放性能的三个重要参数。 分辨率分辨率是指图像或视频中的像素数量。常见的分辨率有720p1280×720、1080p1920×1080和4K3840×2160等。分辨率越高图像或视频的细节和清晰度就越高。 帧率FPS帧率是指每秒显示的图像帧数。通常以“帧每秒”来表示。常见的帧率有24、30、60等。帧率越高视频播放就越流畅尤其在快速运动的场景中能够更好地展现细节。 码率码率是指视频或音频数据传输速率通常以每秒传输的比特数来表示单位为kbps千比特每秒或Mbps兆比特每秒。码率越高视频或音频的质量就越高但同时占用的带宽也会更大。 这三个参数之间存在着密切的关系。高分辨率和高帧率的视频需要更高的码率来保证播放质量码率 分辨率 × 帧率 × 每像素比特数。例如一个高分辨率的视频如果帧率较低或者码率不足可能会出现画面卡顿或者模糊不清的情况。 在制作和传输视频时需要根据具体情况综合考虑这三个因素以达到最佳的观看效果和传输性能。 接下来使用ffprobe命令查看文件的这三个率的值, 需要先安装FFmpeg安装可以参考《FFmpeg安装保姆级教程》
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
本文转换的方法使用ffmpegFFmpeg安装可以参考《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 streamprofile,level -of defaultnoprint_wrappers1 112105.mp4此时我们再查看一下前面提到的三率值 顺便提一下可能你也注意到上图中码率值有出现3个
这里整个是9215k视频是9072k音频是131k视频和音频的码率加起来和整个的码率还差一点。其实这里有些封包数据也要算到整个文件的码率中的所以有一些差异。