android实现本地视频播放功能,Android开发 MediaPlayer入门_播放本地视频

前言

MediaPlayer,可以播放视频/音频,并且它支持本地和网络文件的播放.本片博客作为入门教程,先以最通俗的方式解释播放文件本地视频.

实现流程

获取权限

保持屏幕常亮

初始化SurfaceView的状态监听

初始化MediaPlayer

给MediaPlayer添加预览SurfaceView的SurfaceHolder

添加需要播放的视频并且配置MediaPlayer

播放视频

暂停视频

停止视频

释放内存

获取权限

播放本地视频,那就需要读写存储权限,注意别忘记了动态授权

保持屏幕常亮

音视频开发的基本操作,在xml的根布局上添加下面这个属性,也可以在SurfaceView上添加

android:keepScreenOn="true"

初始化SurfaceView

作为显示播放视频的曲面View,如果你还不了解它.那么建议你先学习一些SurfaceView的知识.

我们需要监听SurfaceView状态,确定它启动完毕之后我们在开始加载播放视频.在onCreate执行下面的初始化initSurfaceviewStateListener

private voidinitSurfaceviewStateListener() {

mSurfaceHolder=mVideoPlaySurfaceview.getHolder();

mSurfaceHolder.addCallback(newSurfaceHolder.Callback() {

@Overridepublic voidsurfaceCreated(SurfaceHolder holder) {

mMediaPlayer.setDisplay(holder);//给mMediaPlayer添加预览的SurfaceHolder

setPlayVideo(mPath);//添加播放视频的路径

}

@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width, intheight) {

Log.e(TAG,"surfaceChanged触发: width=" + width + "height" +height);

}

@Overridepublic voidsurfaceDestroyed(SurfaceHolder holder) {

}

});

}

在surfaceCreated方法里执行了2个方法:(当然可以先不关注,下面依然会重新提到它们)

给MediaPlayer添加预览的SurfaceHolder.

添加播放视频的路径与配置MediaPlayer

初始化MediaPlayer

private voidinitMediaPalyer() {

mMediaPlayer= newMediaPlayer();

}

直接new,没说明好说的,也是可以先在onCreate执行initMediaPalyer

给MediaPlayer添加预览SurfaceView的SurfaceHolder

SurfaceView初始化完成后直接给MediaPlayer设置SurfaceHolder >>>>> mMediaPlayer.setDisplay(holder);

mSurfaceHolder.addCallback(newSurfaceHolder.Callback() {

@Overridepublic voidsurfaceCreated(SurfaceHolder holder) {

mMediaPlayer.setDisplay(holder);//给mMediaPlayer添加预览的SurfaceHolder

setPlayVideo(mPath);//添加播放视频的路径

}

添加需要播放的视频并且配置MediaPlayer

private voidsetPlayVideo(String path) {try{

mMediaPlayer.setDataSource(path);//设置播放视频文件

mMediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT);//缩放模式

mMediaPlayer.setLooping(true);//设置循环播放

mMediaPlayer.prepareAsync();//异步准备//mMediaPlayer.prepare();//同步准备,因为是同步在一些性能较差的设备上会导致UI卡顿

mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { //准备完成回调

@Overridepublic voidonPrepared(MediaPlayer mp) {mp.start();//启动播放视频

}

});

}catch(IOException e) {

e.printStackTrace();

}

}

setPlayVideo方法,在surfaceCreated接口回调方法里执行即可.上面已经有写就不在重复交代了

播放视频

private voidstartPlay(){if (!mMediaPlayer.isPlaying()){ //判断视频是否在播放

mMediaPlayer.start();

}

}

暂停视频

private voidpausePlay(){if(mMediaPlayer.isPlaying()){

mMediaPlayer.pause();

}

}

停止视频

private voidstopPlay(){if(mMediaPlayer.isPlaying()){

mMediaPlayer.stop();

}

}

释放内存

这是必要的,因为MediaPlayer底层是运行C++的函数方法.不要使用后,必需释放内存

@Overrideprotected voidonDestroy() {super.onDestroy();if (mMediaPlayer != null){if(mMediaPlayer.isPlaying()){

mMediaPlayer.stop();

}

mMediaPlayer.release();

mMediaPlayer= null;

}

}

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值