你可以在iPad上自动播放HTML5视频吗?

Jem*_*Jem 123 jquery html5 cocoa-touch objective-c ios

<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();
    }
}
Run Code Online (Sandbox Code Playgroud)

该州仍然在0iPad上.在我的桌面游猎,它经历0,1最后4.在iPad上,只有4在我手动点击"播放"箭头时才会到达.

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

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

dsg*_*fin 156

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决定通过脚本和属性实现来禁用在iOS设备上自动播放视频.

在Safari中,在iOS(适用于所有设备,包括iPad)上,用户可能位于蜂窝网络上并按数据单元收费,因此禁用预加载和自动播放.在用户启动数据之前不会加载任何数据." - Apple文档.

以下是Safari HTML5参考页面上的一个单独警告,说明为什么嵌入式媒体无法在iOS上的Safari中播放:

警告:为了防止用户通过蜂窝网络进行未经请求的下载,嵌入式媒体无法在iOS上的Safari中自动播放 - 用户始终会启动播放.一旦启动播放,控制器将自动在iPhone或iPod touch上提供,但对于iPad,您必须设置controls属性或使用JavaScript提供控制器.


这意味着(在代码方面)是JavaScript的play()load(),直到用户启动播放,方法是无效的,除非play()load()方法由用户操作(如单击事件)触发.

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

例如,这将播放电影:

<input type="button" value="Play" onclick="document.myMovie.play()">
Run Code Online (Sandbox Code Playgroud)

以下内容在iOS上无效:

<body onload="document.myMovie.play()">
Run Code Online (Sandbox Code Playgroud)

  • 他们应该做的是在wifi上允许自动播放,并且要么手动播放,要么提示用户视频要在移动网络上自动播放. (11认同)

Bra*_*uck 16

我想首先说,我意识到这个问题已经过时,已经有了一个可接受的答案; 但是,作为一个不幸的互联网用户,使用这个问题作为一种手段,结束后不久就被证明是错误的(但不是在我惹恼我的客户之前)我想添加我的想法和建议.

虽然@DSG和@Giona是正确的,并且他们的答案没有任何问题,但是你可以采用一种创造性的机制来"绕过",可以这么说.这并不是说我宽容绕过这个功能,恰恰相反,只是一些机制让用户仍然"感觉"好像视频或音频文件是"自动播放".

快速解决方法是在移动页面的某处隐藏视频标签,因为我构建了一个响应式网站,我只为较小的屏幕执行此操作.视频标记(HTML和jQuery示例):

HTML

<video id="dummyVideo" src="" preload="none" width="1" height="2"></video>
Run Code Online (Sandbox Code Playgroud)

jQuery的

var $dummyVideo = $("<video />", {
  id: "dummyVideo",
  src: "",
  preload: "none",
  width: "1",
  height: "2"
});
Run Code Online (Sandbox Code Playgroud)

如果隐藏在页面上,当用户"点击"观看电影(仍然是用户交互,无法绕过该要求)而不是导航到辅助观看页面时,我会加载隐藏的视频.这主要起作用,因为媒体标签并未真正使用,而是提升为Quicktime实例,因此根本不需要具有可见视频元素.在"click"(或移动设备上的"touchend")的处理程序中.

$(".movie-container").on("click", function() {
  var url = $(this).data("stream-url");
  $dummyVideo.attr("src", url);
  $dummyVideo.get(0).load(); // required if src changed after page load
  $dummyVideo.get(0).play();
});
Run Code Online (Sandbox Code Playgroud)

而中提琴.对于用户体验,用户点击要播放的视频,Quicktime打开播放他们选择的视频.这仍然是视频只能通过用户操作播放的限制,因此我不会强制任何未决定使用此服务观看视频的人的数据.当我试图弄清楚Youtube究竟是如何用他们的移动设备来解决这个问题时我发现了这一点,这实际上是一些非常好的Javascript页面构建和花哨的元素隐藏,就像视频标签的情况一样.

tl; dr这是一个有点"解决方法",试图在iOS设备上创建一个"自动播放"的UX功能,但不超出Apple的限制,仍然让用户决定是否要观看视频(或音频最喜欢,尽管我未经过他们的许可,没有一个人刚刚装完,他们自己没有经过测试.

另外,对于评论来自sleep.fm的人来说,遗憾的是,这仍然不能解决您的问题,即基于时间的音频播放.

我希望有人发现这些信息很有用,这样可以节省我一个星期的坏消息传递给客户,坚持认为他们有这个功能,我很高兴找到一种方法来交付它.

编辑

进一步的发现表明上述解决方法仅适用于iPhone/iPod设备.iPad在完全放映之前在Safari中播放视频,因此您需要一些机制来在播放前点击视频大小,否则您将最终获得音频和视频.

  • 最好使用`$ dummyVideo.get(0)`而不是括号,这样如果您的选择为空,jQuery可以优雅地失败. (2认同)

小智 12

刚设置

webView.mediaPlaybackRequiresUserAction = NO;

自动播放在iOS上适用于我.

  • 这不适用于网站,这仅适用于您使用Native应用程序包装它们的网站. (27认同)
  • @izuriel公平地说,他确实用"objective-c"和"cocoa-touch"标记了这个问题,所以假设他正在使用webview并不是一件容易的事. (6认同)
  • 我的意思是,从一个网页(正如问题所问)这是完全无法访问的 - 是的,浏览器中的Javascript无法做到这一点.这仅适用于从您控制的应用程序在WebView内部运行站点,因此它实际上不能提供问题的解决方案. (5认同)
  • @Kloar标签通常被添加为一种手段,以获得更多的关注或对他们试图解决的问题的一般误解.提问的人可能认为提到objective-c与说"iOS"(和cocoa-touch类似)相同.虽然没有列出"uiwebview"标签,但我将其排除在可行的选项之外.问题提到在桌面和iPad上使用Safari(没有关于应用程序)并使用Javascript演示代码来调试情况.总而言之,我认为更安全的做法是这个问题真的在寻找网络而不是原生解决方案. (3认同)
  • @izuriel你的意思是它在浏览器中不起作用. (2认同)

Jac*_*ish 11

从iOS 10开始,视频现在可以自动播放,但只有它们静音或没有音轨.好极了!

简而言之:

  • <video autoplay> 对于满足以下条件的元素,元素现在将遵循autoplay属性:
    • <video> 如果元素源媒体不包含音轨,则允许元素在没有用户手势的情况下自动播放.
    • <video muted> 元素也将被允许在没有用户手势的情况下自动播放.
    • 如果<video>元素在没有用户手势的情况下获得音轨或变为非静音,则播放将暂停.
    • <video autoplay> 元素只会在屏幕上可见时开始播放,例如当它们滚动到视口中时,通过CSS可见,并插入到DOM中.
    • <video autoplay> 如果元素变得不可见,则会暂停,例如滚动出视口.

更多信息:https: //webkit.org/blog/6784/new-video-policies-for-ios/

  • autoplay属性只适用于PC,不适用于移动设备.我已多次尝试过. (4认同)

Gio*_*ona 7

在此Safari HTML5参考中,您可以阅读

为了防止用户通过蜂窝网络进行未经请求的下载,嵌入式媒体无法在iOS上的Safari中自动播放 - 用户始终会启动播放.一旦启动播放,控制器将自动在iPhone或iPod touch上提供,但对于iPad,您必须设置controls属性或使用JavaScript提供控制器.

  • "除了GIF文件,可以是多个MB并使用带宽,人们甚至没有意识到" (36认同)