Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v10.0.0版本解析字幕报错 Legacy decoding is disabled #4045

Closed
ruoxuanFu opened this issue Nov 4, 2024 · 9 comments
Closed

v10.0.0版本解析字幕报错 Legacy decoding is disabled #4045

ruoxuanFu opened this issue Nov 4, 2024 · 9 comments

Comments

@ruoxuanFu
Copy link

ruoxuanFu commented Nov 4, 2024

问题描述:

v10.0.0版本解析字幕报错:

Caused by: java.lang.IllegalStateException: Legacy decoding is disabled, can't handle application/x-subrip samples (expected application/x-media3-cues).
    at androidx.media3.common.util.Assertions.checkState(Assertions.java:100)
    at androidx.media3.exoplayer.text.TextRenderer.assertLegacyDecodingEnabledIfRequired(TextRenderer.java:589)
    at androidx.media3.exoplayer.text.TextRenderer.onStreamChanged(TextRenderer.java:212)
    at androidx.media3.exoplayer.BaseRenderer.replaceStream(BaseRenderer.java:151)
    at androidx.media3.exoplayer.BaseRenderer.enable(BaseRenderer.java:125)
    at androidx.media3.exoplayer.ExoPlayerImplInternal.enableRenderer(ExoPlayerImplInternal.java:2773)
    at androidx.media3.exoplayer.ExoPlayerImplInternal.enableRenderers(ExoPlayerImplInternal.java:2747)
    at androidx.media3.exoplayer.ExoPlayerImplInternal.enableRenderers(ExoPlayerImplInternal.java:2728)
    at androidx.media3.exoplayer.ExoPlayerImplInternal.handlePeriodPrepared(ExoPlayerImplInternal.java:2525)
    at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:580)
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loopOnce(Looper.java:222) 
    at android.os.Looper.loop(Looper.java:314) 
    at android.os.HandlerThread.run(HandlerThread.java:67) 

问题机型/系统:

真机 红米k70E Android 14

GSY依赖版本

implementation "com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-java:v10.0.0"
implementation "com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-exo2:v10.0.0"
implementation "com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-arm64:v10.0.0"
implementation "com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-armv7a:v10.0.0"

Demo中的复现步骤

问题代码:

Format textFormat = new Format.Builder()
        .setSampleMimeType(MimeTypes.APPLICATION_SUBRIP)
        .setSelectionFlags(C.SELECTION_FLAG_FORCED)
        .setLanguage("en")
        .build();

这里setSampleMimeType换成

.setSampleMimeType(MimeTypes.APPLICATION_MEDIA3_CUES)

后报错:

androidx.media3.exoplayer.ExoPlaybackException: Unexpected runtime error
	at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:720)
	at android.os.Handler.dispatchMessage(Handler.java:102)
	at android.os.Looper.loopOnce(Looper.java:222)
	at android.os.Looper.loop(Looper.java:314)
	at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: java.lang.IllegalStateException: Bundle length is not aligned by 4: 808454705
	at android.os.BaseBundle.readFromParcelInner(BaseBundle.java:1881)
	at android.os.BaseBundle.<init>(BaseBundle.java:176)
	at android.os.Bundle.<init>(Bundle.java:103)
	at android.os.Parcel.readBundle(Parcel.java:3359)
	at androidx.media3.extractor.text.CueDecoder.decode(CueDecoder.java:63)
	at androidx.media3.exoplayer.text.TextRenderer.readAndDecodeCuesWithTiming(TextRenderer.java:336)
	at androidx.media3.exoplayer.text.TextRenderer.renderFromCuesWithTiming(TextRenderer.java:295)
	at androidx.media3.exoplayer.text.TextRenderer.render(TextRenderer.java:263)
	at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1136)
	at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:561)
	at android.os.Handler.dispatchMessage(Handler.java:102) 
	at android.os.Looper.loopOnce(Looper.java:222) 
	at android.os.Looper.loop(Looper.java:314) 
	at android.os.HandlerThread.run(HandlerThread.java:67) 

