播放视频文件其实并不比播放音频文件复杂,主要是使用 VideoView类来实现的。
这个类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器。
VideoView的用法和 MediaPlayer 也比较类似(不同点在于播放视频需要UI控件,播放音乐只需要借助MediaPlayer对象)
VideoView其实就是SurfaceView的子类,内部做了封装,使用起来比较方便,但是灵活性没有SufraceView高
这里有一篇关于SurfaceView实现Android视频播放,具体见:SufraceView的用法
今天要讲的是利用Android自带的视频控件VideoView来实现视频的播放:
主XML文件如下:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<VideoView
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="@+id/videoView"
/>
<Button
android:id="@+id/button1"
android:layout_below="@id/videoView"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="播放"
/>
<Button
android:id="@+id/button2"
android:layout_below="@id/button1"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="暂停"
/>
<Button
android:id="@+id/button3"
android:layout_below="@id/button2"
android:layout_marginTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重播"
/>
</RelativeLayout>
主Activity文件如下:
package com.dsl.androiddemo_videoview01;
import android.media.MediaPlayer;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.VideoView;
/**
* 作者:单胜凌
* 时间:2016.10.11
* 功能:利用安卓自带控件VideoView实现本地视频的播放
*
* Android靠自学!
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private String TAG=MainActivity.class.getSimpleName();
private VideoView videoView;
private Button play,pause,repaly;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化控件
initView();
videoView.setMediaController(new android.widget.MediaController(this));
//设置视频播放路径为工程raw下的hello.mp4文件
videoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" +R.raw.hello));
//---------------------播放状态的监听--------------------------
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
Log.i(TAG,"准备完毕、可以播放");
}
});
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
Log.i(TAG,"播放完毕!");
}
});
videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.i(TAG,"播放失败!");
return false;
}
});
}
/**
* 初始化控件
*/
private void initView()
{
videoView=(VideoView)findViewById(R.id.videoView);
play = (Button)findViewById(R.id.button1);
pause = (Button)findViewById(R.id.button2);
repaly = (Button)findViewById(R.id.button3);
play.setOnClickListener(this);
pause.setOnClickListener(this);
repaly.setOnClickListener(this);
}
/**
* 按钮监听
* @param v
*/
@Override
public void onClick(View v) {
switch (v.getId())
{
case R.id.button1:
if(!videoView.isPlaying())
{
videoView.start();//开始播放
}
break;
case R.id.button2:
if(videoView.isPlaying())
{
videoView.pause();//暂停播放
}
break;
case R.id.button3:
if(videoView.isPlaying())
{
videoView.pause();//先暂停
videoView.stopPlayback();//停止播放、释放资源
videoView.setVideoURI(Uri.parse("android.resource://" + getPackageName() + "/" +R.raw.hello));//重新设置资源
videoView.start();//开始播放、
}
break;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if(videoView!=null)
videoView.suspend();
}
}
对于VideoView主要有一下常用用法:
VideoView,用于播放一段视频媒体,它继承了SurfaceView,位于"android.widget.VideoView",是一个视频控件。
int getCurrentPosition():获取当前播放的位置。
int getDuration():获取当前播放视频的总长度。
isPlaying():当前VideoView是否在播放视频。
void pause():暂停
void seekTo(int msec):从第几毫秒开始播放。
void resume():重新播放。
void setVideoPath(String path):以文件路径的方式设置VideoView播放的视频源。
void setVideoURI(Uri uri):以Uri的方式设置VideoView播放的视频源,可以是网络Uri或本地Uri。
void start():开始播放。
void stopPlayback():停止播放。并释放资源
setMediaController(MediaController controller):设置MediaController控制器。
setOnCompletionListener(MediaPlayer.onCompletionListener l):监听播放完成的事件。
setOnErrorListener(MediaPlayer.OnErrorListener l):监听播放发生错误时候的事件。
setOnPreparedListener(MediaPlayer.OnPreparedListener l):监听视频装载完成的事件。
另外需要注意,VideoView 并不是一个万能的视频播放工具类,它在视频格式的支持以及播放效率方面都存在着较大的不足。
所以,如果想要仅仅使用 VideoView就编写出一个功能非常强大的视频播放器是不太现实的。
但是如果只是用于播放一些游戏的片头动画,或者某个应用的视频宣传,使用 VideoView 还是绰绰有余的。
以上就是本Demo全部代码。
作者:单胜凌
IT靠自学!!!
源码下载地址:https://github.com/DSLAndroid/AndroidDemo_VideoView01点击打开链接
下载请注意:该Demo采用Android Studio开发