videoview实现视频播放

  在其他的平台上面可能 VideoPlayer 开发是一个比较有挑战性的工作,但是在 Android 上面 VideoPlayer 的开发,本文简单对 VideoPlayer 的开发进行简单的介绍。在 Android 系统中,是通过 MediaPalyer 类播放媒体文件的(包括视频和音频)。虽然这个类已经比较简单了,但是还需要控制各种状态,对于视频还需要设置输出窗口,还是需要仔细研究的。为了避免这些麻烦事儿, Android 框架提供了 VideoView类 来封装 MediaPalyer ,这个 VideoView 类非常好用。 Android 自带的程序 Gallery 也是用 VideoView 实现的。本文以实例介绍怎样用 VideoView 来实现 VideoPlayer

       创建一个 VideoPlayer 的工程。 main.xml 文件如下:

Java代码:

  1. <?xml version="1.0" encoding="utf-8"?>


  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <VideoView 
  8. android:id="@+id/video_view"
  9. android:layout_width="match_parent"
  10. android:layout_height="match_parent"
  11. android:layout_centerInParent="true" />
  12. </LinearLayout>


        VideoPlayer.java 文件如下:

Java代码:
  1. package eoe.simon;

  2. import android.app.Activity;
  3. import android.media.MediaPlayer;
  4. import android.net.Uri;
  5. import android.os.Bundle;
  6. import android.os.Environment;
  7. import android.util.Log;
  8. import android.widget.MediaController;
  9. import android.widget.VideoView;
  10. import android.content.pm.ActivityInfo;

  11. public class VideoPlayer extends Activity implements MediaPlayer.OnErrorListener,
  12. MediaPlayer.OnCompletionListener {
  13. public static final String TAG = "VideoPlayer";
  14. private VideoView mVideoView;
  15. private Uri mUri;
  16. private int mPositionWhenPaused = -1;

  17. private MediaController mMediaController;

  18. /** Called when the activity is first created. */
  19. @Override
  20. public void onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);

  22. setContentView(R.layout.main);

  23. //设定屏幕来景观.
  24. this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

  25. mVideoView = (VideoView)findViewById(R.id.video_view);

  26. //视频文件
  27. mUri = Uri.parse(Environment.getExternalStorageDirectory() + "/1.3gp");

  28. //创造媒体控制器
  29. mMediaController = new MediaController(this);
  30. mVideoView.setMediaController(mMediaController);
  31. }

  32. public void onStart() {
  33. // 播放视频
  34. mVideoView.setVideoURI(mUri);
  35. mVideoView.start();

  36. super.onStart();
  37. }

  38. public void onPause() {
  39. // 在活动时是停止视频的停顿.
  40. mPositionWhenPaused = mVideoView.getCurrentPosition();
  41. mVideoView.stopPlayback();
  42. Log.d(TAG, "OnStop: mPositionWhenPaused = " + mPositionWhenPaused);
  43. Log.d(TAG, "OnStop: getDuration = " + mVideoView.getDuration());

  44. super.onPause();
  45. }

  46. public void onResume() {
  47. //恢复视频播放器
  48. if(mPositionWhenPaused >= 0) {
  49. mVideoView.seekTo(mPositionWhenPaused);
  50. mPositionWhenPaused = -1;
  51. }

  52. super.onResume();
  53. }

  54. public boolean onError(MediaPlayer player, int arg1, int arg2) {
  55. return false;
  56. }

  57. public void onCompletion(MediaPlayer mp) {
  58. this.finish();
  59. }
  60. }


       然后只需要调用 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值