gpt4 book ai didi

android - 插屏广告后Exoplayer播放错误

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:14 25 4
gpt4 key购买 nike

我正在使用 ExoPlayer 播放视频并展示 Google AdMob 插页式广告。

广告消失后,无法播放视频并显示如下错误:

Playback error.com.google.android.exoplayer2.ExoPlaybackException
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.throwDecoderInitError(MediaCodecRenderer.java:441)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:428)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:920)
at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:503)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:557)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:193)
at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(1, null, video/avc, -1, null, [720, 420, -1.0], [-1, -1])
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:428)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:920)
at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:503)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:557)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:193)
at android.os.HandlerThread.run(HandlerThread.java:65)

我正在使用库:

implementation 'com.google.android.exoplayer:exoplayer:2.8.1'
implementation 'com.google.android.exoplayer:exoplayer-ui:2.8.1'

最佳答案

这个错误很难调试,但相对容易避免。

ExoPlayerGoogle 开发的库。显然 Google 在自己的产品中使用了它。 Google AdMob SDK 在其中使用了 ExoPlayer。更具体地说,它使用这个播放器来展示它的一些插页式广告,甚至是横幅广告。虽然在一般的应用程序屏幕上,它通常可以无缝运行,没有错误和错误(有少量错误)。

AdMob SDK 中使用相同的 ExoPlayer 播放器时,屏幕上的情况会有所不同。两个实例使用相同的资源——编解码器、渲染器等。因此设备必须提供这些资源。可能同时处于 Activity 状态的 ExoPlayer 实例的数量可能从 1(或者在旧的弱设备上什至可能为 0)到 10+ 不等 - 它与设备可以处理的最大硬件解码器数量相关。关于此的更多信息 here (ExoPlayer issue 273) .

此限制的可能解决方法是将 ExoPlayer 设置为使用软件解码器。但是,它可能会大大降低弱设备上的体验质量。如何创建软件解码器,您可以在 MediaCodecTrackRenderer.java 类中的 ExoPlayer 源代码中找到。

你的情况有点不同,因为你无法控制至少一个实例 - 所以我无法预测它是否会起作用。

无论哪种方式,我认为这个问题应该在架构上解决,而不是通过代码蛮力解决。

最简单的方法是在使用 ExoPlayer.release() 开始插播之前释放您的 ExoPlayer 实例,并仅在插播结束后再次初始化它.很高兴您在 AdMob SDK 中为插页式广告提供了所有需要的回调方法。您可以将播放时间存储在某处,以便从用户因广告中断而停止的地方继续播放。

对用户更友好的方法是不要用广告打断视频 - 在之前和之后展示它们。或者在视频中加入广告。但完全取决于您的 UI/UX 和货币化系统。

我知道这不完全是对您问题的回答,而是围绕主题的思考,但我希望它能以某种方式帮助您。

关于android - 插屏广告后Exoplayer播放错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56036849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com