HTML5视频标签不能在 Safari,iPhone 和 iPad 上使用

我试图创建一个 html5网页,其中有一个小视频喜欢13秒,我转换这个视频的闪光灯版本为3种格式: 。使用 fireFogg,。也使用 Firefogg 和。Mp4使用 HandBrake 应用程序我在页面中使用的 html 脚本:

<video  width="800" height="640" loop preload="false" autoplay  controls tabindex="0">
<source src="xmasvideo/video.mp4" type="video/mp4" />
<source src="xmasvideo/M&P-Xmas 2.ogv" type="video/ogv" />
<source type="video/webm" src="xmasvideo/M&P-Xmas.webm" />
</video>

这段视频在 Chrome 和 FireFox 中运行良好,但在 Safari 桌面、 iPhone 或 iPad 上都不能运行,输出结果只是一个空白页面,显示视频标签的控制,但没有加载任何东西

注意,我的 Safari 版本支持 HTML5视频

437353 次浏览

我发现尽管 Safari 确实支持 HTML5视频,但是必须安装 Quicktime Player 才能正常工作。在我建立的一个使用 HTML5视频的网站上,用户在使用 Safari 时会收到提醒,告诉他们必须安装 Quicktime,否则他们只能看到视频文本。希望这个能帮上忙。

对于你们这些未来的搜索者来说,另一个可能的解决方案是: (如果您的问题不是复制类型的问题。)

出于某种原因,视频不会在 iPad 上播放,除非我设置控件 = “ true”标志。

例如: 这个方法在 iPhone 上很有效,但在 iPad 上不管用。

<video loop autoplay width='100%' height='100%' src='//some_video.mp4' type='video/mp4'></video>

现在 iPad 和 iPhone 都采用了这种方法:

<video loop autoplay controls="true" width='100%' height='100%' src='//some_video.mp4' type='video/mp4'></video>

为了以后的搜索,我有一个 mp4文件,我用手刹缩放使用 apt-gethandbrake-gtk,例如 sudo apt-get install handbrake-gtk。在 Ubuntu 14.04中,handbrake存储库不包括对 MP4的开箱即用支持。我保留了默认设置,去掉了音轨,它生成了一个 * 。M4V 文件。对于那些好奇的人来说,它们是同一个容器,但是 M4V 主要在 iOS 上用于在 iTunes 中打开。

这在除了 Safari 以外的所有浏览器中都可行:

<video preload="yes" autoplay loop width="100%" height="auto" poster="http://cdn.foo.com/bar.png">
<source src="//cdn.foo.com/bar-video.m4v" type="video/mp4">
<source src="//cdn.foo.com/bar-video.webm" type="video/webm">
</video>

我改变了哑剧类型之间的 video/mp4video/m4v没有效果。我还测试了添加 control属性,同样没有效果。

这在所有测试过的浏览器中都有效,包括在 Mavericks 上的 Safari 7和在 Yosemite 上的 Safari 8。我只是将相同的 m4v 文件(实际的文件,而不仅仅是 HTML)重命名为 mp4并重新上传到我们的 CDN:

<video preload="yes" autoplay loop width="100%" height="auto" poster="http://cdn.foo.com/bar.png">
<source src="//cdn.foo.com/bar-video.mp4" type="video/mp4">
<source src="//cdn.foo.com/bar-video.webm" type="video/webm">
</video>

我认为 Safari 是完全期待一个实际命名的 MP4。没有其他文件和哑剧类型的组合为我工作。我认为其他浏览器会首先选择 WEBM 文件,特别是 Chrome,尽管我很确定源代码列表应该选择技术上支持的第一个源代码。

然而,这并没有解决 iOS 设备的视频问题(iPad3“新 iPad”和 iPhone6测试)。

您的 Web 服务器可能不支持 HTTP 字节范围请求。我正在使用的 Web 服务器就是这种情况,结果是视频小部件加载并出现一个播放按钮,但是单击该按钮没有任何效果。这段视频可以在 FF 和 Chrome 上播放,但不能在 iPhone 或 iPad 上播放。

附录 A: 苹果 iPhone 的流媒体中阅读更多关于字节范围请求的 这里是 mobiforge.com:

