让 Safari 在 HTML 5 视频标签中首选 HEVC

2024-01-25

我目前正在研究向视频添加 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(使用前将#替换为@)

让 Safari 在 HTML 5 视频标签中首选 HEVC 的相关文章

  • 如何使视频资源兼容视网膜显示?

    我有一个应用程序 可以在播放 2 秒的电影时加载 目前 该应用程序已在商店上架 并且除此视频外 所有静态内容均符合视网膜显示标准 我有一个用于视网膜显示屏的 960x640 mp4 h 264 编码视频 它在 iPhone 是的 高分辨率
  • 使用标签强制 IE 11“用户代理字符串”

    我的网站在 IE11 中无法正常工作 我们都知道HTML标签允许开发者强制IE兼容模式 在例子中 效果很好 解决了 IE10 的可视化问题 但实际上在 IE11 上 即使Compatibility mode被设定为IE9 User agen
  • 在 silverlight 中播放视频?

    如何使用 silverlight 播放视频 Visual Studio 是否内置了视频播放器组件 或者我需要制作一个视频播放器 通常情况下 这取决于您的要求 您可以使用Silverlight自带的媒体元素 msdn信息在这里 http ms
  • VideoView SeekTo 在不同设备上工作异常 - Android

    我在视频视图上使用此代码来寻求自定义位置 但它在三星设备上工作正常 但在索尼设备上 视频寻求开始位置 开始 我想让视频回到上次暂停的位置 创建视频视图 VideoView mVideoPlayer setVideoPath ViDpath
  • 带有checked和after标签的css表单复选框样式[重复]

    这个问题在这里已经有答案了 我正在尝试在不使用 JavaScript 或 JQuery 的情况下设计一个表单 它包括一系列复选框 这个想法是如果未选中复选框 则在复选框后显示某个 gif 否则 后面不显示任何内容 这是我的代码 input
  • 为什么我在模拟器中看不到视频?

    我见过几个与此类似的问题 但我想确定一下 我无法在模拟器上运行视频 是否一致 有人在模拟器上成功运行视频吗 以下是我使用的代码 import android app Activity import android net Uri impor
  • jQuery .ajax 调用 bit.ly 在 IE 中返回结果,但在 FF 或 Chrome 中不返回结果

    我正在尝试使用 jQuery 和 ajax 调用来调用 bit ly URL 缩短服务 update我想知道这是否是跨域安全问题 我正在拨打电话mysite com to bit ly
  • 仅使用 url 嵌入视频

    给定一个 youtube url 我如何使用 net c 将视频嵌入到页面中 只需添加如下一行 将 autoplay 设置为 0 或 1 取决于您是否希望人们真正留在您的页面上
  • 如何将视频转换为base64数据

    我有一个应用程序 可以从相机或图库中获取视频并将其转换为 Base64 数据 并将该数据发送到服务器 但问题是每当我转换 Base64 数据时 videodata 变量中的数据都不是正确的 为此我使用了下面的代码 FileInputStre
  • JSON 和 AJAX 与 jQuery 有什么区别?

    我听说 JSON 会序列化所有数据 这可以防止我在跨浏览器支持等方面遇到客户端问题 我一直在使用 AJAX 和 jQuery 这看起来很简单 但我不确定其中的区别 我读过我也可以使用它来获取数据 ajax url url dataType
  • 在电子邮件中设置 html 样式

    我正在为有能力的客户发送 HTML 版本的电子邮件 现在这不是几乎全部吗 我担心的是如何设计它 我使用内联CSS吗 我可以在 html 中包含样式表吗 html 是否以 or 我可以阅读这方面的标准吗 我在造型方面能走多远 我有边框半径 背
  • 将 CIFilter 与 AVFoundation 结合使用 (iOS)

    我正在尝试将滤镜应用于在 iOS 上使用 AVFoundation 创建的视频合成 滤镜可以是模糊 像素化 棕褐色等 我需要实时应用效果并能够将复合视频渲染到磁盘 但我很高兴从其中之一开始 不幸的是 我似乎无法弄清楚这一点 这是我能做的 我
  • 通过 Websockets 进行 WebRTC 视频聊天

    我正在尝试使用 webRTC 和 WebSockets 进行信号发送来开发视频聊天应用程序 我的问题是 我不知道创建 RTCPeerConnection 并通过 webSocket 连接两个对等点 2 个浏览器 的过程是什么 至少在本地 我
  • 使用 ffmpeg 提取帧的最快方法?

    您好 我需要使用 ffmpeg 从视频中提取帧 有没有比这更快的方法 ffmpeg i file mpg r 1 1 filename 03d jpg 如果 JPEG 编码步骤对性能要求太高 您可以始终将未压缩的帧存储为 BMP 图像 ff
  • 跳过在 Chrome 中不起作用的链接

    首先 我看过上一个问题 https stackoverflow com questions 3572843 skip navigation link not working in google chrome但遗憾的是它似乎没有提供任何解决方
  • Android - 如何合并两个视频

    基本上 我正在寻找一种将两个 mp4 视频文件 在 SD 卡上 组合在一起的方法 更像是在第一个视频的末尾附加第二个视频 我进行了很多搜索 但找不到合适的解决方案 好吧 我根本找不到任何解决方案 所以我的问题是 是否有一个库可以组合 并可能
  • 无法在 Windows 7 机器中使用 OpenCV 2.4.3、Python 2.7 打开“.mp4”视频文件

    我目前正在进行一个涉及读取 mp4 视频文件的项目 我遇到的问题是它在Windows 7机器上使用Python 2 7 32位 OpenCV 2 4 3 cv2 pyd 代码片段如下 try video cv2 VideoCapture v
  • 如何从 Linux 命令行获取视频文件的分辨率(宽度和高度)?

    我一直在挖掘 mplayer mencoder 和 ffmpeg 文档 但我似乎无法想出anything 我对输出格式不是特别挑剔 因为我可以使用正则表达式将其拉出来 我只是似乎无法首先获取数据 Use ffprobe https ffmp
  • 如何使用javascript将视频文件转换为字符串?

    我在 signalR 工作 我想通过将视频文件拆分为不同部分来将视频文件从一个客户端发送到另一个客户端 我已经通过分割图像源数据发送图像并在另一个客户端上接收该图像 document getElementById fileUpload ad
  • fontawesome 图标在 Chrome 和 Firefox 中渲染不一样

    在 Chrome Safari 中 我的引导按钮内的图标看起来不错 但在 Firefox 中 图标会下降一条线 我有一个很棒的图标漂浮在

随机推荐

  • 通过 Groovy XML 解析器使用字符串作为代码

    我是 groovy 的新手 我希望这是一个简单的问题可以解决 我正在读取 xml 文档 然后我可以访问如下数据 def root new XmlParser parseText xmlString println root foo bar
  • 如何禁用 Google 跟踪代码管理器控制台日志记录

    将 Google 跟踪代码管理器添加到项目后 我在控制台中看到了很多日志条目 有办法禁用它吗 控制台日志充满了噪音 GoogleTagManager info Processing logged event vs with paramete
  • Node.js ENOENT 读取 PDF 文件

    我需要阅读 pdf 文件并使用pdf text extract 它在我的本地主机上完美运行 但是当我尝试在服务器上运行该程序时 出现以下错误 spawn called 0 pdftotext 1 layout enc UTF 8 tmp t
  • Keychain 中存储的字符串有长度限制吗?

    我想在iOS上将一些用户信息作为字符串存储在Keychain中 那么Keychain中的字符串有长度限制吗 Thanks 我组装了一个 iOS 应用程序 可以使用以下命令进行二分搜索这个图书馆 https github com kishik
  • twig - 将函数传递到模板中

    目前 我将函数放在一个类中 并将该类的实例传递到模板中 并将所需的函数作为类方法调用 unneededclass blah 我需要像下面这样做 blah 是否可以 更新 2015 年 5 月 14 日 评论者指出我大部分都是错的 如果您确实
  • 如何合并两个UIImage?

    我正在尝试合并两个不同的图像并创建一个新的图像 这就是我想做的方式 我有这张图片 A 这是一张 PNG 图像 我想将其与我从手机中获取的另一张图像 B 合并 以创建如下所示的图像 我需要一个将 A 与 B 合并创建 C 的函数 尺寸必须保留
  • Nuget Pack 不支持程序集版本上的位数

    I need nuget pack生成只有 3 位数字的包版本 我们想对其进行语义版本控制 但是当我在具有AssemblyVersion属性设置为 1 0 0 生成的 nupkg 文件在其元数据 和文件名 中以版本 1 0 0 0 结尾 为
  • 如何查看tomcat的容器日志?

    如何查看tomcat的容器日志 我从 catalina out 日志中收到此错误 SEVERE localhost startStop 1 org apache catalina core StandardContext startInte
  • 在 SQL Server 中,一行的 %%physloc%% 值总是相同吗?

    我一直在探索它的实际用途 physloc 伪列作为行标识符 不幸的是 我一直无法找到官方文档 physloc 我需要知道这个值是否会改变 我做了一些测试 看起来相当静态 即使我创建数据库的备份并在不同的服务器上恢复 physloc 每行保持
  • Kafka - 无法建立与节点-1的连接

    我正在尝试使用 apache flink 流处理 kafka 主题 但我遇到了这个问题 2018 04 10 02 55 59 856 ProducerConfig values acks 1 batch size 16384 bootst
  • 如何在 React 中重定向到外部链接?

    我正在构建一个画廊 您单击图像 它将使用 props 加载到单独的组件中 该图像是一个 URL 取自数组 其中 src 属性通过 CSS 作为背景图像加载 我的挑战是将 src 数据连接到子组件 查看原始问题 https stackover
  • 如何使用java中的线程读取和写入文件?

    我正在编写一个应用程序 需要从单个文件中读取块 每个块大约为 512 字节 我还需要同时写入块 我的想法之一是BlockReader implements Runnable and BlockWriter implements Runnab
  • C++11线程,在主线程上运行

    我正在尝试 C 11 线程进行一些开发 我想在异步线程中运行一些代码 当该代码完成后 我想在主线程上运行其他代码但只有当它完成时 这是因为我想要运行异步的事情是加载 OpenGL 的东西 并且在执行线程时使用 OpenGL 上下文有点棘手
  • xcodebuild 归档所有目标而不是一个

    我需要从我的档案中归档一个特定的方案xcodeproj 为此 我运行 xcodebuild archive scheme SCHEME target TARGET archivePath ARCHIVE PATH 虽然我明确地定义计划和目标
  • auto 和 __auto_type 有什么区别吗?

    我一直在使用 auto type在 C 语言中已经有一段时间了 我想知道它与auto在C 中 它们的实施方式不同吗 我尝试过搜索这个 但它没有产生任何结果 因为搜索C 中的 auto type返回有关的文章auto在C 中 感觉就像一个被遗
  • 401 Unauthorized -- 在 Doorkeeper 中请求刷新令牌时授权无效

    我在请求刷新令牌时遇到问题 它不断返回未经授权的 401 错误 我不知道我是否缺少我在发出请求时传递的参数 我添加了刷新令牌的门卫配置 use refresh token 这是请求详细信息 root url oauth token refr
  • Elasticsearch 集群 - 没有已知的主节点,正在安排重试

    我有一台运行elasticsearch 和kibana 的服务器 我添加了第二个节点来形成集群 但只希望第二个节点从主节点复制数据 根据有关如何执行此操作的有限文档 我在第二个问题上遇到了以下错误 DEBUG action admin in
  • S3 Select 会加速 Parquet 文件的 Spark 分析吗?

    您可以使用Amazon EMR 上使用 Spark 选择 S3 https docs aws amazon com emr latest ReleaseGuide emr spark s3select html and 与数据块 https
  • Java 中的简单 Websocket 客户端 - 连接问题

    我正在尝试用 Java 编写一个简单的 websocket 客户端来连接到第 3 方 WebSocket 服务器 我无法访问该服务器 我可以在浏览器中使用 javascript 连接并与 websocket 服务器通信 但是当我尝试使用 J
  • 让 Safari 在 HTML 5 视频标签中首选 HEVC

    我目前正在研究向视频添加 HEVC 支持的可行性 但在使用 Safari 时遇到了问题 这是示例来源