Android ExoPlayer实现网络URL或本地视频播放
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或本地视频播放相关推荐
- android获取网络视频缩略图,Android 获取缩略图,网络视频,或者本地视频
IM软件发送视频文件,需要显示缩略图: import android.graphics.Bitmap; import android.media.MediaMetadataRetriever; imp ...
- 基于android实现模拟爱奇艺本地视频播放器app项目演示【附项目源码+论文说明】分享
软件概述 软件用途 本软件的开发是xxxx. a.本软件的开发目的:熟悉android开发的基本知识,包括四大组件的使用方法.列表控件的数据源绑定.数据库的操作等. b.基本原理:通过数据库存储用户和 ...
- 零基础用Android Studio实现简单的本地视频播放器
用Android Studio的VideoView组件实现简单的本地视频播放器 一.创建Android Studio项目 二.在界面布局文件activity_main.xml中定义VideoView组 ...
- Android音视频学习系列(七) — 从0~1开发一款Android端播放器(支持多协议网络拉流本地文件)
系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...
- Typora+PicGo图床配置(本地图片-->网络url~博客必备)
前段时间搭了一个hexo博客,但是发现了一个很大的问题,在Typora里编辑你的博文的时候,插入的图片都是一些本地图片,然后部署的时候根本不能加载这些图片~~ 其中一个解决方法就是通过一些平台,像知乎 ...
- 实现在Android本地视频播放器开发
在Android本地视频播放器开发中的搜索本地视频章节中,我们能够搜索本地视频并且显示每个视频的图片.标题.时间长度,当然如果需要添加其他的例如视频的长度和宽度可以使用Video类中的方法,既然我们获 ...
- Android本地视频播放器开发--视频解码
在上一章Android本地视频播放器开发--SDL编译编译中编译出sdl的支持库,当时我们使用的2.0,但是有些api被更改了,所以在以下的使用者中我们使用SDL1.3的库,这个库我会传上源码以及编译 ...
- android 编译 sdl,SDL编译 - Android本地视频播放器开发_Linux编程_Linux公社-Linux系统门户网站...
在上一章 Android本地视频播放器开发--ffmpeg解码视频文件中的音频(2)[http://www.linuxidc.com/Linux/2013-06/85955p5.htm]中使用Ope ...
- Android MediaPlayer本地视频播放器
该文章的目的是,让初学者能够快速掌握一个简单的本地视频播放器.该Demo中用到了SurfaceView.MediaPlayer. 实现效果图: <RelativeLayout xmlns:and ...
最新文章
- EndNote(二)之英文引文导入方式
- 逻辑短路 java_逻辑操作符中的短路现象
- SpringBoot之MongoTemplate的查询可以怎么耍
- 编译器vs.代码 谁之过
- YznCMS 后台开发框架
- NEC协议——红外遥控的使用
- Jenkins进阶系列之——08Jenkins纳入版本控制
- python给用户打标签_用户画像—打用户行为标签
- Web性能优化:雅虎35条
- 数据库原理及应用 mysql版_数据库原理及应用(MySQL版)
- 电子邮件的地址格式是怎样的?请说明各部分的意思。
- web前端开发工程师的三种级别,技术决定你能拿5K,还是15K,还是25K
- 小米 admob广告 ID_如何评价即将发布的小米盒子4?
- 甘超波:NLP检定语言模式
- Sentry开启 Github sso 配置(self-hosted)
- java 有五个学生_《Java程序设计》 创建5个学生对象,给一个学生数组赋值,每个学生属性有:学号,姓名,年龄。...
- SpringBoot整合RabbitMq实战(一)
- scRNA-seq | 吐血整理的单细胞入门教程(ID转换)(六)
- MTK,4G全网通模块设计资料
- CVPR2019点云分割论文解读ASIS:Associatively Segmenting Instances and Semantics in Point Clouds