Android中的音频播放使用的是MediaPlayer类,但是这个类没有提供视频画面的播放位置,所以这里视频的播放显得略有不同,大致分为两种播放方式:直接调用系统的VideoView播放视频或者利用Mediaplayer与SurfaceView的结合使用达到视频播放。

一:直接利用系统的VideoView实现的视频播放

(1)在主界面上拖拽一个VideoView控件

(2)在主Activity中完成以下操作:

◆声明VideoView控件及查找到ID

1
vv = (VideoView) findViewById(R.id.videoView1);

◆设置资源的路径,这里我们把视频放到了sdCard上,注意获得几乎所有手机sdCard路径的方式

1
2
//设置视频的路径
vv.setVideoURI(Uri.fromFile(newFile(Environment.getExternalStorageDirectory().getAbsoluteFile()+"/视频的播放路径及文件名")));

◆添加系统的控制器

1
2
//添加系统的控制器,能出现快进快退等控制条
vv.setMediaController(newMediaController(this));

◆调用start方法开始视频的播放

1
2
//开始播放视频
vv.start();

(3)结果:调用系统的VideoView完成视频的播放

二:将MediaPlayer与SurfaceView结合实现视频播放

1:SurfaceView

一般情况下,我们会把绘制图形等操作放在主UI中操作,这样主UI不仅要处理绘制操作,还要处理用户的其他单击操作等,这样未免显得过于臃肿。因此,对于SurfaceView的提出,就是把这样的一些耗时操作放到另外一个单独的线程中去完成的过程。

他提供了一个Surface,并可以通过控制器SurfaceHolder去控制Surface的操作。通过getHolder方法可以获得控制器对象。需要重写的几个方法如下

(1)surfaceCreated方法:当Surfaceview第一次创建的时候出发的方法,主要完成初始化的工作,一般不要在这里完成绘制操作。

(2)surfaceChanged方法:当Surface的状态发生变化时,触发的方法

(3)surfaceDestroyed方法:当Surface销毁前触发的状态,用于清理资源

2:视频的播放

(1)在主界面上拖拽一个surfaceview,下面摆放四个按钮,用来自己定义控制视频的播放

(2)获得控制器对象,设置相应的属性

1
2
//SurfaceView自己不管理缓冲区,让频幕渲染器引擎自动管理视频到用户面前
sv.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

(3)实例化MediaPlayer对象

1
mediaPlayer = newMediaPlayer();

(4)start操作的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
publicvoidstart() {
//重置
mediaPlayer.reset();
try{
// 设置视频资源
mediaPlayer.setDataSource(this, Uri.fromFile(newFile(Environment
.getExternalStorageDirectory().getAbsoluteFile()
+ "/视频路径及文件名后缀")));
// 设置视频显示的位置,这里是在surfaceView上
mediaPlayer.setDisplay(sv.getHolder());
// 准备资源
mediaPlayer.prepare();
// 启动视频
mediaPlayer.start();
} catch(IOException e) {
e.printStackTrace();
}
}

(5)stop操作的实现

1
mediaPlayer.stop();//停止视频

(6)pause操作的实现

1
2
3
4
5
6
// 视频是否在播放
if(mediaPlayer.isPlaying()) {
mediaPlayer.pause();// 是就停止
} else{
mediaPlayer.start();// 不是就开始
}

(7)setPosition操作的实现

1
mediaPlayer.seekTo(5000);// 跳到5000毫秒的位置,不论你现在在哪个位置上

(8)结果:实现了视频的播放

SurfaceView的用处远不在于此,还可以用于图形图像处理当中,我们明日再续。。不见不散

转载于:https://blog.51cto.com/cinderella7/1294850

