使用 android 4 浏览器自动启动 html5 视频
Posted
技术标签:
【中文标题】使用 android 4 浏览器自动启动 html5 视频【英文标题】:Autostart html5 video using android 4 browser 【发布时间】:2012-07-30 07:32:08 【问题描述】:我想使用 android 4 冰淇淋三明治浏览器自动启动 android html5 视频。我尝试了许多 java 脚本函数和 html5 视频的自动缓冲自动播放标签。但没有任何效果。我通过android应用程序在webview中启动android chrome客户端,该客户端应该能够自动启动视频。单击播放按钮时,视频播放但不自动播放。
它在android中受到限制吗? 需要注意的另一件事是,即使我们单击播放按钮并且视频正在播放和完成,chromeClient 中也不会调用回调方法。
我在 Android 4 上搜索过这个问题并没有发现任何积极的结果。
【问题讨论】:
此限制是否适用于 Android 上的 Chrome?谢谢 【参考方案1】:Android 4+ 似乎将play()
方法的要求更改为需要用户交互。如果您从用户事件处理程序(例如touchstart
或mousedown
)中触发play()
,那么只要在同一个事件循环中运行视频,您就可以播放视频。
这意味着您不应该使用异步触发器来调用play()
,而是在没有setTimeout()
等的情况下在同一个事件处理程序中调用play,所以像延时播放这样的东西是不可能的。
一种方法是在 Android 4 上使用与 ios 中相同的技巧 - 使用第一个用户交互事件来 play()
和 pause()
视频。这将使视频能够在以后进行操作,因为您是在用户启动的操作期间播放的。成功启动视频后,您可以随时调用播放方法,无论调用是否在事件处理程序循环内进行。
编辑:这是适用于 HTC 和三星的示例代码,但不适用于 Galaxy Nexus 4.1(需要用户交互才能播放):
var myVideo = document.getElementById('myvideo');
myVideo.addEventListener('canplay', function()
myVideo.play();
);
myVideo.load();
myVideo.play();
【讨论】:
谢谢克罗夫。这是否意味着 WebCromeClient 中的所有回调方法(如 onShowCustomView、onCompletion、onPrepared 等)在播放视频时不会为视频的各种事件调用?还有一件事 启动视频是什么意思。有没有关于您提到的任何教程或示例? Primed 在这种情况下表示视频已经播放,这意味着视频播放是由用户触发的,因此可以播放。不过,不确定您所说的“WebChromeClient”是什么意思。 Krof,这不适用于您在 Nexus 4.1 中提到的三星 S3 和 Tab 2.0 设备,需要用户交互。 是的,这仍然是一个不完整的解决方案,有时三星 S3 需要您关闭浏览器,然后它才能奇迹般地工作。它是所有 Android 中最差、最慢的浏览器。 在 Nexus 10/Android 4.2 上,可以trigger playback across a setTimeout,但只能使用一个。【参考方案2】:Android 实际上有一个 API!该方法是 setMediaPlaybackRequiresUserGesture()。经过大量研究视频自动播放和大量来自 SO 的黑客攻击后,我发现了它。这是来自 blair vanderhoof 的一个例子:
package com.example.myProject;
import android.os.Bundle;
import org.apache.cordova.*;
import android.webkit.WebSettings;
public class myProject extends CordovaActivity
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
super.init();
// Set by <content src="index.html" /> in config.xml
super.loadUrl(Config.getStartUrl());
//super.loadUrl("file:///android_asset/www/index.html");
WebSettings ws = super.appView.getSettings();
ws.setMediaPlaybackRequiresUserGesture(false);
适用于 Android 4.4.4
【讨论】:
我认为这个问题是关于 HTML5 而不是 Cordova。以上是关于使用 android 4 浏览器自动启动 html5 视频的主要内容,如果未能解决你的问题,请参考以下文章