ffmpeg 编码的 mp4 视频无法在 IOS 上播放问题 时间: 2020-09-17 18:03 分类: JAVA 今天突然发现网站上很多视频在`IOS`系统上又出现了无法播放的问题。 之前出现过一次,那是由于使用的`ffmpeg`内置的`aac`编码器导致的,换成`libfdk_aac`就没问题了,这个问题貌似目前直接使用`ffmpeg`的内置`aac`编码器也没问题了,应该是升级过勒。 今天又发现切片的`HLS`视频流居然无法播放,多次测试,发现要么有些`mp4`未切片之前本身就播放不了,这个问题是因为视频是由`HEVC 10bit`转为`AVC 10bit`导致的,暂且不说如何解决。 还有种情况就是`mp4`播放没有显示错误,只是画面是静止的,手动拖动都是一帧一帧的画面,无法连续播放。 综上两种情况,切片出来的`HLS`流也是一样无法播放的。 网上有人说是视频编码级别导致的,尝试后确实是这个问题导致的。  以上是`IOS`支持的编码级别,这不是最新的。 所以在压制时加上编码级别参数就没有问题了,以前的压制脚本我是加了级别参数的,后来不知什么原因去掉了,所以今天又发现了很多视频无法播放。 我最后选择的压制级别是`-profile:v high -level 4.1`,加上这个参数对付绝大多数视频是没问题了,但是我上面说的`10 bit`编码的视频如果只加上面参数就会报错,需要改成: > -profile:v high -pix_fmt yuv420p -level 4.1 补充 --- 最终发现不仅是上面编码级别问题(其实在新出的苹果系列设备上基本上不会有什么问题,都差不多兼容了) 最终导致某些`mp4`在`IOS`系统上无法播放的罪魁祸首还是音频编码问题,也不是前面说的`ffmpeg`自带`aac`的问题,而是音频声道的问题。 实践发现`iphone`设备上`AAC 5.1`声道是不支持的,也就是6声道。所以在压制时一般只能选择双声道,也就是`AAC stereo`,编码参数为:`-ac 2` 标签: 无