jquery - 你能在 iPad 上自动播放 HTML5 视频吗?

<video>标签 autoplay="autoplay"属性在 Safari 中运行良好。

在 iPad 上测试时,必须手动激活视频。

我认为这是加载问题,所以我运行了一个循环检查媒体的状态:

videoPlay: function(){
    var me = this;
    console.log('STATE: ' + $("#periscopevideo").get(0).readyState);
    if ($("#periscopevideo").get(0).readyState != 4){
      setTimeout(function(){me.videoPlay();}, 300);
    }
    else {
      $("#periscopevideo").get(0).play();
    }
}

状态保持在 0在 iPad 上。在我的桌面 safari 上,它通过 0 , 1最后是 4 . 在 iPad 上,它只能达到 4如果我手动点击“播放”箭头。

此外,调用$("#periscopevideo").get(0).play()通过点击onClick也可以。

Apple 对自动播放有任何限制吗? (顺便说一下,我正在运行 iOS 5+)。

最佳答案

iOS 10 更新

自 iOS 10 起,自动播放的禁令已解除 - 但有一些限制(例如,如果没有音轨,则 A 可以自动播放)。

要查看这些限制的完整列表,请参阅官方文档:https://webkit.org/blog/6784/new-video-policies-for-ios/

iOS 9 及之前的版本

从 iOS 6.1 开始,无法再在 iPad 上自动播放视频。

我对他们为什么禁用自动播放功能的假设?

嗯,由于许多设备所有者在他们的设备上都有数据使用/带宽限制,我认为 Apple 认为用户应该自己决定何时开始使用带宽。


经过一番研究,我在 Apple 文档中发现了以下关于 iOS 设备自动播放的摘录,以证实我的假设:

"Apple has made the decision to disable the automatic playing of video on iOS devices, through both script and attribute implementations.

In Safari, on iOS (for all devices, including iPad), where the user may be on a cellular network and be charged per data unit, preload and auto-play are disabled. No data is loaded until the user initiates it." - Apple documentation.

这是 Safari HTML5 Reference page 上的单独警告关于为什么 iOS 上的 Safari 无法播放嵌入式媒体:

Warning: To prevent unsolicited downloads over cellular networks at the user’s expense, embedded media cannot be played automatically in Safari on iOS—the user always initiates playback. A controller is automatically supplied on iPhone or iPod touch once playback in initiated, but for iPad you must either set the controls attribute or provide a controller using JavaScript.


这意味着(就代码而言)Javascript 的 play()load() 方法在用户开始播放之前是不活动的,除非 play()load() 方法由用户操作(例如点击事件)触发。

基本上,用户启动的播放按钮可以工作,但是 onLoad="play()" 事件不会。

例如,这将播放电影:

<input type="button" value="Play" onclick="document.myMovie.play()">

而以下内容在 iOS 上不会执行任何操作:

<body onload="document.myMovie.play()">

https://stackoverflow.com/questions/12496144/

相关文章:

iphone - Storyboard - 引用 AppDelegate 中的 ViewContro

iphone - SplitView 就像 iPhone 上的 Facebook 应用程序

objective-c - NSPredicate:按 NSDate 属性的日期过滤对象

objective-c - 为什么 Objective-C 不支持私有(private)方法?

objective-c - 如何使用 NSNotificationCenter 传递对象

iphone - 检测导航栏上的 'back' 按钮何时被按下

objective-c - 如何在 iPhone 模拟器中更改时间和时区?

objective-c - 在框架模块中包含非模块化 header

objective-c - 如何使一个类符合 Swift 中的协议(protocol)?

iphone - -all_load 链接器标志有什么作用?