Android ExoPlayer播放器使用

转载请标明出处:http://blog.csdn.net/zhijunhong/article/details/51056302 谢谢!~

项目需要播放网络url视频,搜索后发现google官方有提供ExoPlayer播放器,实现后发现基本可满足需求(附源码)。现将代码分享如下:

  • 播放器视图xml文件
  • 资源文件初始化
  • 初始化播放器设置
  • 关闭并释放播放器资源
  • 播放异常处理

播放器视图xml文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical"><com.google.android.exoplayer2.ui.SimpleExoPlayerViewandroid:id="@+id/simpleExoPlayerView"android:layout_width="match_parent"android:layout_height="wrap_content" />
</LinearLayout>

资源文件初始化

 @Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_exoplaye);mSimpleExoPlayerView = (SimpleExoPlayerView) findViewById(R.id.simpleExoPlayerView);mainHandler = new Handler();mShouldAutoPlay = true;clearResumePosition();if (CookieHandler.getDefault() != DEFAULT_COOKIE_MANAGER) {CookieHandler.setDefault(DEFAULT_COOKIE_MANAGER);}mSimpleExoPlayerView.requestFocus();}

###初始化播放器设置

 /*** 初始化播放器*/private void initializePlayer() {boolean needNewPlayer = player == null;if (needNewPlayer) {TrackSelection.Factory adaptiveTrackSelectionFactory = new AdaptiveTrackSelection.Factory(BANDWIDTH_METER);trackSelector = new DefaultTrackSelector(adaptiveTrackSelectionFactory);player = ExoPlayerFactory.newSimpleInstance(this, trackSelector);player.addListener(this);mSimpleExoPlayerView.setPlayer(player);//设置自动播放player.setPlayWhenReady(mShouldAutoPlay);DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this,Util.getUserAgent(this, "Multimedia"));ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();//TODO...更换*.mp4文件地址
MediaSource videoSource = new ExtractorMediaSource(Uri.parse("http://xxxxxx.xxxxxx.mp4"), dataSourceFactory, extractorsFactory, mainHandler,new ExtractorMediaSource.EventListener() {@Overridepublic void onLoadError(IOException error) {Log.e(TAG, "onLoadError: " + error.getMessage());}});boolean haveResumePosition = resumeWindow != C.INDEX_UNSET;if (haveResumePosition) {player.seekTo(resumeWindow, resumePosition);}player.prepare(videoSource);}}

关闭并释放播放器资源

 /*** 释放播放器*/private void releasePlayer() {if (player != null) {updateResumePosition();player.release();player = null;trackSelector = null;}}

###播放异常处理
实现 com.google.android.exoplayer2.Player.EventListener;接口,重写onPlayerError()方法。

Notice:github上的5.1.2版本才将Player.EventListener接口移到core模块,如果用的是2.4.x版本会遇到找不到Player类的错误。

  @Overridepublic void onPlayerError(ExoPlaybackException error) {if (error != null) {Log.e(TAG, "onLoadError: " + error.getMessage());showToast("播放异常");}mErrorState = true;if (isBehindLiveWindow(error)) {clearResumePosition();initializePlayer();} else {updateResumePosition();}}

####还原上次播放位置

 /*** 还原上次播放*/private void updateResumePosition() {resumeWindow = player.getCurrentWindowIndex();resumePosition = Math.max(0, player.getContentPosition());Log.e(TAG, "resumeWindow: " + resumeWindow);Log.e(TAG, "resumePosition: " + resumePosition);}

####重置上次播放

    private void clearResumePosition() {resumeWindow = C.INDEX_UNSET;resumePosition = C.TIME_UNSET;}

//end-以上就是google ExoPlayer播放器实现步骤。如果需要更多的定制内容,还请移步官方文档
https://google.github.io/ExoPlayer/guide.html


最后,如果此篇博文对你有所帮助,别忘了点个赞哟~

