Android VR Player(全景视频播放器) [9]:ExoPlayer播放器MPEG-DASH视频播放
前言
DASH视频播放初始加载时间更短
在之前的博客中 Nginx 搭建DASH服务器 中对如何搭建DASH服务器和视频处理做了分享。由于DASH具有动态码率自适应的特点,正好可以应用于VR视频这样平均码率较大的视频的播放,而且DASH作为未来流媒体的统一规范,具有很好的发展前景。
之前我在播放器中播放在线视频走的是rtsp或者http协议,在服务器带宽不是很大的情况,播放效果都不是很好,主要体现在初始加载时间久,播放过程中卡顿次数较多。所以想到可以在使用DASH来改善播放质量。不过安卓原生的媒体库MediaPlayer并不支持DASH,谷歌后来推出的应用级媒体库ExoPlayer则支持,于是就换用了这个库。
下面介绍的步骤主要参考了ExoPlayer的官方开发指导和示例代码,针对的是本项目的播放dash视频的需求,如果是其他类型的视频,方法大同小异。
添加依赖
使用ExoPlayer前需要先添加依赖。在app的build.gradle中添加
repositories {jcenter()google()
}
然后
implementation 'com.google.android.exoplayer:exoplayer:2.X.X'
在这里可以看到发布版本信息,目前最新的是2.8.0。上面这种方法是添加全部的ExoPlayer模块,根据官网的说法,你也可以只添加自己需要的那部分。
创建播放器
使用工厂方法创建一个播放器
// 1. Create a default TrackSelector
Handler mainHandler = new Handler();
BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter();
TrackSelection.Factory videoTrackSelectionFactory =new AdaptiveTrackSelection.Factory(bandwidthMeter);
TrackSelector trackSelector =new DefaultTrackSelector(videoTrackSelectionFactory);// 2. Create the player
SimpleExoPlayer player =ExoPlayerFactory.newSimpleInstance(context, trackSelector);
准备DASH资源
try {Uri dashVideoUri = Uri.parse(mpdUrl);DataSource.Factory mediaDataSourceFactory= new DefaultDataSourceFactory(context,Util.getUserAgent(context, "yourApplicationName"),bandwidthMeter);DataSource.Factory dashDataSourceFactory = new DefaultDataSourceFactory(context,Util.getUserAgent(context, "yourApplicationName"));// This is the MediaSource representing the media to be played.DashMediaSource dashMediaSource = new DashMediaSource.Factory(new DefaultDashChunkSource.Factory(mediaDataSourceFactory),dashDataSourceFactory).createMediaSource(dashVideoUri,null,null);// Prepare the player with the source.mExoPlayer.prepare(dashMediaSource);} catch (Exception e) {e.printStackTrace();}
上面代码中的mpdUrl为服务器中dash视频mdp文件的url,因为是访问网络文件,这部分就放到一个try,catch中了。准备好资源后,调用prepare将dashMediaSource传给播放器。
设置surface
因为我是使用glsurfaceview来展示opengl es渲染的内容的,所以,用类似下面的代码来设置surface。
Surface surface = new Surface(mSurface);mExoPlayer.setVideoSurface(surface);
如果使用封装好的PlayerView的话,绑定view需要用到下面的代码
// Bind the player to the view.
playerView.setPlayer(player);
播放控制
ExoPlayer播放的方法为
mExoPlayer.setPlayWhenReady(true);
播放时设置为true,暂停时设置为false。
结语
对比MediaPlayer的使用,除了在资源准备方面稍微麻烦点外,ExoPlayer的很多方法都和MediaPlayer差不多,甚至更为简单,易用。因为MediaPlayer支持的格式较少等等缺点,自己一直想换一个播放器,试过vitamio,ijkplayer 等等播放器,因为本身开发经验不是很够,都没能最终应用到播放器上,替换掉MediaPlayer。而ExoPlayer很多地方和MediaPlayer有相似之处,很适合用来做媒体库的升级,如果已经用MediaPlayer开发好一个应用的话。另外ExoPlayer是开源的,并且可以商用,而vitamio这样的播放器都用商用限制,这也ExoPlayer的一个优点吧!
Android VR Player(全景视频播放器) [9]:ExoPlayer播放器MPEG-DASH视频播放相关推荐
- android vr播放器 开发,Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放...
本文将带你了解Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放,希望本文对大家学Android有所帮助. Androi ...
- android 全景播放器,Android VR Player(全景視頻播放器) [5]:簡單的歡迎界面
Android VR Player(全景視頻播放器) [5]:簡單的歡迎界面 歡迎界面 在繼續下一部分,即視頻列表實現的介紹前,分享一下簡單的歡迎界面的實現.一來是可以整合一下前面說的側滑菜單和底部導 ...
- Android VR Player(全景视频播放器) [10]: VR全景视频渲染播放的实现(exoplayer,glsurfaceview,opengl es)
前言 此博客的大部分内容来自我的毕业设计论文,因此语言上会偏正式一点,如果您有任何问题或建议,欢迎留言.在此感谢实验室的聂师兄,全景视频render部分的代码设计主要参考了他所编写的代码来完成,他对视 ...
- Android VR Player(全景视频播放器) [7]:视频列表的实现-网络视频
Android VR Player(全景视频播放器) [7]:视频列表的实现-网络视频 前期准备 在之前的博文,Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频 ...
- Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频
Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频 (本篇博客参考<Android第一行代码(第二版)>中关于RecyclerView的部分) 列表的实 ...
- ExoPlayer播放器 开发者指南(官方权威指南译文)
前言 因为公司项目原因,目前开始研究ExoPlayer的原理及实现.其中对DRM更是有所涉及,因此自己也好借此机会扩展自己的音视频知识,同时写出一些自己的技术总结与分享,希望对其他学习此播放器的朋 ...
- 基于exoplayer播放器的高斯模糊视频滤镜
最近项目需求,视频滤镜要用高斯模糊.奈何网上全是图片高斯模糊,且模糊的强度不够,效果并不是自己需要的. 于是,打算自己写一个. exoPlayer播放器自带滤镜,所以用这个播放器来做. 滤镜的话,用到 ...
- ExoPlayer播放器剖析(六)ExoPlayer同步机制分析
关联博客 ExoPlayer播放器剖析(一)进入ExoPlayer的世界 ExoPlayer播放器剖析(二)编写exoplayer的demo ExoPlayer播放器剖析(三)流程分析-从build到 ...
- ExoPlayer播放器剖析(五)ExoPlayer对AudioTrack的操作
关联博客 ExoPlayer播放器剖析(一)进入ExoPlayer的世界 ExoPlayer播放器剖析(二)编写exoplayer的demo ExoPlayer播放器剖析(三)流程分析-从build到 ...
- 视频在html不能播放器,网页无插件直播H265编码视频播放器EasyPlayer网页播放器不能播放怎么处理?...
原标题:网页无插件直播H265编码视频播放器EasyPlayer网页播放器不能播放怎么处理? EasyPlayer播放器系列项目提供了非常简单易用的SDK及API接口,用户通过API调用就可以非常快速 ...
最新文章
- 中山行书百年纪念版字体可以商用吗_干货|免费可商用字体
- windows内存管理概述
- mysql命令行查看端口占用_linux下常用命令查看端口占用
- Java多线程之线程并发库阻塞队列的应用
- 没有人会告诉您乘坐飞机时的几个事实 但是您一定要知道
- class AbstractAPI(metaclass=AbstractAPIMeta):SyntaxError: invalid syntax
- 致我的2018 你好2019
- 【转】SQL 语句执行顺序
- Docker学习六:综合实践
- python中linspace函数_numpy.linspace函数具体使用详解
- 实例协议分析RFC1483:AAL5和几种常见ADSL接入技术
- 《剑指Offer》面试题6 重建二叉树——勘误
- 看大厂NLP的面试经验之后的一些思考总结
- The tough time set
- PHP正则淘口令,Flutter代码锦囊---淘口令复制弹窗
- 2020最新安卓版本是多少_努比亚Z20安卓P版本刷机包(官方最新固件rom下载V2.24正式版)...
- webp格式图片转化为常见的png格式图片
- ubuntu 下创建加密文件夹
- QQ聊天记录备份助手 v1.0——搜索、备份、恢复QQ聊天记录文件,重装系统必备...
- 从零搭建若依环境(非分离版)