Android通过VideoView实现视频播放

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

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

 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 android:id="@+id/video_view" 8             android:layout_width="match_parent" 9             android:layout_height="match_parent"10             android:layout_centerInParent="true" />11 </LinearLayout>

VideoPlayer.java文件如下:

View Code

 1 package com.simon; 2  3 import android.app.Activity; 4 import android.media.MediaPlayer; 5 import android.net.Uri; 6 import android.os.Bundle; 7 import android.os.Environment; 8 import android.util.Log; 9 import android.widget.MediaController;10 import android.widget.VideoView;11 import android.content.pm.ActivityInfo;12 13 public class VideoPlayer extends Activity implements MediaPlayer.OnErrorListener,14         MediaPlayer.OnCompletionListener {15     public static final String TAG = "VideoPlayer";16     private VideoView mVideoView;17     private Uri mUri;18     private int mPositionWhenPaused = -1;19 20     private MediaController mMediaController;21 22     /** Called when the activity is first created. */23     @Override24     public void onCreate(Bundle savedInstanceState) {25         super.onCreate(savedInstanceState);26 27         setContentView(R.layout.main);28 29         //Set the screen to landscape.30         this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);31 32         mVideoView = (VideoView)findViewById(R.id.video_view);33 34         //Video file35         mUri = Uri.parse(Environment.getExternalStorageDirectory() + "/1.3gp");36 37         //Create media controller38         mMediaController = new MediaController(this);39         mVideoView.setMediaController(mMediaController);40     }41 42     public void onStart() {43         // Play Video44         mVideoView.setVideoURI(mUri);45         mVideoView.start();46 47         super.onStart();48     }49 50     public void onPause() {51         // Stop video when the activity is pause.52         mPositionWhenPaused = mVideoView.getCurrentPosition();53         mVideoView.stopPlayback();54         Log.d(TAG, "OnStop: mPositionWhenPaused = " + mPositionWhenPaused);55         Log.d(TAG, "OnStop: getDuration  = " + mVideoView.getDuration());56 57         super.onPause();58     }59 60     public void onResume() {61         // Resume video player62         if(mPositionWhenPaused >= 0) {63             mVideoView.seekTo(mPositionWhenPaused);64             mPositionWhenPaused = -1;65         }66 67         super.onResume();68     }69 70     public boolean onError(MediaPlayer player, int arg1, int arg2) {71         return false;72     }73 74     public void onCompletion(MediaPlayer mp) {75         this.finish();76     }77 }

本例中只是播放外存储器(一般是sd卡)上的1.3gp文件。在onCreate方法中创建了Media control,这个组件可以控制视频的播放,暂停,回复,seek等操作,不需要你实现。

1 mMediaController = new MediaController(this);2 mVideoView.setMediaController(mMediaController);

然后只需要调用VideoView类的setVideoURI设置播放文件,start方法开始播放即可。 为了节省系统资源,一般需要在Activity的onPause方法中,暂停视频的播放。因为Activity已经不在前台了。在Activity的onResume中恢复视频的播放,因为这是Activity又变成前台程序了。不清楚的朋友可以去查看Activity lifecycle。 你可以通过实现MediaPlayer.OnErrorListener来监听MediaPlayer上报的错误信息。实现MediaPlayer.OnCompletionListener接口,将会在Video播完的时候得到通知,本例只是简单的结束程序。 你可能注意到,我们没有管理MediaPalyer的各种状态,这些状态都让VideoView给封装了,并且,当VideoView创建的时候,MediaPalyer对象将会创建,当VideoView对象销毁的时候,MediaPlayer对象将会释放。这样基本可以傻瓜式的实现媒体播放器了,太Easy了吧。

时间: 2024-09-14 23:58:53

Android通过VideoView实现视频播放的相关文章

android之VideoView和视频播放View的扩展

1.概念及扩展 VideoView 是android 系统提供的一个媒体播放显示和控制的控件.其结构层次如下: 原型:VideoView extends SurfaceView implements MediaController.MediaPlayerControl 类结构: java.lang.Object ↳ android.view.View ↳ android.view.SurfaceView ↳ android.widget.VideoView 通过VideoView 的原型可知:如

Android下VideoView的研究

    VideoView继承自SurfaceView,实现了MediaController.MediaPlayerControl的接口.在android系统中的包名为android.widget.VideoView.     VideoView的主要功能是显示一个指定的视频文件.VideoView可以从多个地方载入图片(比如资源或者content provider中).     VideoView继承了Android.view.View类中的XML属性.常量.和field(我们常翻译成属性).

android 关于VideoView倍数播放的问题

问题描述 android 关于VideoView倍数播放的问题 VideoView播放视频能实现倍数播放吗? 好纠结啊!谁知道的 麻烦告知 解决方案 http://blog.csdn.net/sno_guo/article/details/7769887

Android使用VideoView播放网络视频

Android支持播放网络上的视频.在播放网络上的视频时,牵涉到视频流的传输,往往有两种协议,一种是HTTP,一种是RTSP.这 两种协议最大的不同是,HTTP协议,不支持实时流媒体的播放,而RTSP协议就支持. Android中自带的播放器,以及VideoView等都支持上述两种协议,因此,可以直接播放网络上的视频,唯一不同的就是URI. 代码如下: Java代码  package demo.camera;   import android.app.Activity;   import and

android开发-Android 如何实现在线视频播放器并缓存本地,下次没有联网的情况,可离线播放缓存

问题描述 Android 如何实现在线视频播放器并缓存本地,下次没有联网的情况,可离线播放缓存 Android 如何实现在线视频播放器并缓存本地,下次没有联网的情况,可离线播放缓存 解决方案 android中如何实现离线缓存android中如何实现离线缓存android中如何实现离线缓存 解决方案二: http://www.cnblogs.com/doorsky/p/3218043.html 你可以参考一下

Android使用VideoView播放本地视频和网络视频的方法_Android

1.效果展示 2.布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="matc

Android使用VideoView播放本地视频和网络视频的方法

1.效果展示 2.布局文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="matc

Android之SurfaceView实现视频播放

1.案例一 布局文件: <?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" androi

android使用videoview播放视频_Android

复制代码 代码如下: 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);   final VideoView