Android播放器开发基础(二)
来源:互联网 发布:淘宝里的1元秒杀 编辑:程序博客网 时间:2024/09/21 06:33
Android播放器开发基础(二)
1. 播发器示例
2. 播放器开发小技巧
- 播发器示例
在VideoView中有开启播放视频的代码修改后如下:
注意 :MediaPlayer中没有提供当前播放位置的回调,要主动使用:getCurrentPosition()来获取;
播放器状态:从Idle状态到init状态再到prepare或者preparing状态
/** * 开启视频播放 * **/ public void openVideo() { try { mMediaPlayer = new MediaPlayer();// new // 执行了异步准备prepareAsync()以后的回调监听 mMediaPlayer.setOnPreparedListener(mPreparedListener); mIsPrepared = false; // video size is first known or updated 视频内容尺寸的变化回调,在第一载入和内容变化时回调 mMediaPlayer.setOnVideoSizeChangedListener(mSizeChangedListener); // 视频播放完毕时的回调 mMediaPlayer.setOnCompletionListener(mCompletionListener); // 播放出错时的回调 mMediaPlayer.setOnErrorListener(mErrorListener); // 网络播放时的视频缓存更新时的回调 mMediaPlayer.setOnBufferingUpdateListener(mBufferingUpdateListener); // 播放时的状态(主要是 是否处于缓冲状态或缓冲结束状态 MEDIA_INFO_BUFFERING_START) // 注意:MediaPlayer中没有提供当前播放位置的回调,要主动使用:getCurrentPosition()来获取; mMediaPlayer.setOnInfoListener(mInfoListener); // 设置定位完成的监听 mMediaPlayer.setOnSeekCompleteListener(mSeekCompleteListener); if (mUri != null) { // 处于数据源处于init状态 mMediaPlayer.setDataSource(mUri.toString()); mCurrState = INITIALIZED; mNextState = PREPARING; } // 设置显示的位置 mMediaPlayer.setDisplay(mSurfaceHolder); // 屏幕常亮 mMediaPlayer.setScreenOnWhilePlaying(true); // 异步准备(处于准备中的状态) mMediaPlayer.prepareAsync(); mCurrState = PREPARING; attachMediaController(); } catch (IOException ex) { LogUtil.e(TAG, "Unable to open content: " + mUri + ex.getMessage()); mErrorListener.onError(mMediaPlayer, -1, 0); return; } catch (IllegalArgumentException ex) { LogUtil.e(TAG, "Unable to open content: " + mUri + ex.getMessage()); mErrorListener.onError(mMediaPlayer, -1, 0); return; } }
显示的SurfaceView的切换
需要快速从小屏幕状态切换的全屏状态则可以使用这样的方式快速切换,也不需要重新创建SurfaceView以及MediaPlayer,只是切换了显示位置
//使用同一个MediaPlayer,通过setDisplayer更换Surface显示位置 mediaPlayer.pause(); mediaPlayer.setDisplay(big_surface_view.getHolder()); mediaPlayer.start();
- 播放器开发小技巧
MediaPlayer中有些操作是耗时操作,有时会时间很长,甚至会出现ANR的现象
例如:
setDataSource()prepare()release()reset()所以在做这些操作的时候需要进行异步操作,防止ARN
总结:
做播放器开发需要注意MediaPlayer的状态,大部分的播放问题是使用的当前状态下非法的操作造成的,同时播放器自身的耗时操作也会造成卡顿,需要结合业务逻辑处理。Android原生的MediaPlayer播放器在不同机器上的表现也不同,机器的硬件也会影响到视频的播放,部分机器不能很好的支持高码率的视频源,所以在视频源的选择中也需要尽量兼容到机器
阅读全文
0 0
- Android播放器开发基础(二)
- Android播放器开发基础(一)
- Android播放器开发之SurfaceView(二)
- android基础学习笔记--MP3播放器开发
- VR Android播放器实现(二)
- Android开发笔记--基础篇(二)
- Android基础开发环境搭建(二)
- Android开发基础规范(二)
- android 播放器开发
- android 播放器开发
- Android 播放器开发
- Android应用开发--MP3音乐播放器代码实现(二)
- Android应用开发--MP3音乐播放器代码实现(二)
- Android应用开发--MP3音乐播放器代码实现(二)
- Android 音乐播放器的开发教程(二)反编译apk ----- 小达
- Android开发笔记(一百二十五)自定义视频播放器
- Android开发笔记(一百二十六)自定义音乐播放器
- Android开发学习之路--基于vitamio的视频播放器(二)
- OpenCV霍夫系列(后篇)-统计概率霍夫变换(HoughLinesP)
- 通过示例学习Python列表推导
- STL之效率比较
- C++ Assert()断言机制原理以及使用
- web上传文件方法
- Android播放器开发基础(二)
- cl不可运行解决方法
- 函数传参
- 使用Xlistview时TextView自动换行或ScrollView嵌套Listview高度显示不全
- ######03.经典实体Bean设计:购物项-购物车;订单项-订单。---记录。便于复习。借鉴设计思想
- MapReduce原理总结
- github上实用、常用的插件和库
- PHP字符串函数
- IOS逆向--手动忽略clang编译器警告