首先,Safari Web 浏览器请求内容,如果它是 音频或视频文件它打开它的媒体播放器。然后媒体播放器 请求内容的前2个字节,以确保 Webserver 支持字节范围的请求 IPhone 的媒体播放器按字节范围请求其余内容 然后播放。

你可能想在网上搜索“ iphone mp4字节范围”。

我也遇到过同样的问题。因为我的视频帧尺寸太大了。比如2248像素 苹果支持 H. 264基线配置文件第3.0级影片,最高达640x480,每秒30帧。请注意,基线配置文件中不支持 B 帧。 看看这个,了解更多信息

如果您的视频受到基于会话的登录系统的保护,Safari 将无法加载它们。这是因为 Safari 对视频发出初始请求,然后将任务交给 QuickTime,后者发出另一个请求。因为 Safari 持有会话信息,所以它将通过身份验证,但 QuickTime 不会。

如果查看服务器访问日志,您可以看到这一点... ... 首先是来自 Safari 的请求,然后是来自 QuickTime 的请求。其他浏览器只从浏览器本身发出一个请求。

如果这是您的问题,您可能必须重新工作的视频访问使用临时令牌或有限的时间访问从原始请求。如果我找到更直接的解决方案,我会更新这个答案。

我见过一些奇怪的问题,比如一个不可信的“开发”SSL 证书,移动 Safari 很乐意为你的页面提供服务,但是拒绝为一个“假的”SSL 证书提供视频,即使你已经接受了这个证书。

为了测试,你可以在其他地方部署视频-或者切换到 http (整个页面) ,它应该可以播放。

从 iOS6.1开始,在 iPad 上自动播放视频已经不可能了。根据苹果公司的文档,包括 iPad 在内的所有 ios 设备中,Safari 的自动播放功能都不能正常工作:

“苹果已经决定通过脚本和属性实现,禁止在 iOS 设备上自动播放视频。

在 Safari 中,在 iOS (适用于包括 iPad 在内的所有设备)上,用户可能在蜂窝网络上,按照数据单元收费,预载和自动播放都是禁用的。在用户启动数据之前,不加载数据。”

你可以在 这是苹果的文档中读到更多关于它的内容

我有个问题。在 Safari 中 mp4播放不起作用,但是在其他浏览器中还可以。我在控制台中看到的错误是: error media src not support。在我的案例中,这是一个 MIME 类型问题,但不是因为它在 IIS 中没有被声明为 MIME 类型,而是因为它被声明了两次(一次在 IIS 中,另一次在 web.config 文件中)。我是通过下载。本地服务器上的 mp4文件。我从试图播放的内容的位置删除了配置文件,它修复了这个问题。我本可以从 web.config 文件中删除 MIME 类型,但是在本例中不需要 web.config 文件。

对于.mp4这个工作(Safari 手机和桌面) :

<video height="250" width="250" controls>
<source src="video.mp4" type="video/mp4" />
Your browser does not support the video tag.
</video>

上文中提到的 controls=”true”对我来说没有任何意义,因为苹果公司说只要使用控件就可以了。

参考文献: “要使用 HTML5音频或视频,首先创建一个或元素,为媒体指定一个源 URL,并包括 control 属性。 <video src="http://example.com/path/mymovie.mp4" controls></video>

资料来源: https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Introduction/Introduction.html

在我的交易中: 我发现从 iPhone 上传的视频以。时间很快。具有讽刺意味的是,这正是在 Safari 上试图从服务器回放视频时出现的问题。(流动电话及台式电脑)。

因此,如果(像我一样)你正在经历一个。快速时间(或以外的任何事情。 mp4)的问题在狩猎,这里是一个由苹果提供的工作。注意,我还没有自己测试它,我不是很高兴与它一目了然,只是提供了更多的信息。

参考文献: “回归到 QuickTime 插件有一个简单的方法可以回归到几乎适用于所有浏览器的 QuickTime 插件ーー下载 Apple 提供的预构建 JavaScript 文件 ac _ Quick time。Js,从 HTML 视频示例,并包括它在您的网页,插入以下代码行到您的 HTML 头: <script src="ac_quicktime.js" type="text/javascript"></script>

资料来源: https://developer.apple.com/library/content/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/AudioandVideoTagBasics/AudioandVideoTagBasics.html#//apple_ref/doc/uid/TP40009523-CH2-SW6

