Three video playback methods for Android

Source: Internet
Author: User

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 ();}}

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.