Android视频播放

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

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

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

  (2)在主Activity中完成如下操做:
spa

  ◆声明VideoView控件及查找到ID线程

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

   ◆设置资源的路径,这里咱们把视频放到了sdCard上,注意得到几乎全部手机sdCard路径的方式code

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

   ◆添加系统的控制器视频

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

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

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

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

  二:将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 = new MediaPlayer();

  (4)start操做的实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void start() {
//重置
mediaPlayer.reset();
try {
// 设置视频资源
mediaPlayer.setDataSource( this , Uri.fromFile( new File(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的用处远不在于此,还能够用于图形图像处理当中,咱们明日再续。。不见不散

相关文章
相关标签/搜索