15

我想使用 android 4 冰淇淋三明治浏览器自动启动 android html5 视频。我尝试了许多 java 脚本函数和 html5 视频的自动缓冲自动播放标签。但没有任何效果。我通过 android 应用程序在 webview 中启动 android chrome 客户端,该客户端应该能够自动启动视频。单击播放按钮时,视频播放但不自动播放。

它在android中受到限制吗?需要注意的另一件事是,即使我们单击播放按钮并且视频正在播放和完成,chromeClient 中也不会调用回调方法。

我用谷歌搜索并发现在 Android 4 上这个问题没有积极的结果。

4

2 回答 2

23

似乎 Android 4+ 将play()方法的要求更改为需要用户交互。如果您play()从用户事件处理程序(例如touchstartmousedown)中触发,则只要在同一个事件循环中运行视频,您就可以播放视频。

这意味着您不应该使用异步触发器来调用play(),而是在同一个事件处理程序中调用 play 而不使用setTimeout()等,所以像延时播放这样的东西是不可能的。

一种方法是在 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();
于 2012-08-06T09:51:48.637 回答
1

Android实际上有一个API!该方法是 setMediaPlaybackRequiresUserGesture()。经过大量研究视频自动播放和大量来自 SO 的黑客攻击后,我发现了它。这是布莱尔范德霍夫的一个例子:

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

于 2015-01-14T21:03:53.620 回答