HDMediaPlayer

该类包依托于谷歌Mediaplayer二次封装,一行代码就可以实现播放的逻辑。
谷歌中国API链接: Google官网API

Github地址

https://github.com/yinhaide/HDMediaPlayer

源代码下载

https://download.csdn.net/download/yinhaide/12010382

特性

  • 该类支持播放格式有:音乐(.mp3、.wav、.ogg)、视频(.mp4、.3gp)

  • 支持播放本地音频、视频

  • 支持播放Assets目录下的音频、视频

  • 支持播放网络网络流媒体(仅限上述格式)

如何快速集成

导入方式

在工程级别的build.gradle添加

allprojects {         repositories {             ...        maven {      url 'https://jitpack.io' }    }}

在应用级别的build.gradle添加

api 'com.github.yinhaide:HDMediaPlayer:0.0.5'

如何使用

  • 一行代码实现播放Assets目录下的mp4:
MediaPlayerHelper.getInstance().setSurfaceView(surfaceView).playAsset(context,"test.mp4");
  • 一行代码实现播放Assets目录下的mp3:
MediaPlayerHelper.getInstance().playAsset(context,"test.mp3");
  • 一行代码实现播放网络流媒体或者本地全路径流媒体:
/** * urlString 可为网络流媒体连接,也可以为本地存储全路径链接 */MediaPlayerHelper.getInstance().setSurfaceView(surfaceView).play(urlString);
  • 如果想得到详细的回调信息:
MediaPlayerHelper.getInstance().setMediaPlayerHelperCallBack(new MediaPlayerHelper.MediaPlayerHelperCallBack() {         @Override    public void onCallBack(MediaPlayerHelper.CallBackState state, MediaPlayerHelper mediaPlayerHelper, Object... args) {             Log.v(TAG,"--"+state.toString());        if(state== MediaPlayerHelper.CallBackState.PROGRESS){                 int percent=(int)args[0];            Log.v(TAG,"--progress:"+percent);        }    }});
  • 更多的用法请查看demo:
/** 设置播放进度回调时间间隔 */MediaPlayerHelper.getInstance().setProgressInterval(msec);/** 获得MediaPlayer对象,进行更多的自定义的操作 */MediaPlayerHelper.getInstance().getMediaPlayer().pause();MediaPlayerHelper.getInstance().getMediaPlayer().start();MediaPlayerHelper.getInstance().getMediaPlayer().stop();

注意点

1、播放结束后到下次播放有黑屏现象

在部分配置比较低的电视或者手机设备中,视频播放完毕到下次播放之间可能存在1s左右的黑屏现象,原因是部分机器软解吗能力较弱,需要将数据解码放在内存当中导致黑屏。解决方案是开启手机的硬件加速能力,让硬件协助解码,消除黑屏现象。

<application    android:hardwareAccelerated="true"    ...</application>

2、部分机型/电视存在黑屏有声音的现象

在部分机型中,会有播放没画面的,原因是因为SurfaceHolder可能在创建的时候尺寸不对,需要动态赋值。这个操作必须在主线程中进行。

@Overridepublic void surfaceCreated(SurfaceHolder holder) {         ...    if(holder != null && uiHolder.surfaceView != null){             uiHolder.surfaceView.post(() -> holder.setFixedSize(uiHolder.surfaceView.getWidth(),uiHolder.surfaceView.getHeight()));    }    ...}

这个项目会持续更新中…

都看到这里了,如果觉得写的可以或者对你有帮助的话,顺手给个星星点下Star~

这个控件内部采用一个Fragment框架,如果有兴趣的话可以去了解一下

  • https://github.com/yinhaide/HDRocket

关于我

  • Email: 123302687@qq.com
  • Github: https://github.com/yinhaide
  • 简书: https://www.jianshu.com/u/33c3dd2ceaa3
  • CSDN: https://blog.csdn.net/yinhaide

更多相关文章

  1. Android播放音乐案例分享
  2. Android开发之单行文本自动播放效果
  3. android 高仿多米音乐播放器
  4. Vitamio视频播放器
  5. android 拖动条 SeekBar
  6. Android(安卓)使用MediaPlayer播放assets或者raw目录的音频文件
  7. Android(安卓)使用ExoPlayer视频播放 (一)
  8. AIDL/IPC Android(安卓)AIDL/IPC 进程通信机制——超详细讲解及
  9. android全功能音乐播放器、基于MVP-Clean + Weex + RxJava2 + Re

随机推荐

  1. Android(安卓)Studio系列教程(六) Gradle
  2. Android(安卓)RadioButton用代码去圆点失
  3. Android中Intent传递自定义对象类型的数
  4. Android(安卓)OpenGL基础教程 1
  5. React Native Android从源码看WebView 没
  6. Android获取内部和SDCard的存储空间
  7. Android动态创建一个个组件
  8. Android(安卓)Developers:sqlite3
  9. 在Eclipse中 每次右击工程名 选择 proper
  10. Android学习摘要一之Android历史