Android之视频播放

Android内置的VideoView类可以快速制作一个系统播放器,VideoVies主要用来显示一个视频文件,我们先来看看VidewView类的一些基本方法。

               VideoView类的常用方法

 

getBufferPercentage                   得到缓冲的百分比
getCurrentPosition                      得到当前播放的位置
getDuration                                 得到视频文件的时间
isPlaying                                      是否正在播放
pause                                          暂停
resolveAdjustedSize                   调整视频显示大小
seekTo                                        指定播放位置
setMediaController                      设置播放控制模式(播放进度条)

setOnCompleteionListener         当媒体文件播放完成时出发时间

setOnErrorListener                     错误监听 
setVideoPath                              设置视频源路径
setVideoPath                              设置视频源地址
start                                            开始播放

有了这些方法,我们要播放一个视频文件就很简单了,首先在布局文件中创建VideoView布局,并且创建几个按钮来实现对视频的操作。当我们点击“装载”按钮时,将指定视频文件的饿路径,如下列代码所示:

/* 设置路径*/
videoView.setVideoPath("/sdcard/test.mp4");
/* 设置模式-播放进度条*/
videoView.setMediaController(new MediaController(Activity01.this));
videoView.requestFocus();

 装载之后便可以通过start,pause方法来播放和暂停,具体实现见代码清单:

package com.yarin.android.Examples_07_03;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.MediaController;
import android.widget.VideoView;

public class Activity01 extends Activity
{
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);

		setContentView(R.layout.main);

		/* 创建VideoView对象 */
		final VideoView videoView = (VideoView) findViewById(R.id.VideoView01);
		
		/* 操作播放的三个按钮 */
		Button PauseButton = (Button) this.findViewById(R.id.PauseButton);
		Button LoadButton = (Button) this.findViewById(R.id.LoadButton);
		Button PlayButton = (Button) this.findViewById(R.id.PlayButton);
		
		/* 装载按钮事件 */
		LoadButton.setOnClickListener(new OnClickListener() 
		{
			public void onClick(View arg0)
			{
				/* 设置路径 */
				videoView.setVideoPath("/sdcard/test.mp4");
				/* 设置模式-播放进度条 */
				videoView.setMediaController(new MediaController(Activity01.this));
				videoView.requestFocus();
			}
		});
		/* 播放按钮事件 */
		PlayButton.setOnClickListener(new OnClickListener() 
		{
			public void onClick(View arg0)
			{
				/* 开始播放 */
				videoView.start();
			}
		});
		/* 暂停按钮 */
		PauseButton.setOnClickListener(new OnClickListener() 
		{
			public void onClick(View arg0)
			{
				/* 暂停 */
				videoView.pause();
			}
		});
	}
}

扩展学习

   上面我们通过系统自带的VideoView播放了一个MP4视频文件,但是我们知道VideoView类实际上继承自SurfaceView类,而且实现了MediaController.MediaPlayerControl接口。下面我们用SurfaceView来实现一个视频播放器。,当然需要通过SurfaceHolder来控制SurfaceView,因此需要通过getHolder方法来德奥SurfaceView的SurfaceHolder对象,具体代码如下:

 

    

package com.yarin.android.Examples_07_04;

import android.app.Activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class Activity01 extends Activity implements 
						OnBufferingUpdateListener, 
						OnCompletionListener, 
						MediaPlayer.OnPreparedListener, 
						SurfaceHolder.Callback
{
	private static final String	TAG	= "Activity01";
	private int					mVideoWidth;
	private int					mVideoHeight;
	private MediaPlayer			mMediaPlayer;
	private SurfaceView			mPreview;
	private SurfaceHolder		holder;
	private String				path;
	public void onCreate(Bundle icicle)
	{
		super.onCreate(icicle);
		setContentView(R.layout.main);
		mPreview = (SurfaceView) findViewById(R.id.surface);
		/* 得到SurfaceHolder对象 */
		holder = mPreview.getHolder();
		/* 设置回调函数 */
		holder.addCallback(this);
		/* 设置风格 */
		holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
	}
	private void playVideo()
	{
		try
		{
			path = "/sdcard/test.mp4";
			/* 构建MediaPlayer对象 */
			mMediaPlayer = new MediaPlayer();
			/* 设置媒体文件路径 */
			mMediaPlayer.setDataSource(path);
			/* 设置通过SurfaceView来显示画面 */
			mMediaPlayer.setDisplay(holder);
			/* 准备 */
			mMediaPlayer.prepare();
			/* 设置事件监听 */
			mMediaPlayer.setOnBufferingUpdateListener(this);
			mMediaPlayer.setOnCompletionListener(this);
			mMediaPlayer.setOnPreparedListener(this);
			mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
		}
		catch (Exception e)
		{
			Log.e(TAG, "error: " + e.getMessage(), e);
		}
	}
	public void onBufferingUpdate(MediaPlayer arg0, int percent)
	{
		Log.d(TAG, "onBufferingUpdate percent:" + percent);
	}
	public void onCompletion(MediaPlayer arg0)
	{
		Log.d(TAG, "onCompletion called");
	}
	public void onPrepared(MediaPlayer mediaplayer)
	{
		Log.d(TAG, "onPrepared called");
		mVideoWidth = mMediaPlayer.getVideoWidth();
		mVideoHeight = mMediaPlayer.getVideoHeight();
		if (mVideoWidth != 0 && mVideoHeight != 0)
		{
			/* 设置视频的宽度和高度 */
			holder.setFixedSize(mVideoWidth, mVideoHeight);
			/* 开始播放 */
			mMediaPlayer.start();
		}

	}
	/* 更改时出发的事件 */
	public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k)
	{
		Log.d(TAG, "surfaceChanged called");

	}
	/* 销毁 */
	public void surfaceDestroyed(SurfaceHolder surfaceholder)
	{
		Log.d(TAG, "surfaceDestroyed called");
	}
	/* 当SurfaceHolder创建时触发 */
	public void surfaceCreated(SurfaceHolder holder)
	{
		Log.d(TAG, "surfaceCreated called");
		playVideo();
	}
	/* 销毁 */
	@Override
	protected void onDestroy()
	{
		super.onDestroy();
		if (mMediaPlayer != null)
		{
			mMediaPlayer.release();
			mMediaPlayer = null;
		}

	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值