前言

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

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

  1. 《PHP 7+MySQL 8动态网站开发从入门到精通(视频教学版)》示例源码课件教学视频免费下载

    #好书推荐##好书奇遇季#<PHP 7+MySQL 8动态网站开发从入门到精通(视频教学版)>京东当当天猫都有发售. PHP+MySQL的组合是目前世界上流行的Web开发工具,被大型互联网 ...

  2. 优酷视频怎么转二维码_优酷视频转二维码

    有的人想将自己制作的视频分享出去,那么该如何将视频转换成二维码来分享呢?其实方法很简单,直接在视频界面中就能生成,这里和大家讲讲. 01. 登录自己的优酷帐号,然后点击右上角的上传按钮. 优酷视频怎么 ...

  3. android 实现视频播放功能,android开发之简单视频播放器(VideoView)

    简单视频播放器的使用 一.简单使用videoView和MediaController实现播放控制 1.添加需要的权限 2.设置布局 android:id="@+id/main_video&q ...

  4. android 实现视频播放功能,Android项目实现视频播放器

    本文实例为大家分享了Android项目实现视频播放器的具体代码,供大家参考,具体内容如下 VideoView控件是播放视频用的,借助它可以完成一个简易的视频播放器. ①在activity_main.x ...

  5. python全栈开发实践入门_讲书3分钟丨《Python全栈开发实践入门》 -讲书人 谢瑛俊...

    只需3分钟就能快速了解一本书! 由作(译)者发声讲书,直指新书的特点与主旨. 只需利用碎片化时间,省时省力选到适合自己的好书 音频链接 音频内容 大家好,我是<Python全栈开发实践入门> ...

  6. PLM之家 -- NX二次开发从入门到精通全套视频

    这部视频是二次开发实例的入门视频,通过环境配置开始,典型的讲解了一些常见的开发案例,实话讲,也是我们日常项目中经常遇到的,从基础的消息,信息交互开始,到最后通过Block UI的方式进行功能的创建,通 ...

  7. 安卓开发:WebView无法播放微信视频

    USB连上手机,使用 chrome://inspect 调试网页,发现报错,大概意思是 HTTPS 里有 HTTP 内容,请求被阻止. 点击链接查看,HTTP 是视频的封面! http://www.v ...

  8. java安卓开发 快速入门_安卓程序员如何快速入门后端开发常识

    首先,对于安卓开发人员来说,学习一下后端开发知识是有必要的,一方面可以拓展自身的知识面,另一方面也可以推动自己走向全栈程序员发展路线,在云计算时代,全栈程序员的发展空间会更大一些. 相对来说,安卓程序 ...

  9. 如何把本地yum源给其他机器使用_配置本地yum源以及第3方软件仓库的搭建

    一Linux rpm安装软件 rpm -q name查询软件是否被安装 rpm -ivh name.rpm安装软件 rpm -e name卸载软件 rpm -ql name查询软件生成文件 rpm - ...

最新文章

  1. Qt中qDebug()技巧初探
  2. Vuex 模块化与项目实例 (2.0)
  3. delphi 更改DBGrid 颜色技巧
  4. 解决 | 老司机都无法解决的事情,谁能解决?
  5. [大学回忆录]我的本命年
  6. SpringCloud工作笔记076--- CheckStyle插件提高java代码质量
  7. Gartner 2018 年WAF魔力象限报告:云WAF持续增长,Bot管理与API安全拥有未来
  8. mysql key value_【mysql】大量的 key = value 值用什么方式存储?
  9. LSTM api的介绍
  10. (转)三年后,我手里的比特币值多少钱
  11. JS调用OCX控件过程
  12. 《北京住房公积金提取管理办法 》
  13. 大豆SNP位点信息查找V2.1版本
  14. 【R语言】白葡萄酒的EDA分析
  15. WinVista发布前最大敌人是Win95??!!
  16. allegro封装库找不到了
  17. vue中src路径的写法
  18. 论文篇------交通常识
  19. 我的理想计算机英语小短文,我的理想职业英语作文(精选10篇)
  20. char ch= 中 什么意思java_在 Java 语言中定义了如下变量: char ch; 下列赋值语句正确的是_韩语初下答案_学小易找答案...

热门文章

  1. 2021年读书节书单推荐
  2. 新媒体下旅游目的地营销研究――以安徽省灵璧县为例
  3. 资本寒冬之下的聚美优品私有化
  4. Linux安装和部署
  5. 学术之声 | 专访北航教授洪晟:区块链应该管也能够管,而且要学会管
  6. iframe 重新加载
  7. 【无标题】电自2104吕薇202130310206
  8. 开始→运行→输入的命令集锦(欢迎补充)
  9. ecshop 评价仿京东仿淘宝 中评率 好评率 差评率
  10. 房屋装修设计更显档次需要从几个方面入手