我正在尝试在我的项目中使用Exoplayer(而不是Android的MediaPlayer)。然而,我有一个问题:如何获取当前音频会话的ID。使用传统的MediaPlayer很容易通过调用getAudioSessionId方法解决,但是Exoplayer没有相应的方法。有人可以帮助我吗?
从 ExoPlayer2 开始,MediaCodecAudioTrackRenderer
和 PlayerControl
不能再用于获取 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
}
});
Player.AudioComponent audioComponent = exoPlayer.getAudioComponent();
int audioSessionid=audioComponent.getAudioSessionId();
我在 Github 上修改了 ExoPlayer。
import com.google.android.exoplayer.util.PlayerControl;
通过传递您的Exoplayer实例来实例化PlayerControl对象,并调用getAudioSessionId。
PlayerControl playerControl=new PlayerControl(Exoplayer.instance);
int audioSessionId=playerControl.getAudioSessionId();
这是我用来获取音频会话 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);
int audioSessionId = exoPlayer.getAudioSessionId();
这将返回当前正在播放媒体的音频会话ID。