首页 文章

Android HTML5视频 - 点击播放时有效,但不播放视频 . 播放()

提问于
浏览
10

据我所知,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()的这种方法有什么不同?

UPDATE

这适用于我的dekstop,只是不在Android设备上..

6 回答

  • 2

    经过几个小时的搜索和测试"solutions"这对我有用!解决Angry Fridges你是男人......还是女人!

    <video id="video" class="video" autoplay muted >
    

    注意到 autoplaymuted ,它们都是必需的 .

    这允许视频在计算机和Android手机上播放 .

  • 0

    它不会因浏览器阻止对 window.open() 的调用而起作用,因为允许它允许Web开发人员破坏用户首选项而不是自动播放媒体(或打开弹出窗口) .

    点击播放和使用此方法之间的区别正是您所说的:点击 . 点击事件允许这些类型的调用,但通常不允许 .

  • 1

    我得到了它的工作!现在它可以播放HTML5视频内联“autoplay”工作!该死的花了点时间!好的,这就是我做的:

    <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>
    

    我希望这对任何一个人都有帮助,我现在已经奋斗了一个星期了!

    要明确一点:

    工作:

    Android 4.0.4三星10.1平板电脑原生设备浏览器

  • 1

    我在Android 4.0上发现了关于HTML5视频的以下发现 . 对此进行调查已经过了一周的试验和错误 - 每个主要版本的Android都存在问题 . GOOGLE:它不应该是P.I.T.A !!!!

    为了执行这些测试,我制作了一个沙盒应用程序,其中包含保存在/ 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 NOTE

    我一直遇到恼人的异常 java.lang.Throwable: EventHub.removeMessages(int what = 107) is not supported before the WebViewCore is set up. 谢天谢地,它并没有影响视频播放 .

  • 1

    我在kitkat上发现Firefox允许你以编程方式播放视频 .

    此外,如果您使用chrome://标记并启用“禁用媒体播放的手势要求”选项,Chrome也会同时启用 .

  • 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(); })()"); }
        });
    

    以上工作对我来说很好 .

相关问题