Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让Flowplayer在Android WebView中自动播放?_Android_Jquery_Android Webview_Flowplayer - Fatal编程技术网

如何让Flowplayer在Android WebView中自动播放?

如何让Flowplayer在Android WebView中自动播放?,android,jquery,android-webview,flowplayer,Android,Jquery,Android Webview,Flowplayer,我无法让Flowplayer在Android上的网络视图中自动播放视频。如果按下in HTML play(在HTML中播放)按钮,视频可以正常播放,但无法自行启动。这似乎与Chrome有关,因为autoplay在Android Chrome浏览器中也不起作用。它在Android股票浏览器和(Linux)桌面的Chrome浏览器中都能正常工作 我看到有人建议添加一个WEBM文件以使MP4内容正常工作,但这没有帮助。我还看到提到使用新设置setMediaPlaybackRequireservestu

我无法让Flowplayer在Android上的网络视图中自动播放视频。如果按下in HTML play(在HTML中播放)按钮,视频可以正常播放,但无法自行启动。这似乎与Chrome有关,因为autoplay在Android Chrome浏览器中也不起作用。它在Android股票浏览器和(Linux)桌面的Chrome浏览器中都能正常工作

我看到有人建议添加一个WEBM文件以使MP4内容正常工作,但这没有帮助。我还看到提到使用新设置setMediaPlaybackRequireservesture(),但这也没有帮助

有人让autoplay在Android网络视图中工作吗

下面是我的测试代码,它将应用程序提取到其基本要素

package com.example.testautovideo;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends Activity {

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        WebView webview = new WebView(this);
        setContentView(webview);

        webview.setWebChromeClient(new WebChromeClient());
        webview.getSettings().setJavaScriptEnabled(true);

        webview.getSettings().setLoadsImagesAutomatically(true);
        // webview.getSettings().setMediaPlaybackRequiresUserGesture(false);  // didn't help
        webview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
            }
        });

        webview.loadUrl(THE_URL);
    }
}
这是我的网页的来源。Flowplayer和jQuery调用是标准安装。Flowplayer库是最新的免费版本;jQuery库是最新的产品版本

<!DOCTYPE HTML>
<html>
<head>
<meta name='viewport' content='width=device-width,initial-scale=1,maximum-scale=1,target-densitydpi=device-dpi'>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta property="ws:skip" value="false" />
<title>Autoplay Test</title>
<link rel="stylesheet" type="text/css" href="src/js/flowplayer/skin/minimalist.css">
<script type="text/javascript" src="src/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="src/js/flowplayer/flowplayer.min.js"></script>

<script>
$(document).ready(function(){
    function playVideo(){
        var player = flowplayer($('#theVideo'));
        player.play();
    }
    setTimeout(playVideo,10);
});
</script>

<style>
body {
    margin:0;
    padding:0;
    background:#000;
}

#wrapper .flowplayer {
    width:640px;
    height:360px;
}

#wrapper {
    width:640px;
    height:360px;
    background:#000;
    margin:30px auto;
}
</style>
</head>

<body>
<div id="wrapper">
    <div class="flowplayer" id="theVideo">
        <video preload="none" autoplay>
            <source type="video/webm" src="video_1.webm">
            <source type="video/mp4" src="video_1.mp4">
        </video>
    </div>
</div>
</body>
</html>

自动播放测试
$(文档).ready(函数(){
函数playVideo(){
var player=flowplayer($(“#theVideo”);
player.play();
}
设置超时(播放视频,10);
});
身体{
保证金:0;
填充:0;
背景:#000;
}
#包装器,flowplayer{
宽度:640px;
高度:360px;
}
#包装纸{
宽度:640px;
高度:360px;
背景:#000;
保证金:30像素自动;
}

我知道链接可能会过时,但以下是Flowplayer和jQuery安装正常的网页。

您肯定需要调用
setMediaPlaybackRequireservesture(false)
才能使其正常工作。我现在看不出你的HTML有什么问题,如果你使用javascript从
onload
处理程序调用视频元素上的
play()
,它能工作吗


Android版Chrome不支持自动播放,这是我们的预期行为。但是当setMediaPlaybackRequireservesture为false时,它应该在WebView中工作。

以下是一种适用于所有版本的Android的方法,一直到Honeycomb(API 11),甚至更早版本。重要的部分是通过JavaScript在视频上动态运行load()和play()。即使如此,它也不总是适用于旧版本的Android(API 17中添加的
setMediaPlaybackRequireservesture()
调用被删除)

WebView拒绝让加载/播放自动启动,但它会让Android应用程序启动。网页本身最好能够确定视频何时启动,而不是应用程序

下面是如何让这一切正常工作的。首先,在
setMediaPlaybackRequireservesture()周围设置了一个保护条件
调用以防止其在pre-Jellybean MR1设备上运行。然后添加并启用了一个小的单一方法JavascriptInterface类。该方法调用一个加载并播放页面视频的页面上JavaScript方法。最后,网页被更改为在视频启动时调用公开方法。在下面的代码中,t当页面加载完毕并且视频设置为连续循环时,调用该方法

是的,启用JavascriptInterface类存在一个已知的安全问题,但是我们的类只有一个方法,该方法除了回调调用JavaScipt之外,什么都不做。

应用程序的相关部分: 网页:

自动播放测试
函数playVideo(){
var player=flowplayer($(“#theVideo”);
player.load('video_1.mp4');
player.bind(“finish”,function()){
player.play();
});
}
$(文档).ready(函数(){
AndroidApp.startVideo()
});
身体{
保证金:0;
填充:0;
背景:#000;
}
#包装器,flowplayer{
宽度:640px;
高度:360px;
}
#包装纸{
宽度:640px;
高度:360px;
背景:#000;
保证金:30像素自动;
}

即使使用SetMediaPlaybackRequireservesture,我也无法让它工作

所以我所做的就是对网页进行一个简单的javascript调用

public void triggerPlayVideo()
{

          @Override
          public void run()
          {
              webView.loadUrl("javascript:playVideo()");
          }

      }

  );  }
activity.runOnUiThread(新的Runnable(){

          @Override
          public void run()
          {
              webView.loadUrl("javascript:playVideo()");
          }

      }

  );  }

一旦我从webview收到页面加载/视频加载的事件,就会触发此方法。

感谢您的响应。使用SetMediaPlaybackRequireservesture(false)似乎没有任何区别。我让我们的web人员尝试调用play()在onload处理程序中。好的,请让我知道你的进展。你在logcat中看到任何可能指示错误的消息吗?如果你运行的是Android 4.4,你可以尝试使用Chrome开发工具调试WebView,看看你的javascript是否有任何问题,等等。虽然你的回答没有真正解决我们的问题,但它确实指出了我们的问题正确的方向-->+1。这种方法也适用于默认的HTML5嵌入和可能的其他嵌入技术。如果其他人对此有问题,视频加速必须打开!我没有意识到我包括的这一行,因为有人说有必要使webclient背景透明(mWebView.setLayerType(WebView.LAYER_TYPE_SOFTWARE,null);)正在禁用视频加速,因此使视频不可见(我解释为它没有播放,我的没有音频)。
          @Override
          public void run()
          {
              webView.loadUrl("javascript:playVideo()");
          }

      }

  );  }