让 Safari 更喜欢 HTML 5 视频标签中的 HEVC

Posted

技术标签:

【中文标题】让 Safari 更喜欢 HTML 5 视频标签中的 HEVC【英文标题】:Get Safari to prefer HEVC in HTML 5 video tag 【发布时间】:2018-07-31 19:23:26 【问题描述】:

我目前正在研究向视频添加 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>

理想情况下,浏览器应该读取源文件并选择它认为可以读取的第一个文件,这应该允许 Firefox 和 Chromium 显示 VP9 电影,Safari 显示 HEVC,Internet Explorer 显示 H264。但是,Safari 不能很好地播放,如果存在 H264,它将忽略 HEVC 电影。我试过用编解码器信息注释源,但这没有帮助。将 HEVC 设置为视频元素的默认来源适用于 Safari,但会导致其他所有浏览器出现问题。

有什么方法可以在不使用特征检测来操作src 元素的情况下解决这个问题?

作为 Safari 错误 #37821806 向 Apple 提交

以下讨论表明,尽管 Apple 有自己的发行说明,但 Safari 可能会基于硬件考虑决定使用 AVC 源。它如何在没有编解码器提示或明显的 mime 类型嗅探的情况下做到这一点尚不清楚。如果人们可以测试codepen demo 并在 cmets 中记下编解码器播放的内容和 Mac 硬件信息,那将会很有用。

【问题讨论】:

【参考方案1】:

首先确保您的 HEVC 视频编码正确,以便 Safari 可以播放。通过从视频标签中删除所有源来测试这一点,除了指向您的 HEVC 视频的源。如果 Safari 播放,则继续下一步,否则修复视频文件。

确定 HEVC 视频与 Safari 兼容后,使用 source 标签中的 type 属性向浏览器提示有关编解码器的信息。到目前为止,您只是告诉浏览器一个 MP4 容器同时用于 HEVC 和 H.264 源。浏览器必须下载部分文件才能确定哪些文件是兼容的,通常按照source标签的顺序。

您可以/应该指定有关使用的所有编解码器的详细信息,包括视频编解码器,如果涉及音频,还包括音频编解码器。

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>

另见:Demo on CodePen

更新

感谢您在 cmets 中的反馈,我想我弄清楚了发生了什么: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 视频

【讨论】:

是的,只要 AVC 不在源列表中,HEVC 在 Safari 中就可以正常工作。添加编解码器提示没有帮助,这表明这是 Safari 中的一个错误。 使用上述方法在 Safari 11.1.2 + High Sierra 中对我来说效果很好。 我这里有 Safari 11.1.2,当我检查正在播放的电影的实际 URL 时,它不起作用。只有当我删除 h264 源时,Safari 才会播放 HEVC 电影。 我在上面的 CodePen 演示链接中添加了一个链接。你能在 Safari 中看到 HEVC 视频吗?我可以。 我使用空缓存进行了测试。真的需要 Apple 澄清一下,否则我们只是在猜测。

以上是关于让 Safari 更喜欢 HTML 5 视频标签中的 HEVC的主要内容,如果未能解决你的问题,请参考以下文章

Html 5 视频标签不仅在 iphone 中显示(safari 浏览器)

HTML5 视频标签未在 Iphone Safari 上显示。就像视频没有加载一样

HTML 5 音频、视频不工作 Safari 5.1 WinXP

移动 Safari 中的 HTML5 离线视频缓存

HTML 视频标签 Safari

Html 视频标签无法在我的 Angular 应用程序中的 Safari 中播放