Android播放视频(二)
[java]package cn.c;import java.io.File;import android.app.Activity;import android.media.MediaPlayer;import android.media.MediaPlayer.OnCompletionListener;import android.media.MediaPlayer.OnErrorListener;import android.media.MediaPlayer.OnInfoListener;import android.media.MediaPlayer.OnPreparedListener;import android.media.MediaPlayer.OnSeekCompleteListener;import android.media.MediaPlayer.OnVideoSizeChangedListener;import android.os.Bundle;import android.os.Environment;import android.view.Display;import android.view.MotionEvent;import android.view.Su易做图ceHolder;import android.view.Su易做图ceView;import android.widget.LinearLayout;import android.widget.MediaController;import android.widget.MediaController.MediaPlayerControl;/*** 参考资料:http://www.embedu.org/Column/Column503.htm* 利用MidiaPlayer播放视频大致的流程:* 创建播放器对象-->设置需要播放的视频的来源-->* 对视频进行解码等准备工作-->开始播放-->(暂停/重启)停止播放* 对应这些流程,在MediaPlayer中都定义了相关方法;* 而且,在调用这些方法后,MediaPlayer可以进入不同的状态.* 这些方法和状态都很好理解,读者可以参照上图来了解.* 另外,因为在设置播放的视频的视频数据源之后,它需要对其进行解码(调用prepare()方法)* 这是一个比较耗时的操作,为了避免应用程序阻止,* 可以使用它的prepareAsync()方法配合OnPreparedListener易做图来让其异步操作.* 注意,只有MediaPlayer的准备工作做完后,才能开始播放* MediaPlayer本身不能显示视频内容,它只能控制视频的播放* 如果要使用MediaPlayer来播放视频,还需要配合Su易做图ceView来显示视频* 且将MediaPlayer中解码的视频数据在Su易做图ceView中播放,需要调用MediaPlayer中的setDisplay()* 它接受一个Su易做图ceHolder对象,可将我们用于* 播放视频的Su易做图ceView对应的Su易做图ceHolder对象作为参数* 这样,MediaPlayer和Su易做图ceView就建立起了关联.** MediaPlayer播放视频步骤* 1 设置MediaPlayer将要播放的视频* mMediaPlayer.setDataSource(path);* 2 设置MediaPlayer的视频输出界面* mMediaPlayer.setDisplay(mSu易做图ceHolder);* 3 MediaPlayer解码* mMediaPlayer.prepareAsync()且结合* public void onPrepared(MediaPlayer mediaPlayer)* 4 MediaPlayer开始播放* mediaPlayer.start();***/public class MainActivity extends Activity implementsOnCompletionListener,OnErrorListener,OnInfoListener,OnPreparedListener,OnSeekCompleteListener,OnVideoSizeChangedListener,Su易做图ceHolder.Callback,MediaPlayerControl{private Su易做图ceView mSu易做图ceView;private Su易做图ceHolder mSu易做图ceHolder;private MediaController mMediaController;private Display mDisplay;private MediaPlayer mMediaPlayer;int videoWidth=0;int videoHeight=0;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);mDisplay=getWindowManager().getDefaultDisplay();mSu易做图ceView=(Su易做图ceView) findViewById(R.id.su易做图ceView);mSu易做图ceHolder=mSu易做图ceView.getHolder();//Su易做图ceHolder是用于管理Su易做图ceView对象//那它是怎么做到管理的呢?即用mSu易做图ceHolder//添加回调即addCallback.//该类实现了Su易做图ceHolder.Callback接口,所以addCallback(this)//在Su易做图ceHolder.Callback接口中一共有三个方法来实现对于//Su易做图ceView对象的管理,即://su易做图ceCreated()//su易做图ceChanged()//su易做图ceDestroyed()//概况:Su易做图ceHolder主要作用是监控底层的情况mSu易做图ceHolder.addCallback(this);mSu易做图ceHolder.setType(Su易做图ceHolder.SURFACE_TYPE_PUSH_BUFFERS);mMediaPlayer=new MediaPlayer();mMediaPlayer.setOnCompletionListener(this);mMediaPlayer.setOnErrorListener(this);mMediaPlayer.setOnInfoListener(this);mMediaPlayer.setOnPreparedListener(this);mMediaPlayer.setOnSeekCompleteListener(this);mMediaPlayer.setOnVideoSizeChangedListener(this);String path=Environment.getExternalStorageDirectory().getPath()+File.separator+"Test_Movie.m4v";try {//设置MediaPlayer将要播放的视频mMediaPlayer.setDataSource(path);} catch (Exception e) {e.printStackTrace();finish();}mMediaController=new MediaController(MainActivity.this);}@Overridepublic boolean onTouchEvent(MotionEvent event) {if (mMediaController.isShowing()) {mMediaController.hide();} else {mMediaController.show();}return false;}//来自于Su易做图ceHolder.Callback接口//创建Su易做图ceView完成时,会调用该方法public void su易做图ceCreated(Su易做图ceHolder holder) {//设置MediaPlayer的视频输出界补充:移动开发 , Android ,
上一个:Android播放视频(三)
下一个:Android 日历开发教程