1、问题描述

mp4视频在安卓上全部能播放,部分mp4视频在ios不能播放。表现为刚开始缓冲加载几秒钟后,就显示加载失败的图标了,或者直接显示加载失败图标

图片.png

2、问题分析

2.1什么问题导致的

查阅了许多资料后,感谢在这篇文章中得到了一些启示https://www.cnblogs.com/aleafo/p/7644553.html。文中言简意骇的指出是“h264编码的压缩级别问题导致“

2.2H264编码是什么

通过某种特定的压缩技术,将某个视频格式的文件转换为另一种视频格式的文件的技术称为视频编码。h264是视频流中其中一种编码标准。H264编码profile & level 控制https://www.cnblogs.com/tinywan/p/6402007.html,这里面说到H264编码的压缩级别,从压缩比例来说,baseline< main < high,对于带宽比较局限的在线视频,可能会优先选择high。但是上文说到,部分mp4视频不能在ios上播放,是由于h264编码的压缩比导致的,那么我们怎么知道ios支持哪些压缩级别呢?

2.3ios支持编码格式列表

虽然协议规范没有限制视频和音频格式,但目前的苹果实现支持以下格式(https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/FrequentlyAskedQuestions/FrequentlyAskedQuestions.html)
可能这个很久没有更新了哈,一些文档已经说明了h264的 Profile Level可以达到了5.2

h264 profile.png
2.4怎么查看视频是什么编码方式

可以对mp4文件右键显示简介,会有一个参数“编解码器:H.264, AAC”

2.5怎么查看视频的压缩级别

emmmmm...正在解决中,后续会更新文档。但是建议你们先尝试,广大群众知道的话,给个回应呐,嘻嘻~

1.文件从哪儿来的,去源头问下(当然这个我问过了,他们自己都不知道压缩界别是多少,只是说软件会优先选择压缩级别,emmmm)

2.windows系统可以利用potplayer等软件,查看对应的mp4文件的压缩级别(目前没试过)

3.mac os 可以利用handbrake软件试试看,目前我试了,没查看到压缩级别

2.6怎么转码

1.自己转:在提供视频时,最好让提供者在压缩的时候,不要选择high4.2以上的(也不要优先选择,也可能会造成优先选择更高的压缩级别)

2.第三方:有时会把视频上传到第三方,例如又拍云,七牛云等,他们会有一个转码的服务,不同的第三方,可以参考开发文档看下,或者联系客服。对于又拍云,在转码的时候会加上level这个参数https://docs.upyun.com/cloud/av/#_11

upyun转码.jpg
还有一种原因:是mp4文件的编码方式为隔行扫描,也播放不了,改为逐行扫描,就好了.
能播只有声音
视频信息:(mediainfo)
Scan type : Interlaced
Scan type, store method : Separated fields
不能播放
视频信息:
Scan type : MBAFF
Scan type, store method : Interleaved fields
最新:码率太高也无法播放 .

3.总结

mp4在安卓上可以播放,但部分mp4在ios上不可播放的视频,需要查看该视频的压缩级别

参考:https://www.jianshu.com/p/31f0593496ef

最后更新于 2020年7月22日

解决部分mp4视频在ios上无法播放问题
标签: