In Android, you can play a video in three ways:
1. Use its own player. Specify action as action_view, data as Uri, and type as its MIME type.
2. Use videoview for playback. In the layout file, use videoview and mediacontroller to control it.
3. Use the mediaplayer class and surfaceview. This method is flexible.
1. Call its own player:
Uri uri = Uri. parse (environment. getexternalstoragedirectory (). getpath () + "/test_movie.m4v"); // call the built-in player intent = new intent (intent. action_view); log. V ("URI:", Uri. tostring (); intent. setdataandtype (Uri, "Video/MP4"); startactivity (intent );
2. Use videoview to implement:
Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+"/Test_Movie.m4v"); VideoView videoView = (VideoView)this.findViewById(R.id.video_view); videoView.setMediaController(new MediaController(this)); videoView.setVideoURI(uri); videoView.start(); videoView.requestFocus();
3. Use mediaplayer:
Package demo. camera; import Java. io. ioexception; 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. medi Aplayer. onvideosizechangedlistener; import android. OS. bundle; import android. OS. environment; import android. util. log; import android. view. display; import android. view. surfaceholder; import android. view. surfaceview; import android. widget. linearlayout;/*** this instance uses mediaplayer for playback and surfaceview for implementation. ** here we implement listeners when many status changes in mediaplayer ** when mediaplayer is used, you can also use the mediacontroller class, but you need to implement mediacontroller. med The iacontroller interface * implements some control methods. ** Then, set controller. setmediaplayer (), setanchorview (), setenabled (), show (), and so on. Here we will not implement * @ author administrator **/public class videosurfacedemo extends activity implements oncompletionlistener, onerrorlistener, oninfolistener, onpreparedlistener, onseekcompletelistener, onvideosizechangedlistener, surfaceholder. callback {private display currdisplay; private surfaceview; private surfaceholder holder; private mediaplayer player; private int vwidth, vheight; // Private Boolean readytoplay = false; Public void oncreate (bundle savedinstancestate) {super. oncreate (savedinstancestate); this. setcontentview (R. layout. video_surface); surfaceview = (surfaceview) This. findviewbyid (R. id. video_surface); // Add callback listener holder = surfaceview to surfaceview. getholder (); holder. addcallback (this); // to play a video or use camera preview, We need to specify its buffer type holder. settype (surfaceholder. surface_type_push_buffers); // The mediaplayer object player = new mediaplayer (); player. setoncompletionlistener (this); player. setonerrorlistener (this); player. setoninfolistener (this); player. setonpreparedlistener (this); player. setonseekcompletelistener (this); player. setonvideosizechangedlistener (this); log. V ("begin:", "surfacedestroyed called"); // specify the path of the file to be played and initialize mediaplayer string datapath = environment. getexternalstoragedirectory (). getpath () + "/test_movie.m4v"; try {player. setdatasource (datapath); log. V ("next :::", "surfacedestroyed called");} catch (illegalargumentexception e) {e. printstacktrace ();} catch (illegalstateexception e) {e. printstacktrace ();} catch (ioexception e) {e. printstacktrace ();} // then, we obtain the current Display object currdisplay = This. getwindowmanager (). getdefadisplay display () ;}@ override public void surfacechanged (surfaceholder arg0, int arg1, int arg2, int arg3) {// trigger log when parameters such as surface size change. V ("Surface Change:", "surfacechanged called") ;}@ override public void surfacecreated (surfaceholder holder) {// called when the surface in surfaceview is created // here we specify mediaplayer to play the player in the current surface. setdisplay (holder); // After the Media Player container is specified, we can use prepare or prepareasync to prepare the player. prepareasync () ;}@ override public void surfacedestroyed (surfaceholder holder) {log. V ("surface destory:", "surfacedestroyed called") ;}@ override public void onvideosizechanged (mediaplayer arg0, int arg1, int arg2) {// triggered when the video size changes. // This method triggers a log at least once after the player source is set. V ("video size change", "onvideosizechanged called") ;}@ override public void onseekcomplete (mediaplayer arg0) {// log is triggered when the seek operation is completed. V ("Seek completion", "onseekcomplete called") ;}@ override public void onprepared (mediaplayer player) {// This method is triggered when prepare is complete, here we play the video // first obtain the video width and height vwidth = player. getvideowidth (); vheight = player. getvideoheight (); If (vwidth> currdisplay. getwidth () | vheight> currdisplay. getheight () {// if the video width or height exceeds the current screen size, scale float wratio = (float) vwidth/(float) currdisplay. getwidth (); float hratio = (float) vheight/(float) currdisplay. getheight (); // select a large one for scaling float ratio = math. max (wratio, hratio); vwidth = (INT) math. ceil (float) vwidth/ratio); vheight = (INT) math. ceil (float) vheight/ratio); // sets the surfaceview layout parameter surfaceview. setlayoutparams (New linearlayout. layoutparams (vwidth, vheight); // start playing the video player. start () ;}@ override public Boolean oninfo (mediaplayer player, int whatinfo, int extra) {// triggers the switch (whatinfo) when some specific information appears or warns) {Case mediaplayer. media_info_bad_interleaving: break; Case mediaplayer. media_info_metadata_update: break; Case mediaplayer. media_info_video_track_lagging: break; Case mediaplayer. media_info_not_seekable: break;} return false;} @ override public Boolean onerror (mediaplayer player, int whaterror, int extra) {log. V ("play error:", "onerror called"); Switch (whaterror) {Case mediaplayer. media_error_server_died: log. V ("play error:", "media_error_server_died"); break; Case mediaplayer. media_error_unknown: log. V ("play error:", "media_error_unknown"); break; default: break;} return false ;}@ override public void oncompletion (mediaplayer player) {// trigger the log when the mediaplayer playback is complete. V ("play over:", "oncomletion called"); this. finish ();}}