版本回退到v8.6.0-release-jitpack可以正常播放

@sky-chy
Copy link

sky-chy commented Nov 4, 2024

老哥,你用哪个仓库的包?我现在下载包都下不了,用了梯子也是失败的

CarGuo added a commit that referenced this issue Nov 4, 2024
@CarGuo
Copy link
Owner

CarGuo commented Nov 4, 2024

字幕问题 demo 测试正常,已提交 demo 修改

依赖如下所示:

implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer:v10.0.0'

image

image

@ruoxuanFu
Copy link
Author

ruoxuanFu commented Nov 4, 2024

[指定了MimeTypes.APPLICATION_MEDIA3_CUES,还是不行]
我这边指定的字幕是en
setLanguage("en")
否则拿不到字幕

我尝试把srt文件转换为vtt文件,依旧报错
androidx.media3.exoplayer.ExoPlaybackException: Unexpected runtime error at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:720) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loopOnce(Looper.java:222) at android.os.Looper.loop(Looper.java:314) at android.os.HandlerThread.run(HandlerThread.java:67) Caused by: java.lang.IllegalStateException: Bundle length is not aligned by 4: 1447183703 at android.os.BaseBundle.readFromParcelInner(BaseBundle.java:1881) at android.os.BaseBundle.<init>(BaseBundle.java:176) at android.os.Bundle.<init>(Bundle.java:103) at android.os.Parcel.readBundle(Parcel.java:3359) at androidx.media3.extractor.text.CueDecoder.decode(CueDecoder.java:63) at androidx.media3.exoplayer.text.TextRenderer.readAndDecodeCuesWithTiming(TextRenderer.java:336) at androidx.media3.exoplayer.text.TextRenderer.renderFromCuesWithTiming(TextRenderer.java:295) at androidx.media3.exoplayer.text.TextRenderer.render(TextRenderer.java:263) at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1136) at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:561) at android.os.Handler.dispatchMessage(Handler.java:102)  at android.os.Looper.loopOnce(Looper.java:222)  at android.os.Looper.loop(Looper.java:314)  at android.os.HandlerThread.run(HandlerThread.java:67) 
看起来像是media3解析的问题

下面是srt和vtt文件
e76352408b4b4279ad376b7f66fdc701.vtt.txt
e76352408b4b4279ad376b7f66fdc701.srt.txt

@CarGuo
Copy link
Owner

CarGuo commented Nov 5, 2024

我这边用你的 srt 文件测试正常

image image

@ruoxuanFu
Copy link
Author

media3的1.3.0版本的TextRenderer类中legacyDecodingEnabled默认值是 true;
而在1.4.1中默认值是false,且experimentalSetLegacyDecodingEnabled方法被标记过时,导致后续断言不通过,只能解析有限格式字幕文件,我这边还是相同的问题

@ruoxuanFu
Copy link
Author

ruoxuanFu commented Nov 11, 2024

现在我的解决办法是继承DefaultRenderersFactory重写buildTextRenderers方法

@UnstableApi
public class MyRenderersFactory extends DefaultRenderersFactory {

    /**
     * @param context A {@link Context}.
     */
    public MyRenderersFactory(Context context) {
        super(context);
    }

    protected void buildTextRenderers(
            Context context,
            TextOutput output,
            Looper outputLooper,
            @ExtensionRendererMode int extensionRendererMode,
            ArrayList<Renderer> out) {
        TextRenderer textRenderer = new TextRenderer(output, outputLooper);
        textRenderer.experimentalSetLegacyDecodingEnabled(true);
        out.add(textRenderer);
    }
}

@CarGuo
Copy link
Owner

CarGuo commented Nov 12, 2024

androidx/media#1516

@CarGuo CarGuo closed this as completed Nov 12, 2024
@benwangdroid
Copy link

我这边用你的 srt 文件测试正常

image image

大佬 他的字幕文件根本没有你红字里面的那句啊

@CarGuo
Copy link
Owner

CarGuo commented Nov 20, 2024

@benwangdroid #4057

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants