12

Androidのhtml5ビデオは自動再生できないことを理解しています。現状では、ユーザーが再生ボタンをクリックした場合にのみ、ビデオがデバイス上で機能します。

<video width="640px" height="360px" src="media/video/Moments_of_Everyday_Life.mp4" controls id="video"></video>


<script type="text/javascript">
    $(function(){
        var video  = document.getElementById('video');
        video.play();
    });
</script>

しかし、それは私のデスクトップで動作します。

なぜこれが機能しないのですか?そして、再生をクリックすることと使用することの違いは何.play()ですか?

4

7 に答える 7

2

ブラウザーが への呼び出しをブロックするのと同じ理由で機能しません。これwindow.open()を許可すると、Web 開発者がメディアを自動再生しない (またはポップアップ ウィンドウを開く) というユーザー設定を覆すことができるからです。

再生をクリックすることとこの方法を使用することの違いは、まさにあなたが言ったこと、つまりクリックです。この種の呼び出しはクリック イベントで許可されますが、通常は許可されません。

于 2013-02-15T14:14:20.750 に答える
2

私はそれを働かせました!「自動再生」が機能して、HTML5 ビデオをインラインで再生できるようになりました。くそー、これは時間がかかりました!これは私がやったことです:

<div id=content>
    <video width="1280px" height="720px" src="file:///android_asset/videos/Moments_of_Everyday_Life.mp4"></video>
</div>

注: 一部の人々は、ポスターやプリロードを追加すると機能するようになると言っています。私はこれを使っても使わなくてもうまくいきました。

Javascript がビデオを自動再生します。

<script type="text/javascript">
    $(function(){
        function callback () {
            document.querySelector('video').src = document.querySelector('video').src
            document.querySelector('video').play();
        }
        window.addEventListener("load", callback, false);

    });
</script>

これが誰にでも役立つことを願っています。私はこれに1週間苦労しています!

ただ明確にします:

取りかかっている:

Android 4.0.4 Samsung 10.1 タブレット ネイティブ デバイス ブラウザ

于 2013-02-15T14:45:32.947 に答える
1

kitkat で、Firefox ではプログラムで動画を再生できることがわかりました。

また、chrome://flags に移動して「メディア再生のジェスチャー要件を無効にする」オプションを有効にすると、Chrome も同様になります。

于 2015-01-18T16:16:10.807 に答える
1

または、次のように WebView を初期化して簡単に実行できます。

webview.setWebViewClient(new WebViewClient() {
    // autoplay when finished loading via javascript injection
    public void onPageFinished(WebView view, String url) { mMessageContentView.loadUrl("javascript:(function() { document.getElementsByTagName('video')[0].play(); })()"); }
});

上記は私にとってはうまくいきます。

于 2013-11-21T04:08:15.957 に答える
1

Android 4.0+ の HTML5 ビデオについて、次のような発見がありました。

これらのテストを実行するために、/assets に保存された HTML ページで構成されるサンドボックス アプリを作成しました。

HTML:

<!DOCTYPE html>

<html>
    <head>
        <title>HTML5 Video Test</title>
    </head>

    <body>

        <video preload="metadata"><source src="http://www.w3schools.com/html/movie.mp4" type="video/mp4"></video>

        <script> 
          var myvideo = document.getElementsByTagName('video')[0];

          myvideo.addEventListener('loadeddata', function() {
            console.log("** RECEIVED loadeddata **");
            myvideo.play();//this first play is needed for Android 4.1+
          }, false);

          myvideo.addEventListener('canplaythrough', function() {
            console.log("** RECEIVED canplaythrough **");
            myvideo.play();//this second play is needed for Android 4.0 only
          }, false);

        </script>

    </body>
</html>

JAVA: ("/assets/html5video.html")

private WebView mWebView;
private ProgressBar mProgressBar;

@SuppressLint("NewApi")
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.videotest);

    // progress bar
    mProgressBar = (ProgressBar) findViewById(R.id.videotest_progressbar);
    mProgressBar.setProgress(0);
    mProgressBar.setVisibility(View.VISIBLE);

    // webview
    mWebView = (WebView) findViewById(R.id.videotest_webview);
    mWebView.getSettings().setJavaScriptEnabled(true);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
    {
        //NOTE: this is required only for Android 4.2.2+
        mWebView.getSettings().setMediaPlaybackRequiresUserGesture(false);
    }

    mWebView.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress) {
            Log.i(TAG, "Progress = "+progress);
            mProgressBar.setProgress(progress);
        }
    });
    mWebView.setWebViewClient(new WebViewClient() {
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            Toast.makeText(TestActivity.this, "Problem loading webpage", Toast.LENGTH_LONG).show();
            mProgressBar.setVisibility(View.GONE);
        }
        public void onPageFinished(WebView view, String url) {
            mProgressBar.setVisibility(View.GONE);
        }
    });
}

@Override
protected void onResume() {
    super.onResume();
    mWebView.loadUrl("file:///android_asset/html5video.html");
}

Android 4.0.3 注意

迷惑な例外が何度も発生しましたが、java.lang.Throwable: EventHub.removeMessages(int what = 107) is not supported before the WebViewCore is set up.ありがたいことに、ビデオの再生には影響しませんでした。

于 2014-01-16T19:46:25.927 に答える