mirror of
https://github.com/androidx/media.git
synced 2025-05-10 00:59:51 +08:00
Add possibility to set the audio session id
Issue: #6975 PiperOrigin-RevId: 299328798
This commit is contained in:
parent
ab21f710bb
commit
c982f4c4a0
@ -19,6 +19,8 @@
|
|||||||
* Add `Player.onPlayWhenReadyChanged` with reasons.
|
* Add `Player.onPlayWhenReadyChanged` with reasons.
|
||||||
* Add `Player.onPlaybackStateChanged` and deprecate
|
* Add `Player.onPlaybackStateChanged` and deprecate
|
||||||
`Player.onPlayerStateChanged`.
|
`Player.onPlayerStateChanged`.
|
||||||
|
* Add `Player.setAudioSessionId` to set the session ID attached to the
|
||||||
|
`AudioTrack`.
|
||||||
* Deprecate and rename `getPlaybackError` to `getPlayerError` for
|
* Deprecate and rename `getPlaybackError` to `getPlayerError` for
|
||||||
consistency.
|
consistency.
|
||||||
* Deprecate and rename `onLoadingChanged` to `onIsLoadingChanged` for
|
* Deprecate and rename `onLoadingChanged` to `onIsLoadingChanged` for
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.google.android.exoplayer2;
|
package com.google.android.exoplayer2;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
import android.os.Looper;
|
import android.os.Looper;
|
||||||
import android.view.Surface;
|
import android.view.Surface;
|
||||||
import android.view.SurfaceHolder;
|
import android.view.SurfaceHolder;
|
||||||
@ -123,6 +124,18 @@ public interface Player {
|
|||||||
/** Returns the attributes for audio playback. */
|
/** Returns the attributes for audio playback. */
|
||||||
AudioAttributes getAudioAttributes();
|
AudioAttributes getAudioAttributes();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the ID of the audio session to attach to the underlying {@link
|
||||||
|
* android.media.AudioTrack}.
|
||||||
|
*
|
||||||
|
* <p>The audio session ID can be generated using {@link C#generateAudioSessionIdV21(Context)}
|
||||||
|
* for API 21+.
|
||||||
|
*
|
||||||
|
* @param audioSessionId The audio session ID, or {@link C#AUDIO_SESSION_ID_UNSET} if it should
|
||||||
|
* be generated by the framework.
|
||||||
|
*/
|
||||||
|
void setAudioSessionId(int audioSessionId);
|
||||||
|
|
||||||
/** Returns the audio session identifier, or {@link C#AUDIO_SESSION_ID_UNSET} if not set. */
|
/** Returns the audio session identifier, or {@link C#AUDIO_SESSION_ID_UNSET} if not set. */
|
||||||
int getAudioSessionId();
|
int getAudioSessionId();
|
||||||
|
|
||||||
|
@ -131,6 +131,12 @@ public interface Renderer extends PlayerMessage.Target {
|
|||||||
* telling whether to enable or disable skipping silences in the audio stream.
|
* telling whether to enable or disable skipping silences in the audio stream.
|
||||||
*/
|
*/
|
||||||
int MSG_SET_SKIP_SILENCE_ENABLED = 101;
|
int MSG_SET_SKIP_SILENCE_ENABLED = 101;
|
||||||
|
/**
|
||||||
|
* A type of a message that can be passed to an audio renderer via {@link
|
||||||
|
* ExoPlayer#createMessage(Target)}. The message payload should be an {@link Integer} instance
|
||||||
|
* representing the audio session ID that will be attached to the underlying audio track.
|
||||||
|
*/
|
||||||
|
int MSG_SET_AUDIO_SESSION_ID = 102;
|
||||||
/**
|
/**
|
||||||
* Applications or extensions may define custom {@code MSG_*} constants that can be passed to
|
* Applications or extensions may define custom {@code MSG_*} constants that can be passed to
|
||||||
* renderers. These custom constants must be greater than or equal to this value.
|
* renderers. These custom constants must be greater than or equal to this value.
|
||||||
|
@ -672,6 +672,21 @@ public class SimpleExoPlayer extends BasePlayer
|
|||||||
return audioAttributes;
|
return audioAttributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setAudioSessionId(int audioSessionId) {
|
||||||
|
verifyApplicationThread();
|
||||||
|
this.audioSessionId = audioSessionId;
|
||||||
|
for (Renderer renderer : renderers) {
|
||||||
|
if (renderer.getTrackType() == C.TRACK_TYPE_AUDIO) {
|
||||||
|
player
|
||||||
|
.createMessage(renderer)
|
||||||
|
.setType(Renderer.MSG_SET_AUDIO_SESSION_ID)
|
||||||
|
.setPayload(audioSessionId)
|
||||||
|
.send();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAudioSessionId() {
|
public int getAudioSessionId() {
|
||||||
return audioSessionId;
|
return audioSessionId;
|
||||||
|
@ -673,6 +673,9 @@ public class MediaCodecAudioRenderer extends MediaCodecRenderer implements Media
|
|||||||
case MSG_SET_SKIP_SILENCE_ENABLED:
|
case MSG_SET_SKIP_SILENCE_ENABLED:
|
||||||
audioSink.setSkipSilenceEnabled((Boolean) message);
|
audioSink.setSkipSilenceEnabled((Boolean) message);
|
||||||
break;
|
break;
|
||||||
|
case MSG_SET_AUDIO_SESSION_ID:
|
||||||
|
audioSink.setAudioSessionId((Integer) message);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
super.handleMessage(messageType, message);
|
super.handleMessage(messageType, message);
|
||||||
break;
|
break;
|
||||||
|
@ -564,6 +564,9 @@ public abstract class SimpleDecoderAudioRenderer extends BaseRenderer implements
|
|||||||
case MSG_SET_SKIP_SILENCE_ENABLED:
|
case MSG_SET_SKIP_SILENCE_ENABLED:
|
||||||
audioSink.setSkipSilenceEnabled((Boolean) message);
|
audioSink.setSkipSilenceEnabled((Boolean) message);
|
||||||
break;
|
break;
|
||||||
|
case MSG_SET_AUDIO_SESSION_ID:
|
||||||
|
audioSink.setAudioSessionId((Integer) message);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
super.handleMessage(messageType, message);
|
super.handleMessage(messageType, message);
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user