如何从Exoplayer获取音频会话ID?

3

我正在尝试在我的项目中使用Exoplayer(而不是Android的MediaPlayer)。然而,我有一个问题:如何获取当前音频会话的ID。使用传统的MediaPlayer很容易通过调用getAudioSessionId方法解决,但是Exoplayer没有相应的方法。有人可以帮助我吗?

5个回答

5

从 ExoPlayer2 开始,MediaCodecAudioTrackRendererPlayerControl 不能再用于获取 AudioSessionId。相反,您应该在您的 exoPlayer 实例上设置一个 AudioRendererEventListener


编辑:

AudioRendererEventListener 现已弃用。请改用 AnalyticsListener

exoplayer.addAnalyticsListener(new AnalyticsListener() {
    /**
     * Called when the audio session id is set.
     *
     * @param eventTime      The event time.
     * @param audioSessionId The audio session id.
     */
    @Override
    public void onAudioSessionId(EventTime eventTime, int audioSessionId) {
         // do something with audioSessionId
    }
});

4
Player.AudioComponent audioComponent = exoPlayer.getAudioComponent();
int audioSessionid=audioComponent.getAudioSessionId();

我在 Github 上修改了 ExoPlayer。


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

通过传递您的Exoplayer实例来实例化PlayerControl对象,并调用getAudioSessionId。

PlayerControl playerControl=new PlayerControl(Exoplayer.instance);

int audioSessionId=playerControl.getAudioSessionId();

我想这就是你想要的。

PlayerControl不支持这种方法,但我找到了解决方案。我使用Render类的onAudioSessionId方法。 - hunghd
哦哦哦...如果您能为其他访问者发布一个简单的实现示例,那就更好了。 - Sandeep Rana

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);

0
所有答案中最简单的是:

int audioSessionId = exoPlayer.getAudioSessionId();

这将返回当前正在播放媒体的音频会话ID。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接