web-dev-qa-db-ja.com

Android 4ブラウザを使用してhtml5ビデオを自動開始

Android html5ビデオを使用してAndroid 4アイスクリームサンドイッチブラウザーを自動開始します。多くのJavaスクリプト機能とhtml5ビデオの自動バッファタグを自動バッファリングしてみました。 Android chromeアプリ経由でWebviewのクライアントを起動しますAndroidアプリとそのクライアントは自動でビデオを開始します。再生ボタンをクリックすると、ビデオは再生されますが自動再生はされません。

それはアンドロイドで制限されていますか?その他の注意点は、再生ボタンをクリックしても、ビデオが再生および完了しても、chromeClientでコールバックメソッドが呼び出されないことです。

Android 4。

15
M P Mathugama

Android 4+がplay()メソッドの要件を変更してユーザーの操作を要求するようです。ユーザーイベントハンドラー内からplay()をトリガーすると例:touchstartまたはmousedown)、同じイベントループ内で実行する限り、ビデオを再生できます。

つまり、非同期トリガーを使用してplay()を呼び出すのではなく、setTimeout()などなしで同じイベントハンドラー内でplayを呼び出す必要があるため、時間遅延再生のようなものは質問。

1つの方法は、Android 4でiOSと同じトリックを使用することです。最初のユーザー操作イベントを使用して、ビデオをplay()およびpause()します。これはユーザーが開始したアクション中に動画を再生したため、後で操作できるようになります。動画の準備ができたら、呼び出しがイベントハンドラループ内で行われたかどうかに関係なく、後でいつでも再生メソッドを呼び出すことができます。ない。

編集:これは、HTCとSamsungで動作するが、Galaxy Nexus 4.1では動作しないサンプルコードです(再生するにはユーザーの操作が必要です):

var myVideo = document.getElementById('myvideo');

myVideo.addEventListener('canplay', function() {
  myVideo.play();
});

myVideo.load();
myVideo.play();
23
Klemen Slavič

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

1
brendan