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
android实现本地视频播放功能,Android开发 MediaPlayer入门_播放本地视频相关推荐
- 《PHP 7+MySQL 8动态网站开发从入门到精通(视频教学版)》示例源码课件教学视频免费下载
#好书推荐##好书奇遇季#<PHP 7+MySQL 8动态网站开发从入门到精通(视频教学版)>京东当当天猫都有发售. PHP+MySQL的组合是目前世界上流行的Web开发工具,被大型互联网 ...
- 优酷视频怎么转二维码_优酷视频转二维码
有的人想将自己制作的视频分享出去,那么该如何将视频转换成二维码来分享呢?其实方法很简单,直接在视频界面中就能生成,这里和大家讲讲. 01. 登录自己的优酷帐号,然后点击右上角的上传按钮. 优酷视频怎么 ...
- android 实现视频播放功能,android开发之简单视频播放器(VideoView)
简单视频播放器的使用 一.简单使用videoView和MediaController实现播放控制 1.添加需要的权限 2.设置布局 android:id="@+id/main_video&q ...
- android 实现视频播放功能,Android项目实现视频播放器
本文实例为大家分享了Android项目实现视频播放器的具体代码,供大家参考,具体内容如下 VideoView控件是播放视频用的,借助它可以完成一个简易的视频播放器. ①在activity_main.x ...
- python全栈开发实践入门_讲书3分钟丨《Python全栈开发实践入门》 -讲书人 谢瑛俊...
只需3分钟就能快速了解一本书! 由作(译)者发声讲书,直指新书的特点与主旨. 只需利用碎片化时间,省时省力选到适合自己的好书 音频链接 音频内容 大家好,我是<Python全栈开发实践入门> ...
- PLM之家 -- NX二次开发从入门到精通全套视频
这部视频是二次开发实例的入门视频,通过环境配置开始,典型的讲解了一些常见的开发案例,实话讲,也是我们日常项目中经常遇到的,从基础的消息,信息交互开始,到最后通过Block UI的方式进行功能的创建,通 ...
- 安卓开发:WebView无法播放微信视频
USB连上手机,使用 chrome://inspect 调试网页,发现报错,大概意思是 HTTPS 里有 HTTP 内容,请求被阻止. 点击链接查看,HTTP 是视频的封面! http://www.v ...
- java安卓开发 快速入门_安卓程序员如何快速入门后端开发常识
首先,对于安卓开发人员来说,学习一下后端开发知识是有必要的,一方面可以拓展自身的知识面,另一方面也可以推动自己走向全栈程序员发展路线,在云计算时代,全栈程序员的发展空间会更大一些. 相对来说,安卓程序 ...
- 如何把本地yum源给其他机器使用_配置本地yum源以及第3方软件仓库的搭建
一Linux rpm安装软件 rpm -q name查询软件是否被安装 rpm -ivh name.rpm安装软件 rpm -e name卸载软件 rpm -ql name查询软件生成文件 rpm - ...
最新文章
- Qt中qDebug()技巧初探
- Vuex 模块化与项目实例 (2.0)
- delphi 更改DBGrid 颜色技巧
- 解决 | 老司机都无法解决的事情,谁能解决?
- [大学回忆录]我的本命年
- SpringCloud工作笔记076--- CheckStyle插件提高java代码质量
- Gartner 2018 年WAF魔力象限报告:云WAF持续增长,Bot管理与API安全拥有未来
- mysql key value_【mysql】大量的 key = value 值用什么方式存储?
- LSTM api的介绍
- (转)三年后,我手里的比特币值多少钱
- JS调用OCX控件过程
- 《北京住房公积金提取管理办法 》
- 大豆SNP位点信息查找V2.1版本
- 【R语言】白葡萄酒的EDA分析
- WinVista发布前最大敌人是Win95??!!
- allegro封装库找不到了
- vue中src路径的写法
- 论文篇------交通常识
- 我的理想计算机英语小短文,我的理想职业英语作文(精选10篇)
- char ch= 中 什么意思java_在 Java 语言中定义了如下变量: char ch; 下列赋值语句正确的是_韩语初下答案_学小易找答案...