在其他的平台上面可能
VideoPlayer
开发是一个比较有挑战性的工作,但是在
Android
上面
VideoPlayer
的开发,本文简单对
VideoPlayer
的开发进行简单的介绍。在
Android
系统中,是通过
MediaPalyer
类播放媒体文件的(包括视频和音频)。虽然这个类已经比较简单了,但是还需要控制各种状态,对于视频还需要设置输出窗口,还是需要仔细研究的。为了避免这些麻烦事儿,
Android
框架提供了
VideoView类
来封装
MediaPalyer
,这个
VideoView
类非常好用。
Android
自带的程序
Gallery
也是用
VideoView
实现的。本文以实例介绍怎样用
VideoView
来实现
VideoPlayer
,
创建一个
VideoPlayer
的工程。
main.xml
文件如下:
Java代码:
-
- <?xml version="1.0" encoding="utf-8"?>
-
-
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <VideoView
- android:id="@+id/video_view"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_centerInParent="true" />
- </LinearLayout>
VideoPlayer.java
文件如下:
Java代码:
- package eoe.simon;
-
- import android.app.Activity;
- import android.media.MediaPlayer;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Environment;
- import android.util.Log;
- import android.widget.MediaController;
- import android.widget.VideoView;
- import android.content.pm.ActivityInfo;
-
- public class VideoPlayer extends Activity implements MediaPlayer.OnErrorListener,
- MediaPlayer.OnCompletionListener {
- public static final String TAG = "VideoPlayer";
- private VideoView mVideoView;
- private Uri mUri;
- private int mPositionWhenPaused = -1;
-
- private MediaController mMediaController;
-
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- setContentView(R.layout.main);
-
- //设定屏幕来景观.
- this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
-
- mVideoView = (VideoView)findViewById(R.id.video_view);
-
- //视频文件
- mUri = Uri.parse(Environment.getExternalStorageDirectory() + "/1.3gp");
-
- //创造媒体控制器
- mMediaController = new MediaController(this);
- mVideoView.setMediaController(mMediaController);
- }
-
- public void onStart() {
- // 播放视频
- mVideoView.setVideoURI(mUri);
- mVideoView.start();
-
- super.onStart();
- }
-
- public void onPause() {
- // 在活动时是停止视频的停顿.
- mPositionWhenPaused = mVideoView.getCurrentPosition();
- mVideoView.stopPlayback();
- Log.d(TAG, "OnStop: mPositionWhenPaused = " + mPositionWhenPaused);
- Log.d(TAG, "OnStop: getDuration = " + mVideoView.getDuration());
-
- super.onPause();
- }
-
- public void onResume() {
- //恢复视频播放器
- if(mPositionWhenPaused >= 0) {
- mVideoView.seekTo(mPositionWhenPaused);
- mPositionWhenPaused = -1;
- }
-
- super.onResume();
- }
-
- public boolean onError(MediaPlayer player, int arg1, int arg2) {
- return false;
- }
-
- public void onCompletion(MediaPlayer mp) {
- this.finish();
- }
- }
然后只需要调用
VideoView
类的
setVideoURI
设置播放文件,
start
方法开始播放即可。
为了节省系统资源,一般需要在
Activity
的
onPause
方法中,暂停视频的播放。因为
Activity
已经不在前台了。在
Activity
的
onResume
中恢复视频的播放,因为这是
Activity
又变成前台程序了。不清楚的朋友可以去查看
Activity lifecycle
。
你可以通过实现
MediaPlayer.OnErrorListener
来监听
MediaPlayer
上报的错误信息。实现
MediaPlayer.OnCompletionListener
接口,将会在
Video
播完的时候得到通知,本例只是简单的结束程序。
你可能注意到,我们没有管理MediaPalyer的各种状态,这些状态都让VideoView给封装了,并且,当VideoView创建的时候,MediaPalyer对象将会创建,当VideoView对象销毁的时候,MediaPlayer对象将会释放。太Easy了吧。
如果转载博文,请注明出处:http://www.eoeandroid.com/thread-68386-1-1.html