持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第20天,点击查看活动详情
问题描述
IOS11+ 直接使用拍照功能录制视频后,不做任何操作上传文件,导致上传后的视频文件,无法在浏览器中正常播放。
问题原因
- 无法播放的原因
- 苹果在 iOS11 中,针对 iPhone 7及以上设备启用了新的默认视频编码 HEVC(拍摄视频格式仍然是MOV),替换掉了之前系统的默认视频编码 H.264。HEVC 对比 H.264 编码的优点是在不损失画质的情况下,能够大大降低视频占用的存储空间,同时还有更多的改进。
- 目前 Windows 系统和部分第三方视频播放器对 HEVC 编码视频还没有很好的兼容,因此播放 HEVC 编码的视频时可能会出现无法播放的情况。如需播放则需使用兼容此编码的播放器,或者将视频转成播放器支持的编码格式。
- 将 HEVC 编码视频导入到 iOS10 或者更低版本系统的苹果设备时,苹果系统也无法播放。
- HEVC/H.265 Web浏览器支持情况:
问题结论
- 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 编码;提示用户选择“兼容性最好”的模式进行拍摄、上传。
参考资料
- UC浏览器官方客服回应-iOS11相册视频导出后无法播放?kf.uc.cn/self_servic…
- Can i use API 测试网站:caniuse.com/#feat=hevc
- stackoverflow - h265 hevc web browser support?stackoverflow.com/questions/3…
浏览知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。