使用 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() 方法的要求更改为需要用户交互。如果您从用户事件处理程序(例如touchstartmousedown)中触发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 视频的主要内容,如果未能解决你的问题,请参考以下文章

Android中实现开机自动启动服务(service)实例

Android 应用启动性能 | 延迟初始化

在android/iOS微信浏览器中自动播放HTML5 audio(音乐)的2种正确方式

[Android]活动的启动模式

6.自动安装 Android 系统

HTML5 音频未在 Android 4.0.4 设备本机浏览器中多次播放