在Android应用中集成YouTube视频播放功能

本文介绍了如何在Android应用中集成YouTube视频播放功能,包括AndroidAPI和IFrameAPI的使用。针对AndroidTV端,由于旧设备对YouTube支持有限,作者选择了IFrameAPI,涉及通过WebView加载HTML以及处理遥控器事件控制视频播放。同时,文章也提到了AndroidAPI的集成,需要满足特定的SDK和Google服务要求,并在Google开发者控制台配置API密钥。
摘要由CSDN通过智能技术生成

看了下网上关于集成Yoube视频开发的文章不是很多,

所以今天把我开发中所遇到的问题和实现代码分享给大家。

应用运行环境:AndroidTV端、Android手机端

https://developers.google.com/youtube/iframe_api_reference(Yoube开发者专区)
这是开发者专区中的入口,上边这句话的意思是,使用嵌入式播放器在您的应用中播放视频,并自定义播放体验。
在这里插入图片描述
点进来可以看到他提供了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,如:
https://www.youtube.com/watch?v=1xRjMEIzn48

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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值