Android播放器开发基础(二)

来源:互联网 发布:淘宝里的1元秒杀 编辑:程序博客网 时间:2024/09/21 06:33

Android播放器开发基础(二)

1. 播发器示例
2. 播放器开发小技巧
  1. 播发器示例

在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();
  1. 播放器开发小技巧
    MediaPlayer中有些操作是耗时操作,有时会时间很长,甚至会出现ANR的现象
例如:
setDataSource()prepare()release()reset()所以在做这些操作的时候需要进行异步操作,防止ARN

总结:

做播放器开发需要注意MediaPlayer的状态,大部分的播放问题是使用的当前状态下非法的操作造成的,同时播放器自身的耗时操作也会造成卡顿,需要结合业务逻辑处理。Android原生的MediaPlayer播放器在不同机器上的表现也不同,机器的硬件也会影响到视频的播放,部分机器不能很好的支持高码率的视频源,所以在视频源的选择中也需要尽量兼容到机器

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 交易猫安全提醒怎么办 网吧进游戏代码怎么办 车票冲突买不了怎么办 苹果8淘宝打不开怎么办 我的淘宝打不开怎么办 福袋不支持退货怎么办 不支持跨区下单怎么办 支付宝被占用怎么办 淘宝东西失效了怎么办 访客突然下降了怎么办 淘宝店铺广告违规怎么办 苹果手机网速差怎么办 支付宝账号忘记怎么办 支付宝无法登录怎么办 什么是淘宝空间不足怎么办 支付宝授权失败怎么办 买家旺旺被打标一次怎么办 淘宝网上忘记密码怎么办 登淘宝忘记密码怎么办 手机淘宝闪退怎么办 证券账户忘了怎么办 资金账户忘了怎么办 公积金账户忘了怎么办 淘宝买家号违规怎么办? 淘宝号显示违规怎么办 淘宝网登录不了怎么办 支付宝刷脸登录失败怎么办 blue超出注册限制怎么办 电脑不识别光盘怎么办 4g按钮打不开怎么办 我电脑没有光驱怎么办 电脑360浏览器打不开怎么办 注销淘宝账号手机号怎么办 苹果手机崩溃了怎么办 淘宝被限制使用怎么办 公司注册成功后怎么办 一建注册不成功怎么办 志愿者注册没成功怎么办 品牌注册成功后怎么办 outlook密码忘了怎么办 淘宝被买家限制怎么办