2017-01-25 6 views
1

私はExoPlayerで基本的なアプリケーションを構築するのに苦労しています。Google ExoPlayerガイド

+0

ExoPlayerを実装している間にあなたが直面している問題を親切に言及してください。 – Mrinmoy

+0

こんにちは、私は「始まり」の部分に問題があります。ビデオやストリームを再生するために何が必要かを知らないどのように停止、再生、一時停止する...もう一つの問題は、私は 'DefaultDataSourceFactory'コンストラクタで、私は何を取得しているといくつかのパラメータなしで何を提供しているのか分からないということです...私はかなりです全体の使用法と混乱しています...助けてください!ありがとう! – hogar

+0

https://github.com/google/ExoPlayer、デモアプリケーションをgitからダウンロードし、そのままインポートします。例を実行し、コードを調べてください。アプリケーションを実行しているときに問題が発生した場合は、自由にコメントしてください。 – Mrinmoy

答えて

14

あなたのbuild.gradle
コンパイル 'com.google.android.exoplayer:exoplayer:R2.1.1' でこれを追加する必要がまず

1.あなたのレイアウトファイル

<?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.あなたのクラスファイル

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 
     } 
    } 

初心者にはこれで十分だと思います。また、このライブラリの標準オーディオおよびビデオコンポーネントは、Android 4.1(APIレベル16)でリリースされたAndroidのMediaCodec APIに依存しています。 Android 4.0以降では動作しません。

+0

ありがとう、これは本当に役に立ちます! :) – hogar

+2

パーフェクト、それはまさに私が1時間以上ウェブ上で探していたものです。私はあきらめようとしていた。このサンプルは、ビデオとオーディオの両方の魅力のように機能します。マニフェストにを追加するだけです。 – u2gilles

+0

「com.google.android.exoplayer2.ui.SimpleExoPlayerView」の代わりにカスタムビデオサーフェスで「Exoplayer」を使用することは可能ですか?私の質問https://stackoverflow.com/questions/48920678/exoplayer-how-to-know-どのURLをカスタムビデオビューで再生するか –

関連する問題