问题:开发播放器的过程中发现,在mediaplayer对喜马拉雅的hls直播音频流进行播放的过程中,发生MediaPlayer:Error(1,-1007)错误,尝试播放网上找的直播流"http://content.mobile-tv.sky.com/content/ssna/live/ssnraudio.m3u8"不放生此问题

对此在不改变项目已有接口的情况下将MediaPlayer 和 ExoPlayer进行封装

代码如下

public class MediaPlayerImp {private UaiMediaListener listener;private Context context;private boolean isExoPLayer = false;private Object mMediaPlayer;private Object exoPlayerListener;public interface UaiMediaListener {void onPrepared();void onCompletion();void onSeekComplete();void onError();}public MediaPlayerImp(Context context) {this.context = context;mMediaPlayer = createMediaPlayer(context);}public MediaPlayerImp(Context context, boolean isNeedExoPLayer){this(context);this.isExoPLayer = isNeedExoPLayer;}public void reset() {if (isExoPLayer) {//no reset do nothing} else {((MediaPlayer) mMediaPlayer).reset();}}public boolean isPlaying() {if (isExoPLayer) {return ((ExoPlayer) mMediaPlayer).getPlayWhenReady();} else {return ((MediaPlayer) mMediaPlayer).isPlaying();}}public void start() {if (isExoPLayer) {((ExoPlayer) mMediaPlayer).setPlayWhenReady(true);} else {((MediaPlayer) mMediaPlayer).start();}}public void pause() {if (isExoPLayer) {((ExoPlayer) mMediaPlayer).setPlayWhenReady(false);} else {((MediaPlayer) mMediaPlayer).pause();}}public void stop() {if (isExoPLayer) {((ExoPlayer) mMediaPlayer).setPlayWhenReady(false);((ExoPlayer) mMediaPlayer).stop();} else {((MediaPlayer) mMediaPlayer).stop();}}public void release() {if (isExoPLayer) {((ExoPlayer) mMediaPlayer).removeListener((Player.EventListener) exoPlayerListener);((ExoPlayer) mMediaPlayer).release();} else {((MediaPlayer) mMediaPlayer).release();}}public void seekTo(int msec) {if (isExoPLayer) {((ExoPlayer) mMediaPlayer).seekTo(msec);} else {((MediaPlayer) mMediaPlayer).seekTo(msec);}}public void playAsync(String strUri) {if (isExoPLayer) {DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(context, "MediaPlayerImp");if (strUri.endsWith("m3u8")) {MediaSource hlsMediaSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(strUri));((ExoPlayer) mMediaPlayer).prepare(hlsMediaSource, true, true);} else {MediaSource extraMediaSource = new ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.parse(strUri));((ExoPlayer) mMediaPlayer).prepare(extraMediaSource);}} else {try {((MediaPlayer) mMediaPlayer).setDataSource(strUri);((MediaPlayer) mMediaPlayer).prepareAsync();} catch (IOException e) {e.printStackTrace();}}}public long getDuration() {if (isExoPLayer) {return ((ExoPlayer) mMediaPlayer).getDuration();} else {return ((MediaPlayer) mMediaPlayer).getDuration();}}public long getCurrentPosition() {if (isExoPLayer) {return ((ExoPlayer) mMediaPlayer).getCurrentPosition();} else {return ((MediaPlayer) mMediaPlayer).getCurrentPosition();}}public void setUaiMediaListener(@NonNull UaiMediaListener listener) {this.listener = listener;}private Object createMediaPlayer(Context context) {if (isExoPLayer) {// Create the playerExoPlayer exoPlayer = ExoPlayerFactory.newSimpleInstance(new DefaultRenderersFactory(context),new DefaultTrackSelector(), new DefaultLoadControl());exoPlayerListener = new Player.DefaultEventListener() {@Overridepublic void onPlayerStateChanged(boolean playWhenReady, int playbackState) {if (playbackState == Player.STATE_READY) {listener.onPrepared();}if (playbackState == Player.STATE_ENDED) {listener.onCompletion();}}@Overridepublic void onPlayerError(ExoPlaybackException error) {listener.onError();}@Overridepublic void onSeekProcessed() {listener.onSeekComplete();}};exoPlayer.addListener((Player.EventListener) exoPlayerListener);return exoPlayer;} else {MediaPlayer mediaPlayer = new MediaPlayer();mediaPlayer.setOnPreparedListener((mp) -> {listener.onPrepared();});mediaPlayer.setOnErrorListener((mp, what, extra) -> {listener.onError();return true;});mediaPlayer.setOnCompletionListener((mp) -> {listener.onCompletion();});mediaPlayer.setOnSeekCompleteListener((mp) -> {listener.onSeekComplete();});return mediaPlayer;}}}

这样实现在不改变原项目有接口的基础上进行播放器的适配

exoplayer和mediaplayer的封装相关推荐

  1. textureview 缩放_用MediaPlayer+TextureView封装一个完美实现全屏、小窗口的视频播放器...

