这是indexloc提供的服务,不要输入任何密码
Skip to content

Silence Skipping Audio Processor Exceptions #1352

@dabluck

Description

@dabluck

Version

Media3 1.3.1

More version details

This is still in 1.3.1. I believe it was either a new issue in 1.3 or it became much worse after 1.3

Devices that reproduce the issue

Android 14, several manufacturers

Devices that do not reproduce the issue

I attached firebase screenshot.

Reproducible in the demo app?

Not tested

Reproduction steps

This happens during playlist transitions. I see it in production data and reports from users. I've definitely had it happen but can't reproduce easily or 100%

Caused by java.lang.IllegalArgumentException: sizeToOutput is not aligned to frame size: 8466
       at androidx.media3.common.util.Assertions.checkArgument(Assertions.java:55)
       at androidx.media3.exoplayer.audio.SilenceSkippingAudioProcessor.outputSilence(SilenceSkippingAudioProcessor.java:632)
       at androidx.media3.exoplayer.audio.SilenceSkippingAudioProcessor.outputShortenedSilenceBuffer(SilenceSkippingAudioProcessor.java:471)
       at androidx.media3.exoplayer.audio.SilenceSkippingAudioProcessor.onQueueEndOfStream(SilenceSkippingAudioProcessor.java:302)
       at androidx.media3.common.audio.BaseAudioProcessor.queueEndOfStream(BaseAudioProcessor.java:68)
       at androidx.media3.common.audio.AudioProcessingPipeline.processData(AudioProcessingPipeline.java:327)
       at androidx.media3.common.audio.AudioProcessingPipeline.getOutput(AudioProcessingPipeline.java:229)
       at androidx.media3.exoplayer.audio.DefaultAudioSink.processBuffers(DefaultAudioSink.java:1110)
       at androidx.media3.exoplayer.audio.DefaultAudioSink.drainToEndOfStream(DefaultAudioSink.java:1139)
       at androidx.media3.exoplayer.audio.DefaultAudioSink.handleBuffer(DefaultAudioSink.java:890)
       at androidx.media3.exoplayer.audio.MediaCodecAudioRenderer.processOutputBuffer(MediaCodecAudioRenderer.java:743)
       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.drainOutputBuffer(MediaCodecRenderer.java:2010)
       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:827)
       at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1102)
       at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:541)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loopOnce(Looper.java:224)
       at android.os.Looper.loop(Looper.java:318)
       at android.os.HandlerThread.run(HandlerThread.java:67)

I get this exception in production sporadically, and it causes audio to stop playback. It only happens when transitioningg from
playlist item to another. Disabling the silence skipper resolves it, so I'm fairly positive that is the cause. Here is my RendererFactory


    override fun buildAudioSink(
        context: Context,
        enableFloatOutput: Boolean,
        enableAudioTrackPlaybackParams: Boolean,
    ): AudioSink? {
        val mySilenceSkippingProcessor = SilenceSkippingAudioProcessor(
                    DEFAULT_MINIMUM_SILENCE_DURATION_US * 2,
                    DEFAULT_PADDING_SILENCE_US * 5,
                    (DEFAULT_SILENCE_THRESHOLD_LEVEL / 2).toShort()
)

        val chain = DefaultAudioSink.DefaultAudioProcessorChain(
            emptyArray(),
            mySilenceSkippingProcessor,
            SonicAudioProcessor()
        )

        val sink = DefaultAudioSink.Builder(context)
            .setEnableFloatOutput(enableFloatOutput)
            .setAudioOffloadSupportProvider(DefaultAudioOffloadSupportProvider(context))
            .setEnableAudioTrackPlaybackParams(enableAudioTrackPlaybackParams)
            .setAudioProcessorChain(chain)
            .build()
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            sink.setOffloadMode(OFFLOAD_MODE_ENABLED_GAPLESS_NOT_REQUIRED)
        }
        return sink
    }


Only happens on Android 14
Screenshot 2024-05-07 at 10 10 08 PM

Expected result

Exception should not be thrown, and playlist transition should occur

Actual result

Exception is thrown and playback stops

Media

My app is a podcast app. I don't have a particular audio file

Bug Report

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions