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方法开始视频的播放对象
(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
|
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()
+
"/视频路径及文件名后缀"
)));
mediaPlayer.setDisplay(sv.getHolder());
mediaPlayer.prepare();
mediaPlayer.start();
}
catch
(IOException e) {
e.printStackTrace();
}
}
|
|
(5)stop操做的实现
(6)pause操做的实现
1
2
3
4
5
6
|
if
(mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
else
{
mediaPlayer.start();
}
|
|
(7)setPosition操做的实现
1
|
mediaPlayer.seekTo(
5000
);
|
|
(8)结果:实现了视频的播放
SurfaceView的用处远不在于此,还能够用于图形图像处理当中,咱们明日再续。。不见不散