Package com.castlabs.android.player
Interface AudioTrackBufferSizeProvider
public interface AudioTrackBufferSizeProvider
Provides the buffer size to use when creating an
AudioTrack.-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic @interfaceRepresents an audio encoding, or an invalid value.static @interfaceOutput mode of the audio sink. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intAAC Enhanced Low Delay audio.static final intAAC Error Resilient Bit-Sliced Arithmetic Coding audio.static final intHigh-Efficiency AAC v1 audio.static final intHigh-Efficiency AAC v2 audio.static final intAAC Low Complexity audio.static final intExtended High-Efficiency AAC audio.static final intDolby Digital (AC-3) audio.static final intAC-4 audio.static final intDolby TrueHD audio.static final intDTS audio.static final intDTS-HD audio.static final intDTS-UHD Profile 2 audio.static final intDolby Digital Plus (E-AC-3) audio.static final intDolby Digital Plus with Joint Object Coding audio.static final intAn invalid audio encoding.static final intMPEG-1 or MPEG-2 Audio Layer III audio.static final intOpus audio.static final intLittle-endian 16-bit PCM audio.static final intBig-endian 16-bit PCM audio.static final intLittle-endian 24-bit PCM audio.static final intLittle-endian 32-bit PCM audio.static final int8-bit PCM audio.static final intFloating-point PCM audio.static final intThe audio sink plays encoded audio using offload.static final intThe audio sink plays encoded audio using passthrough.static final intThe audio sink plays PCM audio. -
Method Summary
Modifier and TypeMethodDescriptionintgetBufferSizeInBytes(int minBufferSizeInBytes, @com.castlabs.android.player.AudioTrackBufferSizeProvider.Encoding int encoding, @com.castlabs.android.player.AudioTrackBufferSizeProvider.OutputMode int outputMode, int pcmFrameSize, int sampleRate, int bitrate, double maxAudioTrackPlaybackSpeed) Returns the buffer size to use for a specific format and output mode.
-
Field Details
-
ENCODING_INVALID
static final int ENCODING_INVALIDAn invalid audio encoding.- See Also:
-
ENCODING_PCM_8BIT
static final int ENCODING_PCM_8BIT8-bit PCM audio.- See Also:
-
ENCODING_PCM_16BIT
static final int ENCODING_PCM_16BITLittle-endian 16-bit PCM audio.- See Also:
-
ENCODING_PCM_16BIT_BIG_ENDIAN
static final int ENCODING_PCM_16BIT_BIG_ENDIANBig-endian 16-bit PCM audio.- See Also:
-
ENCODING_PCM_24BIT
static final int ENCODING_PCM_24BITLittle-endian 24-bit PCM audio.- See Also:
-
ENCODING_PCM_32BIT
static final int ENCODING_PCM_32BITLittle-endian 32-bit PCM audio.- See Also:
-
ENCODING_PCM_FLOAT
static final int ENCODING_PCM_FLOATFloating-point PCM audio.- See Also:
-
ENCODING_MP3
static final int ENCODING_MP3MPEG-1 or MPEG-2 Audio Layer III audio.- See Also:
-
ENCODING_AAC_LC
static final int ENCODING_AAC_LCAAC Low Complexity audio.- See Also:
-
ENCODING_AAC_HE_V1
static final int ENCODING_AAC_HE_V1High-Efficiency AAC v1 audio.- See Also:
-
ENCODING_AAC_HE_V2
static final int ENCODING_AAC_HE_V2High-Efficiency AAC v2 audio.- See Also:
-
ENCODING_AAC_XHE
static final int ENCODING_AAC_XHEExtended High-Efficiency AAC audio.- See Also:
-
ENCODING_AAC_ELD
static final int ENCODING_AAC_ELDAAC Enhanced Low Delay audio.- See Also:
-
ENCODING_AAC_ER_BSAC
static final int ENCODING_AAC_ER_BSACAAC Error Resilient Bit-Sliced Arithmetic Coding audio.- See Also:
-
ENCODING_AC3
static final int ENCODING_AC3Dolby Digital (AC-3) audio.- See Also:
-
ENCODING_E_AC3
static final int ENCODING_E_AC3Dolby Digital Plus (E-AC-3) audio.- See Also:
-
ENCODING_E_AC3_JOC
static final int ENCODING_E_AC3_JOCDolby Digital Plus with Joint Object Coding audio.- See Also:
-
ENCODING_AC4
static final int ENCODING_AC4AC-4 audio.- See Also:
-
ENCODING_DTS
static final int ENCODING_DTSDTS audio.- See Also:
-
ENCODING_DTS_HD
static final int ENCODING_DTS_HDDTS-HD audio.- See Also:
-
ENCODING_DOLBY_TRUEHD
static final int ENCODING_DOLBY_TRUEHDDolby TrueHD audio.- See Also:
-
ENCODING_OPUS
static final int ENCODING_OPUSOpus audio.- See Also:
-
ENCODING_DTS_UHD_P2
static final int ENCODING_DTS_UHD_P2DTS-UHD Profile 2 audio.- See Also:
-
OUTPUT_MODE_PCM
static final int OUTPUT_MODE_PCMThe audio sink plays PCM audio.- See Also:
-
OUTPUT_MODE_OFFLOAD
static final int OUTPUT_MODE_OFFLOADThe audio sink plays encoded audio using offload.- See Also:
-
OUTPUT_MODE_PASSTHROUGH
static final int OUTPUT_MODE_PASSTHROUGHThe audio sink plays encoded audio using passthrough.- See Also:
-
-
Method Details
-
getBufferSizeInBytes
int getBufferSizeInBytes(int minBufferSizeInBytes, @com.castlabs.android.player.AudioTrackBufferSizeProvider.Encoding int encoding, @com.castlabs.android.player.AudioTrackBufferSizeProvider.OutputMode int outputMode, int pcmFrameSize, int sampleRate, int bitrate, double maxAudioTrackPlaybackSpeed) Returns the buffer size to use for a specific format and output mode.To convert a target buffer duration from milliseconds to bytes, use the PCM byte rate for PCM output:
long bufferSizeInBytes = targetBufferDurationMs * sampleRate * pcmFrameSize / 1_000L;For encoded output with a known bitrate, convert bits per second to bytes per second first:
long bytesPerSecond = (bitrate + 7L) / 8L; long bufferSizeInBytes = targetBufferDurationMs * bytesPerSecond / 1_000L;If the encoded bitrate is unknown, the duration cannot be converted exactly; use a conservative codec-specific maximum byte rate or fall back to
minBufferSizeInBytes. As in the default player calculation, an implementation can then scale the result bymaxAudioTrackPlaybackSpeed, take the maximum of that result andminBufferSizeInBytes, and round up to a multiple ofpcmFrameSize:
The calculations uselong speedAdjustedSize = (long) (bufferSizeInBytes * maxAudioTrackPlaybackSpeed); long minimumSize = Math.max(minBufferSizeInBytes, speedAdjustedSize); long alignedSize = (minimumSize + pcmFrameSize - 1) / pcmFrameSize * pcmFrameSize; if (alignedSize > Integer.MAX_VALUE) { throw new IllegalArgumentException("Audio buffer size is too large"); } return (int) alignedSize;longto avoid overflow during multiplication. The final value is checked and converted toint, as required by the AndroidAudioTrackAPIs.- Parameters:
minBufferSizeInBytes- The platform-reported minimum buffer size, in bytes, required to create anAudioTrackfor this sample rate, channel configuration, and encoding in streaming mode. This is the value returned byAudioTrack.getMinBufferSize(int, int, int). The returned buffer size must not be smaller than this value.encoding- The encoding of the format.outputMode- How the audio will be played.pcmFrameSize- The PCM frame size in bytes, or1for encoded audio.sampleRate- The sample rate in Hz.bitrate- The compressed stream bitrate, or-1when unknown or not applicable.maxAudioTrackPlaybackSpeed- The maximum playback speed used by the audio track.- Returns:
- The buffer size in bytes. It must be at least
minBufferSizeInBytesand contain an integer number of PCM frames.
-