前言


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视频播放相关推荐

  1. android vr播放器 开发,Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放...

    本文将带你了解Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放,希望本文对大家学Android有所帮助. Androi ...

  2. android 全景播放器,Android VR Player(全景視頻播放器) [5]:簡單的歡迎界面

    Android VR Player(全景視頻播放器) [5]:簡單的歡迎界面 歡迎界面 在繼續下一部分,即視頻列表實現的介紹前,分享一下簡單的歡迎界面的實現.一來是可以整合一下前面說的側滑菜單和底部導 ...

  3. Android VR Player(全景视频播放器) [10]: VR全景视频渲染播放的实现(exoplayer,glsurfaceview,opengl es)

    前言 此博客的大部分内容来自我的毕业设计论文,因此语言上会偏正式一点,如果您有任何问题或建议,欢迎留言.在此感谢实验室的聂师兄,全景视频render部分的代码设计主要参考了他所编写的代码来完成,他对视 ...

  4. Android VR Player(全景视频播放器) [7]:视频列表的实现-网络视频

    Android VR Player(全景视频播放器) [7]:视频列表的实现-网络视频 前期准备 在之前的博文,Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频 ...

  5. Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频

    Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频 (本篇博客参考<Android第一行代码(第二版)>中关于RecyclerView的部分) 列表的实 ...

  6. ExoPlayer播放器 开发者指南(官方权威指南译文)

    前言   因为公司项目原因,目前开始研究ExoPlayer的原理及实现.其中对DRM更是有所涉及,因此自己也好借此机会扩展自己的音视频知识,同时写出一些自己的技术总结与分享,希望对其他学习此播放器的朋 ...

  7. 基于exoplayer播放器的高斯模糊视频滤镜

    最近项目需求,视频滤镜要用高斯模糊.奈何网上全是图片高斯模糊,且模糊的强度不够,效果并不是自己需要的. 于是,打算自己写一个. exoPlayer播放器自带滤镜,所以用这个播放器来做. 滤镜的话,用到 ...

  8. ExoPlayer播放器剖析(六)ExoPlayer同步机制分析

    关联博客 ExoPlayer播放器剖析(一)进入ExoPlayer的世界 ExoPlayer播放器剖析(二)编写exoplayer的demo ExoPlayer播放器剖析(三)流程分析-从build到 ...

  9. ExoPlayer播放器剖析(五)ExoPlayer对AudioTrack的操作

    关联博客 ExoPlayer播放器剖析(一)进入ExoPlayer的世界 ExoPlayer播放器剖析(二)编写exoplayer的demo ExoPlayer播放器剖析(三)流程分析-从build到 ...

  10. 视频在html不能播放器,网页无插件直播H265编码视频播放器EasyPlayer网页播放器不能播放怎么处理?...

    原标题:网页无插件直播H265编码视频播放器EasyPlayer网页播放器不能播放怎么处理? EasyPlayer播放器系列项目提供了非常简单易用的SDK及API接口,用户通过API调用就可以非常快速 ...

最新文章

  1. 中山行书百年纪念版字体可以商用吗_干货|免费可商用字体
  2. windows内存管理概述
  3. mysql命令行查看端口占用_linux下常用命令查看端口占用
  4. Java多线程之线程并发库阻塞队列的应用
  5. 没有人会告诉您乘坐飞机时的几个事实 但是您一定要知道
  6. class AbstractAPI(metaclass=AbstractAPIMeta):SyntaxError: invalid syntax
  7. 致我的2018 你好2019
  8. 【转】SQL 语句执行顺序
  9. Docker学习六:综合实践
  10. python中linspace函数_numpy.linspace函数具体使用详解
  11. 实例协议分析RFC1483:AAL5和几种常见ADSL接入技术
  12. 《剑指Offer》面试题6 重建二叉树——勘误
  13. 看大厂NLP的面试经验之后的一些思考总结
  14. The tough time set
  15. PHP正则淘口令,Flutter代码锦囊---淘口令复制弹窗
  16. 2020最新安卓版本是多少_努比亚Z20安卓P版本刷机包(官方最新固件rom下载V2.24正式版)...
  17. webp格式图片转化为常见的png格式图片
  18. ubuntu 下创建加密文件夹
  19. QQ聊天记录备份助手 v1.0——搜索、备份、恢复QQ聊天记录文件,重装系统必备...
  20. 从零搭建若依环境(非分离版)

热门文章

  1. 一文揭秘阿里、腾讯、百度研发的薪资职级
  2. 西部网盘 如何去掉硬盘wd drive unlock
  3. iOS开发 APP拉起微信小程序Universal Links配置
  4. RFS(三)----解决x64机器上IE11版本使用IEDriverServer在输入英文/数字很慢的问题
  5. windows xp主题不见了
  6. android 停止一段时间,repo sync 工作一段时间后就停止了
  7. vb6.0安装程序制作图解教程
  8. 适合大学生在校小本创业项目有哪些?以下几种可以参考一下啊
  9. 5 查找单价最高的书
  10. 利用bootstrap实现web登陆