2015-11-06 28 views
1

我想在我的項目中使用Exoplayer(而不是Android的MediaPlayer)。但是,我有一個問題:獲取當前音頻會話的ID。使用傳統的MediaPlayer,通過調用getAudioSessionId很容易,但Exoplayer沒有任何相應的方法。任何人都幫助我?我如何從Exoplayer獲得一個audiosessionId?

回答

1
import com.google.android.exoplayer.util.PlayerControl; 

通過傳遞您的Exoplayer實例來實例化PlayerControl對象。並調用getAudioSessionId。

PlayerControl playerControl=new PlayerControl(Exoplayer.instance); 

int audioSessionId=playerControl.getAudioSessionId(); 

我想這就是你想要的。

+0

PlayerControl不支持這種方法,但我找到了解決方案。我使用Render類的AudioSessionId。 – hunghd

+0

Oooo ....如果你可以爲其他訪問者發佈一個簡單的實現示例會更好 –

1

這裏是代碼片段,我用來獲取音頻會話ID -

FrameworkSampleSource sampleSource = new FrameworkSampleSource(getApplicationContext(), builtUri, null); 
    MediaCodecAudioTrackRenderer audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource, MediaCodecSelector.DEFAULT){ 
     @Override 
     protected void onAudioSessionId(int audioSessionId) { 

      // do whatever u want to do with id. 
     } 
    }; 

    exoPlayer.prepare(audioRenderer); 
    exoPlayer.setPlayWhenReady(true); 
1

由於ExoPlayer2 MediaCodecAudioTrackRendererPlayerControl不能再用於獲取AudioSessionId。相反,你應該在你的exoPlayer實例上設置一個AudioRendererEventListener

exoPlayer.setAudioDebugListener(new AudioRendererEventListener(){ 

      @Override 
      public void onAudioEnabled(DecoderCounters counters) { 

      } 

      @Override 
      public void onAudioSessionId(int audioSessionId) { 
       //TODO Do something with your AudioSessionID here 
      } 

      @Override 
      public void onAudioDecoderInitialized(String decoderName, long initializedTimestampMs, long initializationDurationMs) { 

      } 

      @Override 
      public void onAudioInputFormatChanged(Format format) { 

      } 

      @Override 
      public void onAudioTrackUnderrun(int bufferSize, long bufferSizeMs, long elapsedSinceLastFeedMs) { 

      } 

      @Override 
      public void onAudioDisabled(DecoderCounters counters) { 

      } 
});