一、前言

ExoPlayer是google开源的应用级媒体播放器项目,目前已有1W+的start,并一直在维护。该开源项目包含ExoPlayer库和演示
demo,github地址:https://github.com/google/ExoPlayer。

二、优缺点比较

与Android内置的MediaPlayer相比,ExoPlayer具有许多优点:
*支持通过HTTP(DASH)和SmoothStreaming进行动态自适应流,这两种都不受MediaPlayer的支持。还支持许多其他格式
*能够自定义和扩展播放器,以适应各种不同需求。 ExoPlayer专门设计了这一点,大部分组件都可以自己替换
*官网说了很多,其实说到底最主要的就是各个组件可以自定义,还可以接入ffmpeg组件,基本能满足99.9%的需求
与IJKPlayer和Vitamio相比,ExoPlayer具有的优点:
*导入项目之后APK体积增加小
缺点:
*最低支持版本4.4
*实现比较复杂

三、概述

ExoPlayer库的核心是Exoplayer接口,Exoplayer公开了传统的高级媒体播放器功能,例如缓冲媒体、播放、
暂停和seek等功能,ExoPlayer通过组件实现替他高级功能。ExoPlayer公同的组件有:
*MediaSource:定义多媒体数据源,从Uri中读取数据,传入ExoPlayer。
*TrackSelector:轨道提取器,从MediaSource中提取各个轨道的二进制数据,交给Render渲染。
*LoadControl:可以控制MediaSource,比如什么时候开始缓冲,缓冲多少之后暂停缓冲

四、入门

1、添加依赖

项目根目录中的build.gradle文件中包含jcenter仓库:

repositories {    jcenter()}

用app模块的build.gradle文件中添加ExoPlayer库的依赖:

compile 'com.google.android.exoplayer:exoplayer:r2.X.X'

2、创建播放器

// 创建带宽BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();// 创建轨道选择工厂TrackSelection.Factory videoTrackSelectionFactory = new A// 创建轨道选择实例TrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);// 创建播放器实例SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);

3、添加SimpleExoPlayerView,绑定SimpleExoPlayer

在XML文件中添加SimpleExoPlayerView控件,此控件实现了视频播放的基本界面,内部包含了PlaybackControlView,实现了对视频播放的基本控制。添加SimpleExoPlayerView之后绑定SimpleExoPlayer

 simpleExoPlayerView.setPlayer(player);

4、准备并开始播放器

// 创建加载数据的工厂dataSourceFactory = new DefaultDataSourceFactory(this,Util.getUserAgent(this,"MyApplication"),null);Uri uri = Uri.parse(url);// 创建资源ExtractorMediaSource mediaSource = new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(uri);// 准备播放player.prepare(mediaSource);// 开始播放player.setPlayWhenReady(true);

5、退出时释放播放器

 @Override    protected void onDestroy() {        super.onDestroy();        if (player != null) {            player.release();        }    }

6、离开界面时暂停播放

@Override    protected void onPause() {        super.onPause();        if (player != null) {            player.setPlayWhenReady(false);        }    }

更多相关文章

  1. Android中文件与文件夹的创建(file)
  2. android之微信分享图片
  3. JS、LUA都可以开发移动应用
  4. android模拟器创建报错: PANIC: Could not open:.... 错误的解决
  5. 掌阅Android(安卓)App插件补丁实践(ZeusPlugin)
  6. 《Android开发艺术探索》摘录2
  7. Android(安卓)官方推荐 : DialogFragment 创建对话框
  8. 2019-11-22 Notification(通知服务)的实例
  9. 通信组件之Intent的基本使用

随机推荐

  1. 关于Android向前兼容和向后兼容问题的理
  2. Android(安卓)图标ICO设计标准与原则
  3. Activity生命周期
  4. Android手机软件汉化教程---第二课 arsc
  5. Android(安卓)高仿新浪微博底部导航栏,实
  6. Android 下交叉编译使用(Android NDK 默认
  7. Android进程管理机制及优化(HTC&其它可参
  8. android的wifi网卡移植详细过程已经通用
  9. Android的Activity屏幕切换动画||Gesture
  10. android RelativeLayout属性及demo