【问题标题】:Autostart html5 video using android 4 browser使用 android 4 浏览器自动启动 html5 视频
【发布时间】:2012-07-30 07:32:08
【问题描述】:

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

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

我在 Android 4 上搜索过这个问题并没有发现任何积极的结果。

【问题讨论】:

  • 此限制是否适用于 Android 上的 Chrome?谢谢

标签: android html5-video android-4.0-ice-cream-sandwich android-4.4-kitkat android-browser


【解决方案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。
猜你喜欢
  • 2013-12-28
  • 1970-01-01
  • 2013-02-19
  • 2017-05-08
  • 1970-01-01
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
相关资源
最近更新 更多