Three types of video playback in Android

Source: Internet
Author: User

In Android, we have three ways to play the video:

1. Use the player that comes with it. Specifies that the action is action_view,data to Uri,type for its MIME type.

2, use Videoview to play. Use Videoview with Mediacontroller in the layout file to control it.

3, using MediaPlayer class and Surfaceview to achieve, this way is very flexible.

1. Call its own player:

    Uri uri = Uri.parse (Environment.getexternalstoragedirectory (). GetPath () + "/test_movie.m4v");       Call the system's own player          Intent Intent = new Intent (intent.action_view);          LOG.V ("URI:::::::: ()", uri.tostring ());          Intent.setdataandtype (URI, "Video/mp4");          StartActivity (Intent);  

2, using Videoview to achieve:

    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. Using 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.MediaPlayer.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 to complete playback, while the interface uses the Surfaceview to implement * * Here we implement many state changes in MediaPlayer * * Use MEDIAP      Layer, you can also use the Mediacontroller class, but you need to implement Mediacontroller.mediacontroller interface * To implement some control methods. * * Then, set Controller.setmediaplayer ()Anchorview (), setenabled (), show () on it, no longer implemented * @author Administrator * */public class Videosurfacedemo Extends Activity implements Oncompletionlistener,onerrorlistener,oninfolistener, Onpreparedlistener, Onseekcompl          etelistener,onvideosizechangedlistener,surfaceholder.callback{private Display Currdisplay;          Private Surfaceview 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.getholder () to Surfaceview;              Holder.addcallback (this); In order to play the video or use the camera preview, we need to specify its BUFFer type Holder.settype (surfaceholder.surface_type_push_buffers);              The following begins the instantiation of 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"); Then specify the path where the file needs to be played, initialize MediaPlayer String DataPath = Environment.getexternalstoragedirectory (). GetPath () + "/test_m              OVIE.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 get the current display object currdisplay = This.getwindowmanager (). Getdefaultdisplay ();              } @Override public void surfacechanged (Surfaceholder arg0, int arg1, int arg2, int arg3) {          Trigger LOG.V when parameters such as surface size change ("Surface changes:::", "surfacechanged called"); } @Override public void surfacecreated (Surfaceholder holder) {//when surface in Surfaceview is created              Time is called//here we specify MediaPlayer to play in the current surface player.setdisplay (holder);                        After specifying a container for MediaPlayer playback, we can use prepare or prepareasync to prepare to play the Player.prepareasync (); } @Override public void surfacedestroyed (Surfaceholder holder) {LOG.V ("Surfa          Ce destory::: "," surfacedestroyed called "); } @Override public void onvideosizechanged(MediaPlayer arg0, int arg1, int arg2) {///When the video size changes//This method triggers a log.v at least once after setting the player's source ("Video size Change", "onvide                        Osizechanged called "); The LOG is triggered @Override public void Onseekcomplete (MediaPlayer arg0) {//Seek operation completes.                        V ("Seek completion", "Onseekcomplete called");                            } @Override public void onprepared (MediaPlayer player) {//When the prepare is complete, the method triggers, where we play the video              First obtain the width and height of video vwidth = Player.getvideowidth ();                            Vheight = Player.getvideoheight (); if (Vwidth > currdisplay.getwidth () | | vheight > Currdisplay.getheight ()) {//If the width or height of the video exceeds the current screen size,                  You want to zoom float Wratio = (float) vwidth/(float) currdisplay.getwidth ();                                  float hratio = (float) vheight/(float) currdisplay.getheight ();  Select the large one to scale float ratio = Math.max (Wratio, hratio);                  Vwidth = (int) Math.ceil ((float) vwidth/ratio);                                    Vheight = (int) Math.ceil ((float) vheight/ratio);                                    Set the layout parameters of the Surfaceview surfaceview.setlayoutparams (new Linearlayout.layoutparams (Vwidth, vheight));              Then start playing video Player.start ();              }} @Override public boolean oninfo (MediaPlayer player, int whatinfo, int extra) {                  Trigger switch (whatinfo) {case mediaplayer.media_info_bad_interleaving when some specific information appears or warns:              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 ("P              Lay 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) {//when MediaPlayer playback is complete              LOG.V ("Play over:::", "oncomletion called");          This.finish ();   }      }

Three types of video playback in Android

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.