我想在我的Android应用中嵌入一个YouTube视频。它有一个导航抽屉,当打开此抽屉时,视频必须继续播放。我希望我的应用程序能够播放受版权限制的视频,例如Vevo的视频。我的第一次尝试是在WebView中使用Chrome客户端加载嵌入式URL(
在这个库的可用实现之间,我尝试了以下内容:
另一个疑问是:移动网站如何播放来自YouTube的视频,即使有“特定网站”限制?请理解这里提问的是一个不太熟悉JavaScript的Android开发人员。
目前,我有这段代码:
要加载播放器的布局:
https://www.youtube.com/embed/VIDEO_ID
),但对于许多视频,例如来自Vevo的视频,如this,我看到这个消息:
This Video Contains content from Vevo. It is restricted from playback on certain sites
在这个库的可用实现之间,我尝试了以下内容:
- Android API(安卓API)
- Iframe API(Iframe API)
- Javascript API(Javascript API)
安卓API有一个优点,就是可以在提到的限制下播放视频,但因为其默认行为是当抽屉被打开时停止播放,所以被舍弃了。
使用Iframe API,我可以在抽屉打开时播放视频,但不能限制。
我的最后一次尝试是使用Javascript API。目前,我和使用Iframe API时一样,无法受到限制地播放视频。
然而,我认为这是找到解决方案的正确方法。在API参考中,他们建议使用SWFObject,但据我所知,移动设备上没有可用的Flash,就像这个答案中所述的那样。那么,在我的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>