看了下网上关于集成Yoube视频开发的文章不是很多,
所以今天把我开发中所遇到的问题和实现代码分享给大家。
应用运行环境:AndroidTV端、Android手机端
这是开发者专区中的入口,上边这句话的意思是,使用嵌入式播放器在您的应用中播放视频,并自定义播放体验。
点进来可以看到他提供了Android、IOS、和IFrame(html)三种Api,因为只是在Android设备上运行,所以只讲Android和IFrame
这两种,先说一下这AndroidAPI和IFrameApi的区别,
1、AndroidAPI
如果想播放Yoube视频,Android设备上必须有Yoube的应用,优点是开发快、适配性比较好。
2、IFrameAPI
基于浏览器内核,有些设备使用会有问题,好处是不用Yoube应用的支持,可以直接播放,缺点是需要跨平台开发,步骤繁琐,适配性比较差.
基本上国外Android设备上都会自带Yoube应用,但是我负责的项目在AndroidTV端运行,
Android盒子更新比较慢,Yoube对2012年以前的智能电视不再提供支持,所以项目开发中我选择了IFrameAPI的方式。
所以就先讲IFrameApi的方式。
IFrameAPI
Android端需要做的有两件事
1、Android通过webview调用html,在接口中传入Yoube视频的id、以及视频的宽高 。
如何获取视频id?
访问Yoube的网站,当前播放视频地址栏v后面的就是视频id,如:
2、通过Android的遥控器监听事件调用html中的方式控制视频的播放、暂停、快进、快退功能。
android代码
MainActivity
package com.example.administrator.intelchange;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends Activity {
private static final String TAG = "MainActivity";
WebView wv_common_webview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DisplayMetrics outMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
int widthPixels = outMetrics.widthPixels;
int heightPixels = outMetrics.heightPixels;
wv_common_webview = (WebView) findViewById(R.id.webview);
String id="_vw0dH3ic4A";
//调用本地html
//wv_common_webview.loadUrl("file:///android_asset/111.html");
//调用服务端html
wv_common_webview.loadUrl("http://ott.bangtv.tv/yt/play.html?v="+id+"&w="+widthPixels*0.75+"&h="+heightPixels*0.75);
//加上下面这段代码可以使网页中的链接不以浏览器的方式打开
wv_common_webview.setWebViewClient(new WebViewClient());
//得到webview设置
WebSettings webSettings = wv_common_webview.getSettings();
//允许使用javascript
webSettings.setJavaScriptEnabled(true);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
wv_common_webview.getSettings().setBuiltInZoomControls(true);
wv_common_webview.getSettings().setUseWideViewPort(true);
wv_common_webview.getSettings().setLoadWithOverviewMode(true);
wv_common_webview.getSettings().setTextZoom(100);
wv_common_webview.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
// 如果页面中链接,如果希望点击链接继续在当前browser中响应,
// 而不是新开Android的系统browser中响应该链接,必须覆盖webview的WebViewClient对象
wv_common_webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 重写此方法表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边
view.loadUrl(url);
return true;
}
});
}
//调用html中的方法,传入按键状态
@SuppressLint("SetJavaScriptEnabled")
public void testJS(int keycode,String key) {
if (keycode == KeyEvent.KEYCODE_DPAD_LEFT) {
wv_common_webview.loadUrl("javascript:operation( "+KeyEvent.KEYCODE_DPAD_LEFT+","+key+")");
}else if(keycode == KeyEvent.KEYCODE_DPAD_RIGHT){
wv_common_webview.loadUrl("javascript:operation( "+KeyEvent.KEYCODE_DPAD_RIGHT+","+key+")");
}
else if(keycode == KeyEvent.KEYCODE_DPAD_UP){
wv_common_webview.loadUrl("javascript:operation( "+KeyEvent.KEYCODE_DPAD_UP+","+key+")");
}else if(keycode == KeyEvent.KEYCODE_DPAD_DOWN){
wv_common_webview.loadUrl("javascript:operation( "+KeyEvent.KEYCODE_DPAD_DOWN+","+key+")");
}
else if(keycode == KeyEvent.KEYCODE_DPAD_CENTER){
wv_common_webview.loadUrl("javascript:operation( "+KeyEvent.KEYCODE_DPAD_CENTER+","+key+")");
}
}
//
/**
* 监听遥控器按键事件
*/
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
// TODO Auto-generated method stub
// if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT
// | event.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP
// | event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT
// | event.getKeyCode() == KeyEvent.KEYCODE_DPAD_DOWN‘’
// | event.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER
// && event.getAction() == KeyEvent.ACTION_DOWN) {
// testJS(event.getKeyCode(),"0");
//
// }
// if (event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT
// | event.getKeyCode() == KeyEvent.KEYCODE_DPAD_UP
// |event.getKeyCode() == KeyEvent.KEYCODE_DPAD_RIGHT
// | event.getKeyCode() == KeyEvent.KEYCODE_DPAD_DOWN
// &&event.getAction() == KeyEvent.ACTION_UP) {
// testJS(event.getKeyCode(),"1");
//
// }
//按键按下时传参数给html,”0“为按下,”1“为按键抬起
if(event.getKeyCode() == KeyEvent.KEYCODE_DPAD_LEFT&&event.getAction() == KeyEvent.ACTION_DOWN