更新:。在上传到服务器之前(在 base64文件类型“ data: video/mov;”中) ,跳过 ac _ Quick time。Js. . . 将在 html 视频标签中工作; Hackerdy Hack。

只要添加一个 muted属性,一切都将正常工作。

答案的来源在这里: https://webkit.org/blog/6784/new-video-policies-for-ios/

默认情况下,WebKit 将采用以下策略:

对于满足以下条件的元素,<video autoplay>元素将尊重 autoplay 属性:

  • 如果 <video>元素的源媒体不包含音轨,则允许在没有用户手势的情况下自动播放。
  • <video muted>元素也将被允许在没有用户手势的情况下自动播放。
  • 如果一个 <video>元素获得一个音频轨道或变得非静音没有用户手势,播放将暂停。
  • <video autoplay>元素只有在屏幕上可见时才会开始播放,比如当它们滚动到视窗中,通过 CSS 显示并插入到 DOM 中时。
  • 如果 <video autoplay>元素变得不可见,那么它们将暂停,比如滚出视窗。

<video>元素现在将遵守 play ()方法,对于满足以下条件的元素:

  • 如果 <video>元素的源媒体不包含音频轨道,或者如果它们的静音属性设置为 true,则允许在没有用户手势的情况下播放()。
  • 如果一个 <video>元素获得一个音频轨道或变得非静音没有用户手势,播放将暂停。
  • <video>元素将被允许播放()时,不可见的屏幕上或当出了视口。
  • Play ()将返回一个誓言,如果不满足这些条件中的任何一个,该誓言将被拒绝。

在 iPhone 上,<video playsinline>元素现在可以内联播放,播放开始时不会自动进入全屏模式。 没有 playsinline 属性的 <video>元素将继续需要全屏模式才能在 iPhone 上播放。 当退出与捏手势全屏幕,<video>元素没有播放线将继续发挥内联。

对我有帮助的是放下音轨。之前一片寂静,但必须彻底消失。

Ubuntu:

ffmpeg -i input.mp4 -vcodec copy -an output.mp4

然后 Safari/桌面开始播放视频

我在苹果设备上也遇到过同样的问题,比如 iPhone 和 iPad,我关闭了低功耗模式,它还能工作,你还应该在视频标签中包含 playsinline属性,比如:

<video class="video-background" autoplay loop muted playsinline>

它只有在包含 playsinline时才能工作。

在 Iphone 和 Ipa 上添加“ playsinline”对我来说很管用,如果你不介意你的视频被静音的话。

<video muted playsinline>
<source src="..." type="video/mp4">
</video>

如果你不想你的视频被静音,但仍然想要自动播放,也许可以尝试删除静音属性与 js: 如何取消静音 html5视频与静音道具

通过使用这段代码视频将在所有浏览器中以及 ios 设备中播放... 大家都去吧(我已经使用过这段代码并且工作得很好)

<video autoplay loop muted playsinline poster="video_thumbnail/thumbanil.jpg" src="video/video.mp4">
<source src="video/video.mp4" type="video/mp4"></source>
<source src="video/video.webm" type="video/webm"></source>
<source src="video/video.mov" type="video/mov"></source>
</video>

对于 IOS,请只使用 mp4源文件。 我在最新的 safari 浏览器中发现了一个问题: safari 浏览器无法正确检测源文件,因此视频自动播放无法正常工作。

让我们检查下面的例子-

     <video autoplay loop muted playsinline poster="video_thumbnail/thumbanil.jpg" src="video/video.mp4">
<source src="video/video.mp4" type="video/mp4"></source>
<source src="video/video.webm" type="video/webm"></source>
</video>

因为我在源文件中使用了 mp4,webm。Safari deosent 支持 webm,但是在最新的 Safari 版本中,它会选择 webm,而且视频自动播放失败。

因此,为了在支持的浏览器上进行自动播放,我建议首先检查浏览器,并基于此生成 html。

因此,对于狩猎,使用下面的 html。

     <video autoplay loop muted playsinline poster="video_thumbnail/thumbanil.jpg" src="video/video.mp4">
<source src="video/video.mp4" type="video/mp4"></source>
</video>

