Youtube 嵌入视频在 webview 中不起作用。这段代码有啥问题?
Posted
技术标签:
【中文标题】Youtube 嵌入视频在 webview 中不起作用。这段代码有啥问题?【英文标题】:Youtube embed videos not working in webview. What's wrong with this code?Youtube 嵌入视频在 webview 中不起作用。这段代码有什么问题? 【发布时间】:2011-12-28 16:02:08 【问题描述】:我是安卓新手。我现在面临两个问题1。我解析了 xml 文件并将其显示在包含视频和文本的 webview 中。当我点击视频时它不会播放。在 xml 视频中嵌入了 youtube。
为什么会这样?
1.第一个问题:代码和图像
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.web_view);
Intent intent=getIntent();
String urlsting=intent.getStringExtra("str");
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setjavascriptEnabled(true);
mWebView.getSettings().setPluginState(PluginState.ON);
mWebView.getSettings().setPluginsEnabled(true);
mWebView.setInitialScale(100);
mWebView.getSettings().setBuiltInZoomControls(true);
mWebView.loadDataWithBaseURL(null, urlsting,"text/html", "utf-8", null);
当我点击视频时,它开始浏览并只显示黑屏,然后什么都不会发生。
![][1]
2. 我有你在 html 标签中给出的嵌入视频网址,并尝试加载它。它们也不适合我。我检查了问题和博客的数量,也没有进行任何设置,然后也无法显示视频。帮助将不胜感激。在此先感谢。
String video= "<table bgcolor=\"#666666\"><tr><td><iframe width=\"300\" height=\"260\" frameborder=\"0\" id=\"player\" type=\"text/html\"src=\"http://www.youtube.com/embed/iiLepwjBhZE?enablejsapi=1&origin=example.com\"></iframe></td></tr><tr><td><iframe width=\"300\" height=\"260\" frameborder=\"0\" id=\"player\" type=\"text/html\"src=\"http://www.youtube.com/embed/lBMMTeuJ_UQ?enablejsapi=1&origin=example.com\"></iframe></td></tr><tr><td><iframe width=\"300\" height=\"260\" frameborder=\"0\" id=\"player\" type=\"text/html\"src=\"http://www.youtube.com/embed/BZMkY3y7nM0?enablejsapi=1&origin=example.com\"></iframe></td></tr><tr><td></table>";
mWebView = (WebView) findViewById(R.id.webview);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.getSettings().setPluginState(PluginState.ON);
mWebView.getSettings().setPluginsEnabled(true);
//mWebView.loadDataWithBaseURL(null,load,"text/html","UTF-8",null);
mWebView.loadData(video,"text/html","UTF-8");
在这种情况下,我将 youtube 嵌入视频加载到 webview,但它们也无法正常工作。
![][2]
我使用的是 android 2.3.3 版本。我还想澄清在模拟器上安装 adobe flash 播放器是否有任何要求,但我认为没有,因为视频在浏览器中工作。谁能告诉我是对还是错??请尝试给我解决方案,因为我很久以前就遇到了这个问题..
我也尝试过如下使用对象标签:
String obj="<object width=\"300\" height=\"260\"><param name=\"movie\" value=\"http://www.youtube.com/embed/iiLepwjBhZE?enablejsapi=1&origin=example.com\"?version=3&hl=pt_BR&rel=0\"></param><param name=\"allowFullScreen\" value=\"true\"></param><param name=\"allowscriptaccess\" value=\"always\"></param><embed src=\"http://www.youtube.com/embed/iiLepwjBhZE?enablejsapi=1&origin=example.com\" ?version=3&hl=pt_BR&rel=0\" type=\"application/x-shockwave-flash\" width=\"480\" height=\"330\" allowscriptaccess=\"always\" allowfullscreen=\"true\" /></object>";
【问题讨论】:
***.com/questions/6556802/… 检查一次。 你有解决办法吗? 【参考方案1】:你需要
为您的 WebView 设置一个 WebChromeClient
web.setWebChromeClient(new WebChromeClient());
并开启硬件加速值
<application
android:hardwareAccelerated="true"...
查看http://developer.android.com/reference/android/webkit/WebView.html 并阅读 HTML5 视频支持部分。
这对我有用...
【讨论】:
天哪!!我不得不承认我 100% 悲观这会起作用,但它刚刚开始在我的三星 Note 2 上以 web 视图播放 youtube 视频!哇。附言我没有为整个应用启用硬件加速,而是仅为显示 youtube 视频的 Activity 启用它。 不幸的是,当我播放第二个视频时,我在 webkit 中遇到了异常! android.view.WindowManager$BadTokenException: 无法添加窗口 -- 令牌 null 无效;您的活动正在运行吗?在 android.view.ViewRootImpl.setView(ViewRootImpl.java:798) 在 android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:288) 在 android.view.WindowManagerImpl.addView(WindowManagerImpl.java:73) 在 android.widget。 MediaController.show(MediaController.java:374) 在 android.webkit.HTML5VideoFullScreen.showControllerInFullScreen(HTML5VideoFullScreen.java:425) 在 android.webkit.HTML5VideoViewProxy$VideoPlayer.end(HTML5VideoViewProxy.java:343) 查看高亮部分:为了在您的应用程序中支持内联 HTML5 视频,您需要开启硬件加速,并设置 WebChromeClient。对于全屏支持,onShowCustomView(View, WebChromeClient.CustomViewCallback) 和 onHideCustomView() 的实现是必需的,getVideoLoadingProgressView() 是可选的。【参考方案2】:我猜,您在 html 代码中使用了 iframe 标记。用对象标签改变它。我的意思是,您必须使用对象而不是 iframe。这里有一个例子:
<object ><param name="movie"
value="http://www.youtube.com/v/"here is your video id"?version=3&hl=pt_BR&rel=0">
</param><param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param>
<embed src="http://www.youtube.com/v/"here is your video id"?version=3&hl=pt_BR&rel=0"
type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" /></object>
使用下面的代码:
webview.getSettings().setPluginsEnabled(true);
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setAllowFileAccess(true);
webview.loadUrl(url);
如果你的问题解决了,试试这个并把它加粗:)
【讨论】:
感谢您的回复。它无法在视频中显示问题标记???? 我猜你在问这句话:“here is your video id” -> 一定是这样的-> 7wfYIMyS_dI youtube.com/watch?v=7wfYIMyS_dI 不,我也会尝试使用上面提到的对象标签,然后显示?代替视频,请检查已编辑的问题。 对不起,我没听懂你想说什么,请简单解释一下。谢谢。 我已经帮不上忙了。我在我的应用程序中使用它并且它正在工作。我猜你错过了一些东西。我建议您再次检查您的 java 和 html 代码。【参考方案3】:您是否在实际设备上测试过您的应用?因为像这样嵌入的视频,即 iFrame 需要更多时间来加载。在我的情况下,同样的事情发生了,然后我将 webview 设置更改为,
getSettings().setPluginsEnabled(true);
但之后它无法在模拟器上运行,而在设备中它正在加载,所以我认为它无法运行,但就在今天我尝试了同样的事情,它运行良好,令我惊讶。所以你只需要添加这行代码即可。
第二件事是只有那些嵌入在 iframe 标签中的视频才支持通过使插件为 true。
【讨论】:
【参考方案4】:这样做:
myWebView.getSettings().setPluginState(PluginState.ON);
myWebView.getSettings().setJavaScriptEnabled(true);
myWebView.getSettings().setAllowFileAccess(true);
myWebView.setWebChromeClient(new WebChromeClient());
并启用硬件加速!
【讨论】:
【参考方案5】:关注这个来源,Youtube 视频应该会播放
String youtubeId = "iiLepwjBhZE";
int width = rl.getWidth();
int height = rl.getHeight();
WebChromeClient mWebChromeClient = new WebChromeClient()
public void onProgressChanged(WebView view, int newProgress)
/*
view.loadUrl("javascript:(function() " +
"document.querySelector('iframe').setAttribute('style', 'width: 1080px; height: 1920px'); " +
")()");
*/
;
String video= "<table bgcolor=\"#666666\"><tr><td><iframe width=\"" +
width +
"\" height=\"" +
height +
"\"frameborder=\"0\" id=\"player\" type=\"text/html\"src=\"http://www.youtube.com/embed/" +
youtubeId +
"?enablejsapi=1&origin=example.com\"></iframe> </td> </tr><tr><td></table>";
//
webView.getSettings().setPluginState(PluginState.ON);
webView.setWebChromeClient(mWebChromeClient);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setAppCacheEnabled(true);
webView.setInitialScale(1);
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
//mWebView.loadDataWithBaseURL(null,load,"text/html","UTF-8",null);
webView.loadData(video,"text/html","UTF-8");
【讨论】:
以上是关于Youtube 嵌入视频在 webview 中不起作用。这段代码有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章
android webview youtube嵌入视频自动播放不起作用
Iframe 中的 YouTube 嵌入播放器在 iOS6 中不起作用
嵌入的 YouTube 视频在 iframe HTML 中不可用