【发布时间】:2015-05-30 04:10:18
【问题描述】:
我想在我的 Android 应用中嵌入一个 youtube 视频。它有一个Navigation Drawer,当这个抽屉打开时,视频必须继续播放。我希望我的应用能够播放有版权限制的视频,例如来自Vevo 的视频。我的第一次尝试是使用 Chrome 客户端在 WebView 中简单地加载嵌入 url (https://www.youtube.com/embed/VIDEO_ID),但对于许多视频,例如来自 Vevo 的视频,如 this,我看到了这条消息:
This Video Contains content from Vevo. It is restricted from playback on certain sites
为了处理这个错误,我决定使用Youtube API。
在这个库的可用实现之间,我尝试了这些:
Android API 的优点是我可以播放具有上述限制的视频,但它被丢弃了,因为它的默认行为是播放器在打开抽屉时停止视频。
使用 iframe API,我可以在抽屉打开时播放视频,但没有限制。
我最后的尝试是使用 Javascript API。目前我的情况和iframe一样,就是不能播放有限制的视频。
但是我认为这是找到解决方案的正确方法。在api reference 中,他们推荐使用SWFObject,但据我所知,没有可用于移动设备的flah,例如this answer 中的暴露。那么,还有另一种在我的 WebView 中嵌入视频的方法吗?
另一个疑问是:移动网站如何播放来自 youtube 的视频,即使有“某些网站”的限制?请理解,这里问的是一个对 Javascript 没有多少经验的 Android 开发人员。
目前,我有这段代码:
将加载播放器的布局:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
扩展此布局的片段:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, null);
WebView webView = (WebView) view.findViewById(R.id.web_view);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.loadUrl("file:///android_asset/player_webview.html");
webView.setWebViewClient(new CustomClient());
return view;
}
private class CustomClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView webview, String url) {
webview.setWebChromeClient(new WebChromeClient());
webview.loadUrl(url);
return true;
}
}
HTML 文件
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="./swfobject/swfobject.js"></script>
<div id="ytapiplayer">
You need Flash player 8+ and JavaScript enabled to view this video.
</div>
<script type="text/javascript">
var params = { allowScriptAccess: "always" };
var atts = { id: "myytplayer" };
swfobject.embedSWF("http://www.youtube.com/v/G90AgiAMM6k?enablejsapi=1&playerapiid=ytplayer&version=3",
"ytapiplayer", "425", "356", "8", null, null, params, atts);
</script>
</head>
</html>
【问题讨论】:
标签: javascript android html iframe youtube-api