在Android中提供了一个VideoView播放视频,用于播放视频文件,要想使用VideoView组件播放视频,首先需要在布局文件中创建该组件,然后在Activity中获取该组件,并用 setVideoPath() 方法或 setVideoURI() 方法加载要播放的视频,最后调用VideoView组件的 start() 方法来播放视频。
MediaContraller组件用于通过图形控制界面来控制视频的播放.
/**
* //初始化
* playVideo=(VideoView)findViewById(R.id.video_view);
* MediaController mc=new MediaController(this);// 媒体控制器
* // MediaController与VideoView关联
* mc.setAnchorView(playVideo);
* // VideoView与MediaController关联
* playVideo.setMediaController(mc);
* //调用播放
* String path=new File(Environment.getExternalStorageDirectory(),
* "bhhd.mp4").getAbsolutePath();
* System.out.println("path:"+path);
* playVideo.setVideoPath(path);
* playVideo.start();
*/
public class VideoViewActivity extends AppCompatActivity implements View.OnClickListener {
VideoView videoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_view);
videoView = (VideoView) findViewById(R.id.video_view);
//设置视频播放路径
videoView.setVideoPath("/mnt/sdcard/Movies/an_xiang.mp4");
//设置播放控制器
videoView.setMediaController(new MediaController(this));
findViewById(R.id.btn_play).setOnClickListener(this);
findViewById(R.id.btn_pause).setOnClickListener(this);
findViewById(R.id.btn_stop).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_play:
videoView.start();
break;
case R.id.btn_pause:
videoView.pause();
break;
case R.id.btn_stop:
videoView.stopPlayback();
break;
}
}
}
结合 TextureView 定义视频播放器
需要监听 Surface 创建完毕时才可以播放
private void init() {
setSurfaceTextureListener(new SurfaceTextureListener() {
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
mSurface = new Surface(surface);
start();
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
stop();
return true;
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
});
}
MediaPlayer 需要使用 setSurface(Surface) 方法来设置画面显示的位置 , 如果时 SurfaceView 需要用 setDisplay(SurfaceHolder)
private void initPlayer() {
if (null == mPlayer) {
mPlayer = new MediaPlayer();
//设置准备监听
mPlayer.setOnPreparedListener(onPreparedListener);