Android ExoPlayer实现网络URL或本地视频播放相关推荐

  1. android获取网络视频缩略图,Android 获取缩略图,网络视频,或者本地视频

    IM软件发送视频文件,需要显示缩略图: import android.graphics.Bitmap; import android.media.MediaMetadataRetriever; imp ...

  2. 基于android实现模拟爱奇艺本地视频播放器app项目演示【附项目源码+论文说明】分享

    软件概述 软件用途 本软件的开发是xxxx. a.本软件的开发目的:熟悉android开发的基本知识,包括四大组件的使用方法.列表控件的数据源绑定.数据库的操作等. b.基本原理:通过数据库存储用户和 ...

  3. 零基础用Android Studio实现简单的本地视频播放器

    用Android Studio的VideoView组件实现简单的本地视频播放器 一.创建Android Studio项目 二.在界面布局文件activity_main.xml中定义VideoView组 ...

  4. Android音视频学习系列(七) — 从0~1开发一款Android端播放器(支持多协议网络拉流本地文件)

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

  5. Typora+PicGo图床配置(本地图片-->网络url~博客必备)

    前段时间搭了一个hexo博客,但是发现了一个很大的问题,在Typora里编辑你的博文的时候,插入的图片都是一些本地图片,然后部署的时候根本不能加载这些图片~~ 其中一个解决方法就是通过一些平台,像知乎 ...

  6. 实现在Android本地视频播放器开发

    在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片.标题.时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获 ...

  7. Android本地视频播放器开发--视频解码

    在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译 ...

  8. android 编译 sdl,SDL编译 - Android本地视频播放器开发_Linux编程_Linux公社-Linux系统门户网站...

    在上一章  Android本地视频播放器开发--ffmpeg解码视频文件中的音频(2)[http://www.linuxidc.com/Linux/2013-06/85955p5.htm]中使用Ope ...

  9. Android MediaPlayer本地视频播放器

    该文章的目的是,让初学者能够快速掌握一个简单的本地视频播放器.该Demo中用到了SurfaceView.MediaPlayer. 实现效果图: <RelativeLayout xmlns:and ...

最新文章

  1. EndNote(二)之英文引文导入方式
  2. 逻辑短路 java_逻辑操作符中的短路现象
  3. SpringBoot之MongoTemplate的查询可以怎么耍
  4. 编译器vs.代码 谁之过
  5. YznCMS 后台开发框架
  6. NEC协议——红外遥控的使用
  7. Jenkins进阶系列之——08Jenkins纳入版本控制
  8. python给用户打标签_用户画像—打用户行为标签
  9. Web性能优化:雅虎35条
  10. 数据库原理及应用 mysql版_数据库原理及应用(MySQL版)
  11. 电子邮件的地址格式是怎样的?请说明各部分的意思。
  12. web前端开发工程师的三种级别,技术决定你能拿5K,还是15K,还是25K
  13. 小米 admob广告 ID_如何评价即将发布的小米盒子4?
  14. 甘超波:NLP检定语言模式
  15. Sentry开启 Github sso 配置(self-hosted)
  16. java 有五个学生_《Java程序设计》 创建5个学生对象,给一个学生数组赋值,每个学生属性有:学号,姓名,年龄。...
  17. SpringBoot整合RabbitMq实战(一)
  18. scRNA-seq | 吐血整理的单细胞入门教程(ID转换)(六)
  19. MTK,4G全网通模块设计资料
  20. CVPR2019点云分割论文解读ASIS:Associatively Segmenting Instances and Semantics in Point Clouds

热门文章

  1. Vm挂载虚拟硬盘(手把手教程)
  2. 让你 saly 全场的腾讯云会议
  3. Group velocity and phase velocity(群速度与相速度)
  4. Android---蓝牙连接热敏打印机(斑马指令图片绘制打印)
  5. 阅读基于sketch的软件定义网络测量数据平面硬件模型
  6. 程序员级别分析,看看你是哪个级别
  7. 跨境电商亚马逊卖家入驻亚马逊选择哪个站点开始做呢
  8. PLSQL如何调出sql美化器按钮
  9. 你所不了解的静态路由特点及配置
  10. 用excel打开csv文件