Pourquoi VideoView dans Android prend-il trop de temps pour charger et lire la vidéo à partir du lien http?

Voici mon code:

package com.example.videoplayer; import android.app.Activity; import android.app.ProgressDialog; import android.media.MediaPlayer; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.widget.MediaController; import android.widget.VideoView; public class VideoPlayerActivity extends Activity { String TAG = "com.example.VideoPlayer"; ProgressDialog progDailog; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_video_player); final VideoView videoView = (VideoView) findViewById(R.id.videoView1); videoView.setVideoPath("http://www.ebookfrenzy.com/android_book/movie.mp4"); MediaController mediaController = new MediaController(this); mediaController.setAnchorView(videoView); videoView.setMediaController(mediaController); videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { progDailog.dismiss(); Log.i(TAG, "Duration = " + videoView.getDuration()); } }); videoView.start(); progDailog = ProgressDialog.show(this, "Please wait ...", "Retrieving data ...", `enter code here`true); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.video_player, menu); return true; } } 

  • Envoyer la demande de publication avec params en utilisant la rétrofit
  • Erreur ANRDispatchingTimedOut
  • Le zoom de pincement ne diminue pas sur la page de fragment suivant
  • Liste Afficher le défilement imbriqué sur l'API <21
  • Samsung Galaxy S6 Emulator dans Android studio
  • Conseils concernant le dessin haute performance dans Android
  • Supprimer le potentiel NullPointerException dans Android Studio
  • Comment analyser JSON à partir d'une HTTPResponse Java?
  • SSL Pinning utilisant Google Volley
  • Comment afficher Toast à partir d'un service après la fin de l'activité principale?
  • Développement de sites Web avec la même API que le mobile
  • InputType = PersonName?
  • 2 Solutions collect form web for “Pourquoi VideoView dans Android prend-il trop de temps pour charger et lire la vidéo à partir du lien http?”

    Regarde ça :

    Lire des vidéos http dans VideoView

    C'est mon code:

     public static void getVideoFromHttp(String urlPath) { try { // Start the MediaController MediaController mediacontroller = new MediaController(mContext); mediacontroller.setAnchorView(mVideoview); // Get the URL from String VideoURL Uri mVideo = Uri.parse(urlPath); mVideoview.setMediaController(mediacontroller); mVideoview.setVideoURI(mVideo); } catch (Exception e) { Log.e("Error", e.getMessage()); e.printStackTrace(); } mVideoview.requestFocus(); mVideoview.setOnPreparedListener(new OnPreparedListener() { // Close the progress bar and play the video public void onPrepared(MediaPlayer mp) { mVideoview.start(); } }); mVideoview.setOnCompletionListener(new OnCompletionListener() { public void onCompletion(MediaPlayer mp) { } }); } 

    Merci

    Ne faites pas tout dans le thread UI car il faut beaucoup de temps. Faites tout dans AsyncTask et tout ira bien.

    Pour les débutants, ce lien décrit comment pouvez-vous le faire dans AsyncTask .

    Définissez une classe qui étend le AsyncTask :

     public class BackgroundAsyncTask extends AsyncTask<String, Uri, Void> { Integer track = 0; ProgressDialog dialog; protected void onPreExecute() { dialog = new ProgressDialog(PlayVideo.this); dialog.setMessage("Loading, Please Wait..."); dialog.setCancelable(true); dialog.show(); } protected void onProgressUpdate(final Uri... uri) { try { media=new MediaController(PlayVideo.this); video.setMediaController(media); media.setPrevNextListeners(new View.OnClickListener() { @Override public void onClick(View v) { // next button clicked } }, new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); media.show(10000); video.setVideoURI(uri[0]); video.requestFocus(); video.setOnPreparedListener(new OnPreparedListener() { public void onPrepared(MediaPlayer arg0) { video.start(); dialog.dismiss(); } }); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected Void doInBackground(String... params) { try { Uri uri = Uri.parse(params[0]); publishProgress(uri); } catch (Exception e) { e.printStackTrace(); } return null; } } 

    Ensuite, dans la méthode onCreate() , appelez simplement la méthode execute() de BackgroundAsynchTask :

     video = (VideoView) findViewById(R.id.video); new BackgroundAsyncTask().execute("link-to-the-video"); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.