Web Development

/ 0评 / 1/ 最后更新:2021-01-20
ios safari无法播放部分mp4视频

需求场景

最近编辑发现部分上传的mp4视频无法在ios下播放,在chrome上是正常的。通过搜索一般都是说chrome和safari中request header的"range"字段不同,给出的解决方案都是基于后端语言的,而我们的视频都是直接放在nginx上的,并没有经过后段语言处理。实际情况是部分mp4能正常播放,部分mp4不行,更大的可能性在于mp4本身的问题。

解决方案

通过ffmpeg查看能播放的mp4和不能播放的mp4的视频信息ffprobe test.mp4,两者相比较,可以发现两者有个参数不同,一个是yuv420p,一个是yuv444p,能播放的是yuv420p,不能播放的是yuv444p,通过格式工厂等工具将mp4重新转格式之后,确实可以播放了。

后续探索

可是为什么yuv420p是可以的yuv444p是不行的,safari是不兼容yuv444p么?后来通过搜索,终于发现国外的一位的老哥,也遇到同样的问题,并给出了ffmpeg下yuv444p转yuv420p的方案。ffmpeg -i a.mp4 -vcodec libx264 -acodec copy -vprofile main -pix_fmt yuv420p a-new.mp4详见video not playing on Android (chrome) and iOS (safari)

yuv444p转yuv420p

ffmpeg -i [input file] -c:v libx264 -pix_fmt yuv420p [output file]
详见FFMPEG Convert YUV444p to YUV420p

基于ffmpeg的批量转mp4命令行工具

browser-mp4

基于ffmpeg的GUI工具

ffmpegGUI, 作者没有提供打包的文件,需要自行编译打包,并且暂不支持批量转换

浏览器兼容最好的mp4要求

h264 yuv420p

1

Leave a Reply

Your email address will not be published. Required fields are marked *