Android视频播放相关推荐

  1. Android视频播放之VideoView

    Android视频播放之VideoView 1.VideoView类介绍 Android的VideoView组件可以从不同的来源(例如资源文件或内容提供器)读取图像,计算和维护视频的画面尺寸以使其适用 ...

  2. Android 视频播放器 (二):使用MediaPlayer播放视频

    在 Android 视频播放器 (一):使用VideoView播放视频 我们讲了一下如何使用VideoView播放视频,了解了基本的播放器的一些知识和内容.也知道VideoView内部封装的就是Med ...

  3. android播放视频来源库,一个强悍而优美的Android视频播放器

    最近项目中有需要用在线视频播放.之前有关于视频播放介绍了一些工具使用.如ijkplayer ,ExoPlayer,Vitamio,android-UniversalMusicPlayer. 想要了解更 ...

  4. android视频播放器 http 206,一个强悍而优美的Android视频播放器

    最近项目中有需要用在线视频播放.之前有关于视频播放介绍了一些工具使用.如ijkplayer ,ExoPlayer,Vitamio,android-UniversalMusicPlayer. 想要了解更 ...

  5. 一个强悍而优美的Android视频播放器

    最近项目中有需要用在线视频播放.之前有关于视频播放介绍了一些工具使用.如ijkplayer ,ExoPlayer,Vitamio,android-UniversalMusicPlayer. 想要了解更 ...

  6. Android视频播放器ExoPlayer

    Android视频播放器ExoPlayer SimpleExoPlayer 1. app gradle dependencies { implementation 'com.google.androi ...

  7. MediaPlayer+TextureView,完美切换全屏、小窗口的 Android 视频播放器

    NiceVieoPlayer 项目地址:xiaoyanger0825/NiceVieoPlayer  简介:MediaPlayer+TextureView,完美切换全屏.小窗口的 Android 视频 ...

  8. 基于ffmpeg+opengl+opensl es的android视频播放器

    最近做了一个android视频播放器,在jni中采用c/c++现了播放器的播放,暂停,快进等基本的播放器功能. 使用开源库FFMpeg来解码,得到音视频数据,FFMPEG是一个功能强大的音视频解码,编 ...

  9. 视频教程-FFmpeg+OpenGL ES+OpenSL ES打造Android视频播放器-Android

    FFmpeg+OpenGL ES+OpenSL ES打造Android视频播放器 从事Android移动端开发多年.主导开发过直播.电商.聊天等各种类型APP和游戏SDK:熟悉Android音视频开发 ...

  10. android视频播放器报告,android视频播放器实训报告.doc

    实训报告书 实训名称: Android视频播放器 系 (部): 专业班级: 学生姓名: 学 号: 指导教师: 完成日期: 实训课题Android视频播放器实训人姓名 同组人员实训日期 实训成绩指导教师 ...

最新文章

  1. Springboot中优雅进行字段校验
  2. Ubuntu9.10 安装试水
  3. Iris——整合Gorm持久化的Casbin的Example
  4. Spring--Resource
  5. SQL2005 数据库数据同步
  6. 只要300页!火遍全网的NET6+linux知识手册!拿走不谢!
  7. Confluence 6 使用 Decorator 宏
  8. 《java学习二》jvm性能优化-----认识jvm
  9. 一篇文章彻底弄懂Base64编码原理
  10. [Groovy]Groovy with Ant Task
  11. Average (区间最大均值,二分)
  12. 【NLP】Words Normalization+PorterStemmer源码解析
  13. 大学计算机实验教程实验报告2.2,大学计算机实验2实验报告.doc
  14. 网络工程计算机文科可以报考么,文科生可以报考网络工程专业吗
  15. Q2营收增长创下3年来最大涨幅,IBM这头大象要在云风口上跳舞?
  16. Java简单题-----计算一元二次方程的根
  17. 数字电路与逻辑设计笔记1
  18. Uber打车用户留存情况预测
  19. linux获取中括号内容,shell里使用正则表达式提取括号中的内容
  20. Simple Yet Effective Graph Contrastive Learning for Recommendation

热门文章

  1. 推荐很好用的Goroutine连接池
  2. React Native RSA加密
  3. BeanFactory和FactoryBean
  4. 微信开发——本地测试环境搭建
  5. Android 动态图文混排的常用方法
  6. 【转】Tomcat总体结构(Tomcat源代码阅读系列之二)
  7. 设计模式笔记(21)---备忘录模式(行为型)
  8. python3的soker模块实现功能
  9. Sonar - 部署常见问题及解决方法
  10. 模拟admin组件自己开发stark组件之创建篇