我目前正在研究向视频添加 HEVC 支持的可行性,但在使用 Safari 时遇到了问题。这是示例来源:
<video autobuffer="true" autoloop="" loop="" controls="">
<source src="film_WebM.webm" type="video/webm">
<source src="film_HEVC.mp4" type="video/mp4">
<source src="film.mp4" type="video/mp4">
</video>
理想情况下,浏览器应该阅读源代码并采取行动first它认为它可以读取的文件,这应该允许 Firefox 和 Chromium 显示 VP9 电影,Safari 显示 HEVC 和 Internet Explorer 显示 H264。然而,Safari 的运行效果不佳,并且如果存在 H264,则会忽略 HEVC 影片。我尝试用编解码器信息注释源,但这没有帮助。将 HEVC 设置为视频元素的默认源适用于 Safari,但会导致其他所有浏览器出现问题。
有没有什么方法可以解决这个问题而不使用特征检测来操纵src
元素?
作为 Safari bug 向 Apple 提交#37821806
下面的讨论表明,尽管苹果有自己的发行说明,Safari 可能会根据硬件考虑决定使用 AVC 源。目前尚不清楚它如何在没有编解码器提示或明显的哑剧类型嗅探的情况下做到这一点。如果人们可以测试的话将会很有用代码笔演示 https://codepen.io/cloudunder/pen/NBmZzx并在评论中注明编解码器播放的内容和 Mac 硬件信息。
首先确保您的 HEVC 视频编码正确,以便 Safari 可以播放。通过从视频标签中删除除指向 HEVC 视频的源之外的所有源来测试这一点。如果 Safari 可以播放,请继续下一步,否则修复视频文件。
一旦您确定 HEVC 视频与 Safari 兼容,请使用以下命令向浏览器提供有关编解码器的提示type
财产在source
标签。到目前为止,您只是告诉浏览器 MP4 容器用于 HEVC 和 H.264 源。浏览器必须下载部分文件才能确定哪些文件是兼容的,通常按照文件的顺序source
tags.
您可以/应该指定有关使用的所有编解码器的详细信息,包括视频编解码器,如果涉及音频,还包括音频编解码器。
-
avc1
代表 H.264
-
hvc1
代表 H.265 (HEVC)
对于您的示例,最短的版本是这样的:
<video>
<source src="film_WebM.webm" type="video/webm">
<source src="film_HEVC.mp4" type='video/mp4; codecs="hvc1"'>
<source src="film.mp4" type='video/mp4; codecs="avc1"'>
</video>
另请参阅:CodePen 上的演示 https://codepen.io/nicksgtn/pen/NBmZzx
Update
感谢您在评论中的反馈,我想我明白了发生了什么:Safari 似乎会考虑您的硬件来选择最佳视频源,这实际上非常聪明。即使在较旧的硬件上,对 H.264 的硬件支持也广泛可用,而 HEVC/H.265 硬件支持则不然,并且需要更多的 CPU,最终也需要更多的能源(电池)。
因此,尽管您的设备(例如 MBP)和软件可以解码和播放 HEVC 视频,但 Safari 可能更喜欢 H.264 视频源(如果可用)。
我又做了一些测试:
- iMac 2014 年末 (5K):✅ HEVC
- iPhone X(iOS 12 测试版):✅ HEVC
- iPhone 7 Plus (iOS 11): ✅ HEVC
- 较旧的 iPad Air (iOS 11):⚠️ 更喜欢 H.264,但如果没有可用的 H.264 源,则会播放 HEVC 视频
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)