除了狩猎之外,

     <video autoplay loop muted playsinline poster="video_thumbnail/thumbanil.jpg" src="video/video.mp4">
<source src="video/video.webm" type="video/webm"></source>
<source src="video/video.mp4" type="video/mp4"></source>
</video>

我有同样的问题-确保视频资产的网址是来自安全域。我们的开发环境是 http,而生产是安全的。由于视频是通过相对路径引用的,所以不能用于开发。看来苹果公司要求视频安全是个问题。

正在工作,但 MacO 最近有自动播放政策的用户: https://webkit.org/blog/7734/auto-play-policy-changes-for-macos/,我解决了同样的问题,使用一个按钮,以启用声音:

Ejm:

<video autoplay loop muted id="myVideo">
<source src="amazon.mp4" type="video/mp4">
Sorry, your browser doesn't support embedded videos...
</video>


<button class="pausee" onclick="disableMute()" type="button">Enable sound</button>


<script>
var vid = document.getElementById("myVideo");
function disableMute() {
vid.muted = false;
}
</script>

我也遇到过类似的问题,<video>标签中的视频只能在 Chrome 和 Firefox 上播放,而不能在 Safari 上播放。我是这么做的。

我发现了一个奇怪的技巧,就是在你的视频中有两个不同的引用,一个在 Chrome 和 Firefox 的 <video>标签中,另一个在 Safari 的 <img>标签中。有趣的是,在 Safari 上,视频确实是在 <img>标签中播放的。然后,编写一个简单的脚本,在某个浏览器正在使用时隐藏其中一个或另一个。例如:

<video id="video-tag" autoplay muted loop playsinline>
<source src="video.mp4" type="video/mp4" />
</video>
<img id="img-tag" src="video.mp4">


