2017-01-25 5 views
1

Je me bats pour construire l'application de base avec ExoPlayer.Google ExoPlayer guide

+0

veuillez mentionner les difficultés que vous rencontrez lors de la mise en œuvre ExoPlayer – Mrinmoy

+0

bonjour, eh bien, j'ai un problème avec "partie de démarrage" partie. Je ne sais pas ce qu'il faut utiliser pour lire une vidéo ou un flux. comment arrêter, jouer, mettre en pause ... Un autre problème est que je ne sais pas ce que je fournis, par exemple, dans le constructeur 'DefaultDataSourceFactory', pourquoi, ce que je reçois avec et sans params ... Je suis jolie confondu avec l'utilisation entière ... s'il vous plaît aider! Merci! – hogar

+0

https://github.com/google/ExoPlayer, téléchargez l'application de démonstration de git, importez-la telle quelle. Exécutez l'exemple, explorez le code ... Et pendant l'exécution de l'application, si vous rencontrez un problème, n'hésitez pas à commenter ... !! – Mrinmoy

Répondre

14

Vous devez d'abord ajouter dans votre build.gradle
compilation 'com.google.android.exoplayer: exoplayer: r2.1.1'

1. Votre fichier de mise en page

<?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="match_parent" 
    android:layout_height="match_parent" 
    > 
    <com.google.android.exoplayer2.ui.SimpleExoPlayerView 
     android:id="@+id/player_view" 
     android:focusable="true" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"/> 
</RelativeLayout> 

2. Votre fichier de classe

public class ExoPlayerActivity extends AppCompatActivity implements ExoPlayer.EventListener { 
     SimpleExoPlayer player; 
     String path;  // it can be url of video for online streaming or a url of local video 

     @Override 
     protected void onCreate(@Nullable Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_exoplayer); 

      // set your path here 
      path=<your path>; 

      // 1. Create a default TrackSelector 
      BandwidthMeter bandwidthMeter = new DefaultBandwidthMeter(); 
      TrackSelection.Factory videoTrackSelectionFactory = 
        new AdaptiveVideoTrackSelection.Factory(bandwidthMeter); 
      TrackSelector trackSelector = 
        new DefaultTrackSelector(videoTrackSelectionFactory); 

      // 2. Create a default LoadControl 
      LoadControl loadControl = new DefaultLoadControl(); 
      // 3. Create the player 
      player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl); 

      SimpleExoPlayerView playerView = (SimpleExoPlayerView) findViewById(R.id.player_view); 
      playerView.setPlayer(player); 
      playerView.setKeepScreenOn(true); 
      // Produces DataSource instances through which media data is loaded. 
      DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(this, Util.getUserAgent(this, "ExoPlayer")); 

      // Produces Extractor instances for parsing the media data. 
      ExtractorsFactory extractorsFactory = new DefaultExtractorsFactory(); 

      // This is the MediaSource representing the media to be played. 
      MediaSource videoSource = new ExtractorMediaSource(Uri.parse(path), 
        dataSourceFactory, extractorsFactory, null, null); 
      // Prepare the player with the source. 
      player.addListener(this); 
      player.prepare(videoSource); 
      playerView.requestFocus(); 
      player.setPlayWhenReady(true);  // to play video when ready. Use false to pause a video 
     } 


     @Override 
     protected void onPause() { 
      super.onPause(); 
      if (player != null) { 
       player.setPlayWhenReady(false); //to pause a video because now our video player is not in focus 
      } 
     } 

     @Override 
     public void onTimelineChanged(Timeline timeline, Object manifest) { 

     } 

     @Override 
     public void onTracksChanged(TrackGroupArray trackGroups, TrackSelectionArray trackSelections) { 

     } 

     @Override 
     public void onLoadingChanged(boolean isLoading) { 

     } 

     @Override 
     public void onPlayerStateChanged(boolean playWhenReady, int playbackState) { 
      switch (playbackState) { 
       case ExoPlayer.STATE_BUFFERING: 
        //You can use progress dialog to show user that video is preparing or buffering so please wait 
        break; 
       case ExoPlayer.STATE_IDLE: 
        //idle state 
        break; 
       case ExoPlayer.STATE_READY: 
        // dismiss your dialog here because our video is ready to play now 
        break; 
       case ExoPlayer.STATE_ENDED: 
        // do your processing after ending of video 
        break; 
      } 
     } 

     @Override 
     public void onPlayerError(ExoPlaybackException error) { 
      // show user that something went wrong. I am showing dialog but you can use your way 
      AlertDialog.Builder adb = new AlertDialog.Builder(ExoPlayerActivity.this); 
      adb.setTitle("Could not able to stream video"); 
      adb.setMessage("It seems that something is going wrong.\nPlease try again."); 
      adb.setPositiveButton("OK", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
        finish(); // take out user from this activity. you can skip this 
       } 
      }); 
      AlertDialog ad = adb.create(); 
      ad.show(); 
     } 

     @Override 
     public void onPositionDiscontinuity() { 
      //Video is not streaming properly 
      Log.d("Mayur", "Discontinuity"); 
     } 

     @Override 
     protected void onDestroy() { 
      super.onDestroy(); 
      player.release(); //it is important to release a player 
     } 
    } 

Je pense que c'est assez pour les débutants. Gardez également à l'esprit que les composants audio et vidéo standard de cette bibliothèque reposent sur l'API MediaCodec d'Android, qui a été publiée dans Android 4.1 (niveau d'API 16). Donc, il ne fonctionnera pas sur Android 4.0 et ci-dessous.

+0

Merci beaucoup, c'est vraiment utile! :) – hogar

+2

Parfait, c'est exactement ce que j'ai cherché sur le web pendant plus d'une heure. J'étais sur le point d'abandonner. Cet exemple fonctionne comme un charme pour la vidéo et l'audio. Il suffit également d'ajouter dans le manifeste. – u2gilles

+0

Est-il possible d'utiliser 'Exoplayer' avec une surface vidéo personnalisée au lieu de' com.google.android.exoplayer2.ui.SimpleExoPlayerView' ma question https://stackoverflow.com/questions/48920678/explorer-comment- which-url-to-be-joué-avec-custom-video-view –