    原标题:用MediaPlayer+TextureView封装一个完美实现全屏.小窗口的视频播放器 本文作者 本文由xiaoyanger授权发布. xiaoyanger的博客地址: http://www ...

  2. android 播放器封装,Android视频播放最全总结:MediaPlayer+TextureView封装一个完美实现全屏、小窗视频播放器,附项目源码...

    原标题:Android视频播放最全总结:MediaPlayer+TextureView封装一个完美实现全屏.小窗视频播放器,附项目源码 作者:xiaoyanger 来源:http://www.jian ...

  3. 迷你播放器--第一阶段(3)--MediaPlayer的封装

    迷你播放器--第一阶段(3) MediaPlayer的封装--利用intent实现消息传递 本文章为CSDN作者原创,转载请保留出处:http://blog.csdn.net/lrs0304/arti ...

  4. Android 使用MediaPlayer播放音频详解

    目录 一.官方资料 二.简单介绍 三.MediaPlayer使用 1.创建MediaPlayer实例 2.重要API 3.状态图 4.代码 5.常用API 6.辅助效果 总结 一.官方资料 Media ...

  5. ExoPlayer官方中文使用文档

    ① 前言 在这之前笔者使用原生的MediaPlayer.B站开源的IJKVideoView等播放器.知道发现ExoPlayer,这款由YouTube开发的播放器真的是非常强大.对于自定义播放器非常友好 ...

  6. 05.视频播放器内核切换封装

    05.视频播放器内核切换封装 目录介绍 01.视频播放器内核封装需求 02.播放器内核架构图 03.如何兼容不同内核播放器 04.看一下ijk的内核实现类 05.看一下exo的内核实现类 06.如何创 ...

  7. 视屏播放_使用原生MediaPlayer+TextureView实现全屏、小窗口、视频列表、m3u8监控播放

    Android 视屏播放器----MediaPlayer+TextureView实现全屏.小窗口.视频列表播放 标签(空格分隔): 视屏播放器 一.效果图 二.集成步骤 按文件目录复制进自己项目[文件 ...

  8. 【翻译】安卓新播放器EXOplayer介绍

    [翻译]安卓新播放器EXOplayer介绍 http://developer.android.com/guide/topics/media/exoplayer.html 前言: Playing vid ...

  9. MediaPlayer+TextureView,完美切换全屏、小窗口的 Android 视频播放器

    NiceVieoPlayer 项目地址:xiaoyanger0825/NiceVieoPlayer  简介:MediaPlayer+TextureView,完美切换全屏.小窗口的 Android 视频 ...

  10. MediaPlayer+TextureView实现视频播放器

    Android中实现视频播放器的途径有两种: 使用VideoView 通过MediaPlayer + SurfaceView/ TextureView 1. VideoView VideoView使用 ...

最新文章

  1. MongoDB for C#基础入门
  2. XINGNET交换机病毒防范
  3. oracle按时间要求查询
  4. Jmeter HTTP请求后响应数据显示乱码解决方法
  5. 实战:ajax带参数请求slim API
  6. [html] html页面中如何实现gif图片重新播放?
  7. 网站界面设计没有灵感,不妨去探索广袤的大自然!
  8. PyQT5 helloworld教程(转载)
  9. laravel 5连接MySQL_Laravel 手记(连接mysql)
  10. 创建标签等操作DOM的原生js API
  11. 一个运维人创业的故事
  12. nodejs 模板引擎ejs的使用
  13. error C1128: 节数超过对象文件格式限制: 请使用 /bigobj 进行编译
  14. 数据结构与算法-二叉树
  15. 小型企业服务器型号齐全,【一般小企业内部使用什么样子的服务器性价比比较高?】...
  16. 关于eMule下载伤硬盘的话题(官方解释)
  17. LLMs:自然语言处理领域—大语言模型的涉及四大技术领域(TL/USL/PT+Fine/Seq2Seq)、十大核心组件之详细攻略
  18. 可怕!CPU 竟成了黑客的帮凶
  19. OpenPDF使用教程及样例代码
  20. 《OSPF和IS-IS详解》一1.5 ARPANET内的路由选择

热门文章

  1. I350系列服务器网卡驱动,Intel英特尔网卡驱动
  2. 桌面宠物秀,电脑桌面美化
  3. 制作U盘免疫病毒文件夹
  4. Windows读写硬盘
  5. 360真假u盘测试软件,360u盘鉴定器准不准?
  6. 教你如何在b站实现炫酷弹幕墙(文末送十六进制颜色代码一览表)
  7. 芬兰开放「线上 AI 速成班」,全球网民均可注册【智能快讯】
  8. 对于高等代数一下比较基础的概念的认识
  9. 皮尔逊、斯皮尔曼、肯德尔相关系数
  10. 用Java语言编写ajax设计模式_《松本行弘的程序世界》读书笔记(上)——面向对象、程序块、设计模式、ajax...