IOS11+ 系统无法播放 HEVC 编码视频

1,333 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情

问题描述

IOS11+ 直接使用拍照功能录制视频后,不做任何操作上传文件,导致上传后的视频文件,无法在浏览器中正常播放。

问题原因

  • 无法播放的原因
    • 苹果在 iOS11 中,针对 iPhone 7及以上设备启用了新的默认视频编码 HEVC(拍摄视频格式仍然是MOV),替换掉了之前系统的默认视频编码 H.264。HEVC 对比 H.264 编码的优点是在不损失画质的情况下,能够大大降低视频占用的存储空间,同时还有更多的改进。
    • 目前 Windows 系统和部分第三方视频播放器对 HEVC 编码视频还没有很好的兼容,因此播放 HEVC 编码的视频时可能会出现无法播放的情况。如需播放则需使用兼容此编码的播放器,或者将视频转成播放器支持的编码格式。
    • 将 HEVC 编码视频导入到 iOS10 或者更低版本系统的苹果设备时,苹果系统也无法播放。
  • HEVC/H.265 Web浏览器支持情况:

clipboard.png

问题结论

  • IOS11+ 的苹果手机上录制的视频,存在一种新的视频编码格式,虽然后缀和普通的编码格式相同,都为 mov,但是新的视频编码格式为 HEVC/H.265 标准,而普通的视频编码格式为 MPEG-4AVC/H.264 标准。
  • 当前大多数主流浏览器对于 HEVC/H.265 标准支持度并不高,包括最新版本的 Chrome 仍然无法正常解析该编码格式的视频。即 Web 前端的 JS 语言无法对该格式的视频作相关的软件解码。
  • 暂时没有办法从web客户端直接解决这个问题,包括常见的web播放器插件如ckplayer(html5/flash),videojs等等。

解决建议

  • 技术角度:
    • 可以考虑从服务器端语言对 HEVC/H.265 软解码为正常编码格式的视频。如:上传该编码格式的视频文件后,服务器通过本地或者借助七牛云视频对视频转码,后存储转码后的视频文件,返回一个可访问的视频地址给Web前端,使之能够正常播放。
    • 当文件上传后,服务器端获取文件的编码格式信息,有针对性的转码,或者返回提示。
  • 产品角度:
    • 可以提示用户在上传视频时,选择相册/存储空间中已有的视频文件上传,因为这个阶段 IOS 系统会自动对视频进行转码
    • 提示用户在拍照设置中,当用户的设备是 iPhone7 以上且系统是 IOS 11 或以上时,在【设置】——【相机】——【格式】中,选择“高效”时,系统默认相机拍摄的视频使用 HEVC 编码;选择“兼容性最好”时,默认采用H.264 编码;提示用户选择“兼容性最好”的模式进行拍摄、上传。

参考资料

浏览知识共享许可协议

本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。