如何让Flowplayer在Android WebView中自动播放?
我无法让Flowplayer在Android上的网络视图中自动播放视频。如果按下in HTML play(在HTML中播放)按钮,视频可以正常播放,但无法自行启动。这似乎与Chrome有关,因为autoplay在Android Chrome浏览器中也不起作用。它在Android股票浏览器和(Linux)桌面的Chrome浏览器中都能正常工作 我看到有人建议添加一个WEBM文件以使MP4内容正常工作,但这没有帮助。我还看到提到使用新设置setMediaPlaybackRequireservesture(),但这也没有帮助 有人让autoplay在Android网络视图中工作吗 下面是我的测试代码,它将应用程序提取到其基本要素如何让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
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()");
}
}
); }