播放一段视频可以使用VideoView来播放
也可以使用SurfaceView或者继承SurfaceView来播放
package com.siyehuazhilian.view;
import com.siyehuazhilian.mysurfaceviewplayvideo.PlayVideoActivity;
import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Handler;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
public class PlayVideoSurfaceView extends SurfaceView implements Callback {
private SurfaceHolder holder;
// 播放视频的对象
private MediaPlayer mediaPlayer;
// 播放视频的路径
private String path;
private Handler handler;
public MediaPlayer getMediaPlayer() {
return mediaPlayer;
}
public void setMediaPlayer(MediaPlayer mediaPlayer) {
this.mediaPlayer = mediaPlayer;
}
public void setMessage(Handler handler) {
this.handler = handler;
}
public PlayVideoSurfaceView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
init();
}
public PlayVideoSurfaceView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public PlayVideoSurfaceView(Context context) {
super(context);
init();
}
/**
* 得到要播放的视频的路径
*
*/
public void setPath(String path) {
this.path = path;
}
/**
* 初始化
*/
private void init() {
holder = this.getHolder();
holder.addCallback(this);
mediaPlayer = new MediaPlayer();
}
/**
* 画画
*
*/
private void draw() {
// 播放视频
playVideo();
}
/**
* 播放视频
*/
private void playVideo() {
if (mediaPlayer == null) {
mediaPlayer = new MediaPlayer();
}
mediaPlayer.reset();
try {
mediaPlayer.setDataSource(path);
} catch (Exception e) {
e.printStackTrace();
}
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDisplay(holder);
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
// 如果准备完成,就播放
mediaPlayer.start();
handler.sendEmptyMessage(PlayVideoActivity.PLAYING);
}
});
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
draw();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
}