Android里面使用MediaPlayer通过SurfaceView播放视频的示例

package com.example.test318;

import java.io.IOException;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.Canvas;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.View;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.Toast;

public class SView extends Activity {
	/**
	 * @path 本地播放的绝对路径
	 * @player 播放器
	 * @surface 播放舞台
	 * @surfaceHolder 播放通道
	 * @TAG 连续播放的标记
	 */
	private String path = "mnt/sdcard/Friend1.mp4";
	private MediaPlayer player;
	private SurfaceView surface;
	private SurfaceHolder surfaceHolder;
	private Button play, pause, stop;
	private int TAG = 1;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		/**
		 * 注:标题。全屏。横竖屏均可以在布局中静态注册
		 */
		requestWindowFeature(Window.FEATURE_NO_TITLE);// 设置无标题
		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);// 强制为横屏
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏
		setContentView(R.layout.activity_sufaceview);
		play = (Button) findViewById(R.id.btn_player);
		pause = (Button) findViewById(R.id.btn_pause);
		stop = (Button) findViewById(R.id.btn_stop);
		play.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if (!player.isPlaying()) {
					int msec = player.getCurrentPosition();
					player.seekTo(msec);
					player.start();
				}
			}
		});
		pause.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if (player.isPlaying()) {
					player.pause();
				} else {
					int msec = player.getCurrentPosition();
					player.seekTo(msec);
					player.start();
				}
			}
		});
		stop.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				player.pause();
				player.seekTo(0);
			}
		});
		surface = (SurfaceView) findViewById(R.id.sV);
		// surface.setMinimumHeight((int)
		// (getWindowManager().getDefaultDisplay().getHeight()*0.8));
		/**
		 * surfaceHolder的设置
		 */
		surfaceHolder = surface.getHolder();
		surfaceHolder.setFixedSize(100, 100);
		surfaceHolder.setType(surfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		surfaceHolder.addCallback(new Callback() {
			@Override
			public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
					int arg3) {
				// TODO Auto-generated method stub
			}

			@Override
			public void surfaceCreated(SurfaceHolder holder) {
				// TODO Auto-generated method stub
				play(TAG);
				player.setOnCompletionListener(new OnCompletionListener() {//setOnCompletionListener判断结束的函数

					@Override
					public void onCompletion(MediaPlayer mp) {
						// TODO Auto-generated method stub
						Toast.makeText(SView.this, "第" + TAG + "段视频结束",
								Toast.LENGTH_LONG).show();
						// player.seekTo(0);
						TAG++;
						playNext(TAG);
						/*
						 * if(TAG>7) { player.seekTo(0); }
						 */
					}
				});
			}

			@Override
			public void surfaceDestroyed(SurfaceHolder holder) {
				// TODO Auto-generated method stub
				if (player.isPlaying()) {
					player.stop();
				}
				player.release();
			}
	   });
	}

	public String getPath(int tag) {    //路径的获得
		switch (tag) {
		case 1:

			path = "mnt/sdcard/Friend1.mp4";
			break;
		case 2:
			path = "mnt/sdcard/Friend2.mp4";
			break;
		case 3:
			path = "mnt/sdcard/Friend3.mp4";
			break;
		case 4:
			path = "mnt/sdcard/Friend4.mp4";
			break;
		case 5:
			path = "mnt/sdcard/Friend5.mp4";
			break;
		case 6:
			path = "mnt/sdcard/Friend6.mp4";
			break;
		case 7:
			path = "mnt/sdcard/Friend7.mp4";
			break;
		default:
			return null;
		}
		return path;
	}

	public void play(int tag) {     //播放函数
		path = getPath(tag);
		player = new MediaPlayer();
		player.setAudioStreamType(AudioManager.STREAM_MUSIC);
		player.setDisplay(surfaceHolder);
		try {
			player.setDataSource(path);
			player.prepare();
			player.start();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public void playNext(int tag) {    //播放下一段视频的函数
		player.reset();
		path = getPath(tag);
		player.setDisplay(surfaceHolder);
		try {
			player.setDataSource(path);
			player.prepare();
			player.setAudioStreamType(AudioManager.STREAM_MUSIC);
			surfaceHolder.setFixedSize(player.getVideoWidth(),
					player.getVideoHeight());
			player.start();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值