<script type="text/javascript">
function BrowserDetection() {


//Check if browser is Safari, if it is, hide the <video> tag, otherwise hide the <img> tag
if (navigator.userAgent.search("Safari") >= 0 && navigator.userAgent.search("Chrome") < 0) {
document.getElementById('video-tag').style.display= "none";
} else {
document.getElementById('img-tag').style.display= "none";
}


//And run the script. Note that the script tag needs to be run after HTML so where you place it is important.
BrowserDetection();
</script>

这也有助于解决某些浏览器上视频呈现不正确的黑框/边框过薄的问题。

对于我的用例,有 两件事:

  1. 我没有使用 新属性/webkit 的策略 playsinline;
  2. 我的 录像/默剧类型或其他什么没有正确编码,所以我需要 我用这个网站把它转换为所有格式: https://pt.converterpoint.com/

没有

我也遇到了同样的问题,我的 HTML 视频标签在 Chrome 和 Mozilla 上播放得很好,在 Safari 上——控件出现了,但是视频是空白的。我尝试使用上述所有属性,删除/添加静音,playsInline 等等,但都没有效果。这里描述的服务器也存在问题。我有这个-没有工作:

<video
muted
playsInline
controls
style=\{\{ width: `100%` }}>
<source src={MfMfVideo} type="video/mp4" />
<source src={MfMfVideoWebM} type="video/webm" />
</video>

我刚刚把我的视频转移到外部图书馆,我现在在 Safari 上很好,它工作得很好:

<video
muted
playsInline
controls
style=\{\{ width: `100%` }}>
<source src={"https://blabla.com/video/dixneuf-video_r8xuvc.mp4"} type="video/mp4" />
<source src={"https://blabla.com/videodixneuf-video_gyquuu.webm"} type="video/webm" />
Sorry, your browser doesn't support embedded videos.
</video>

除了把视频压缩到30mb 以下,其他的都不管用。虽然有效,但是压缩效果很差。

如果有人有同样的问题,我解决了它通过启用字节范围支持我的服务器。似乎 Safari 需要字节范围请求。在我的情况下,我使用 NGINX,我必须添加 proxy_force_ranges on;到我的配置文件。感谢 这个答案

如果您在 REACT 中使用使用 playsInline,那么它将在所有 IOS 设备中工作

我知道这是一篇老文章,但是在不同的服务器环境下,这个问题似乎仍然会浮出水面。以上这些对我来说都不是解决办法。在我的案例中,它归结为网页优化和使用 gzip,或者更确切地说,需要禁用它的视频。

我把这个添加到我的 htaccess 文件,它照顾它。 SetEnvIfNoCase Request _ URI. (? : ogv | ogg | oga | m4v | mp4 | m4a | mov | mp3 | wav | webma? | webmv) $no-gzip 勿变

我已经在我的标签: control playsinline 上使用了这些属性

在同一个问题中工作几天(在检查“ playsinline”和“ autoplay”和“ muted”ok,“ mime-type”和“ range”在服务器 ok 等之后)。所有浏览器的解决方案是:

<video controls autoplay loop muted playsinline>
<source src="https://example.com/my_video.mov" type="video/mp4">
</video>

是: 转换视频到。 MOV 和类型 = “视频/mp4”在同一个标签。工作!

我也经历过。视频没有在我的 iphone 上显示... 我所做的是添加静音和预加载属性的视频元素。.成功了。

 <video width="250" muted preload="metadata">
<source  src="vid_3.mp4" type="video/mp4" />
</video>

在我的 iPhone10上,我关闭了低功耗模式并在 Chrome 上自动播放。

video标签上包含 playsinline属性。

我的问题是视频编码,我用 Fmpeg改变了它:

ffmpeg \
-i input.mp4 \
-vcodec libx264 \
-acodec aac output.mp4

相关阅读:

对于静态视频文件,使用 H.264编码的 MP4文件。

Apple.com: “为 Safari 提供视频内容”

添加这4个参数 自动播放循环静音播放线路,比如:

<video autoplay loop muted playsinline
style="width:100%;height:auto;max-width:100%;">

在视频标签,使它在 iOS 设备自动播放。

对于有人来到这里,使用 MediaSource Extension操作视频源。
并尝试了其他解决方案,但仍然没有工作。

我在 我能用 MSE 吗检查,发现原因是 IPhone 的 iOS 不支持 MSE(媒体源扩展)。 所以 MSE 不能在 iPhone 上工作。

来自 我能用 MSE 吗的图像
enter image description here

IPhone 的 iOS 最初支持 HLS(苹果的开发文档) , 所以你需要把 MP4转换成 HLS 格式。 (可使用 Bento4 HLS)
MP4格式必须 < a href = “ https://i.stack.imgur.com/KPmDx.png”rel = “ nofollow norefrer”> fMP4格式

转换之后,HLS 格式输出目录将如下所示
enter image description here

文件扩展名应该是 .m3u8,而 master.m3u8是一个描述视频全部信息的模板。

然后让 video 标记的 src 属性指向 HLS 资源的 URL (master.m3u8)。
比如这个示例代码

<video src="https://XXX/master.m3u8">
</video>

了解更多信息

这个链接

我昨天的完整解决方案包括几个很好的答案从这个问题加上另一篇博客文章。我会尝试编辑它。

前面

视频标签

  • PlaysInline 属性有所不同
<video id='my-video' class='video-js' controls preload='auto' autoplay height="270" poster='img/logo_cathedra.png' playsInline type="video/mp4">
  • WithCreentials 对于发送 cookie 有所不同(在我的例子中,是 JWT 标记)
var player = videojs('my-video');
...
window.addEventListener("load", () => {
player.src({
src: 'path-to-video',
type: 'video/mp4',
withCredentials: true
});
});

后端

  • 向响应写入状态 206以及 字节范围和视频流所需的标头
Accept-Ranges: bytes
Connection: Keep-Alive
Content-Length: 1289232
Content-Range: bytes 0-1289231/1289232
Content-Type: video/mp4
Last-Modified: Sun, 06 Nov 2022 14:08:57 GMT

在我的情况下,我期望一个请求 Header WITH 或 WITHOUT 限制(范围右侧)。当右边没有提供时,我使用一个固定的块大小并计算 内容-长度内容范围

  • 前女友使用 Chrome 浏览器
# REQUEST
Range: bytes=0-
...
# RESPOSE
Content-Length: 4096
Content-Range: bytes 0-4096/1289232
  • 前女友用 Safari
# REQUEST
Range: bytes=0-1
...
# RESPOSE
Content-Length: 1
Content-Range: bytes 0-1/1289232
  • 添加返回做响应头 Safari 发送播放 HTML5视频
X-Playback-Session-Id: someRandom.chars.like.uuid