2015-11-06 185 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) { 

      } 
});