diff --git a/demo/src/main/java/com/google/android/exoplayer2/demo/EventLogger.java b/demo/src/main/java/com/google/android/exoplayer2/demo/EventLogger.java index 433cc46e3b..7a6e68c169 100644 --- a/demo/src/main/java/com/google/android/exoplayer2/demo/EventLogger.java +++ b/demo/src/main/java/com/google/android/exoplayer2/demo/EventLogger.java @@ -149,6 +149,11 @@ public class EventLogger implements ExoPlayer.EventListener, SimpleExoPlayer.Deb Log.d(TAG, "audioEnabled [" + getSessionTimeString() + "]"); } + @Override + public void onAudioSessionId(int audioSessionId) { + Log.d(TAG, "audioSessionId [" + audioSessionId + "]"); + } + @Override public void onAudioDecoderInitialized(String decoderName, long elapsedRealtimeMs, long initializationDurationMs) { diff --git a/library/src/main/java/com/google/android/exoplayer2/AudioRendererEventListener.java b/library/src/main/java/com/google/android/exoplayer2/AudioRendererEventListener.java index 68c918e115..bb5d15c9bf 100644 --- a/library/src/main/java/com/google/android/exoplayer2/AudioRendererEventListener.java +++ b/library/src/main/java/com/google/android/exoplayer2/AudioRendererEventListener.java @@ -34,6 +34,13 @@ public interface AudioRendererEventListener { */ void onAudioEnabled(CodecCounters counters); + /** + * Invoked when the audio session is set. + * + * @param audioSessionId The audio session id. + */ + void onAudioSessionId(int audioSessionId); + /** * Invoked when a decoder is created. * @@ -142,6 +149,17 @@ public interface AudioRendererEventListener { } } + public void audioSessionId(final int audioSessionId) { + if (listener != null) { + handler.post(new Runnable() { + @Override + public void run() { + listener.onAudioSessionId(audioSessionId); + } + }); + } + } + } } diff --git a/library/src/main/java/com/google/android/exoplayer2/MediaCodecAudioRenderer.java b/library/src/main/java/com/google/android/exoplayer2/MediaCodecAudioRenderer.java index 1c76504c54..167a14a507 100644 --- a/library/src/main/java/com/google/android/exoplayer2/MediaCodecAudioRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer2/MediaCodecAudioRenderer.java @@ -338,6 +338,7 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media audioTrack.initialize(audioSessionId); } else { audioSessionId = audioTrack.initialize(); + eventDispatcher.audioSessionId(audioSessionId); onAudioSessionId(audioSessionId); } audioTrackHasData = false; diff --git a/library/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java b/library/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java index db7554b8e2..c7ecd107dd 100644 --- a/library/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java +++ b/library/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java @@ -16,6 +16,7 @@ package com.google.android.exoplayer2; import com.google.android.exoplayer2.audio.AudioCapabilities; +import com.google.android.exoplayer2.audio.AudioTrack; import com.google.android.exoplayer2.drm.DrmSessionManager; import com.google.android.exoplayer2.metadata.MetadataRenderer; import com.google.android.exoplayer2.metadata.id3.Id3Frame; @@ -62,6 +63,7 @@ public final class SimpleExoPlayer implements ExoPlayer { */ public interface DebugListener { void onAudioEnabled(CodecCounters counters); + void onAudioSessionId(int audioSessionId); void onAudioDecoderInitialized(String decoderName, long elapsedRealtimeMs, long initializationDurationMs); void onAudioFormatChanged(Format format); @@ -109,6 +111,7 @@ public final class SimpleExoPlayer implements ExoPlayer { private DebugListener debugListener; private CodecCounters videoCodecCounters; private CodecCounters audioCodecCounters; + private int audioSessionId; /* package */ SimpleExoPlayer(Context context, TrackSelector trackSelector, LoadControl loadControl, DrmSessionManager drmSessionManager, @@ -143,6 +146,7 @@ public final class SimpleExoPlayer implements ExoPlayer { } this.videoRendererCount = videoRendererCount; this.audioRendererCount = audioRendererCount; + this.audioSessionId = AudioTrack.SESSION_ID_NOT_SET; // Build the player and associated objects. player = new ExoPlayerImpl(renderers, trackSelector, loadControl); @@ -244,6 +248,14 @@ public final class SimpleExoPlayer implements ExoPlayer { return audioFormat; } + /** + * @return The audio session identifier. If not set {@code AudioTrack.SESSION_ID_NOT_SET} is + * returned. + */ + public int getAudioSessionId() { + return audioSessionId; + } + /** * @return The {@link CodecCounters} for video, or null if there is no video component to the * current media. @@ -547,6 +559,14 @@ public final class SimpleExoPlayer implements ExoPlayer { } } + @Override + public void onAudioSessionId(int sessionId) { + audioSessionId = sessionId; + if (debugListener != null) { + debugListener.onAudioSessionId(sessionId); + } + } + @Override public void onAudioDecoderInitialized(String decoderName, long initializedTimestampMs, long initializationDurationMs) { @@ -579,6 +599,7 @@ public final class SimpleExoPlayer implements ExoPlayer { } audioFormat = null; audioCodecCounters = null; + audioSessionId = AudioTrack.SESSION_ID_NOT_SET; } // TextRendererOutput implementation diff --git a/library/src/main/java/com/google/android/exoplayer2/extensions/AudioDecoderRenderer.java b/library/src/main/java/com/google/android/exoplayer2/extensions/AudioDecoderRenderer.java index 8b360f4c73..d430edf2e9 100644 --- a/library/src/main/java/com/google/android/exoplayer2/extensions/AudioDecoderRenderer.java +++ b/library/src/main/java/com/google/android/exoplayer2/extensions/AudioDecoderRenderer.java @@ -189,6 +189,7 @@ public abstract class AudioDecoderRenderer extends Renderer implements MediaCloc audioTrack.initialize(audioSessionId); } else { audioSessionId = audioTrack.initialize(); + eventDispatcher.audioSessionId(audioSessionId); onAudioSessionId(audioSessionId); } audioTrackHasData = false; diff --git a/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/util/ExoHostedTest.java b/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/util/ExoHostedTest.java index cd8c47d5d4..5281579d31 100644 --- a/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/util/ExoHostedTest.java +++ b/playbacktests/src/main/java/com/google/android/exoplayer2/playbacktests/util/ExoHostedTest.java @@ -220,6 +220,11 @@ public abstract class ExoHostedTest implements HostedTest, ExoPlayer.EventListen Log.d(tag, "audioEnabled"); } + @Override + public void onAudioSessionId(int audioSessionId) { + Log.d(tag, "audioSessionId [" + audioSessionId + "]"); + } + @Override public void onAudioDecoderInitialized(String decoderName, long elapsedRealtimeMs, long initializationDurationMs) {