Skip to content

Video codec error in exoplayer version 2.18.5 in android 10 #11158

@hafiz013

Description

@hafiz013

Bug

Below here details about this error :

Video codec error com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.bcm.vdec.avc, Format(2, null, null, video/avc, avc1.64001F, -1, null, [1280, 720, 24.0], [-1, -1]) at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:1013) at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecOrBypass(MediaCodecRenderer.java:537) at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1445) at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:917) at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readSourceOmittingSampleData(MediaCodecRenderer.java:946) at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:761) at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1007) at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:502) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.loop(Looper.java:214) at android.os.HandlerThread.run(HandlerThread.java:67) Caused by: android.media.MediaCodec$CodecException: Failed to initialize OMX.bcm.vdec.avc, error 0xfffffff4 at android.media.MediaCodec.native_setup(Native Method) at android.media.MediaCodec.<init>(MediaCodec.java:1865) at android.media.MediaCodec.createByCodecName(MediaCodec.java:1843) at com.google.android.exoplayer2.mediacodec.SynchronousMediaCodecAdapter$Factory.createCodec(SynchronousMediaCodecAdapter.java:74) at com.google.android.exoplayer2.mediacodec.SynchronousMediaCodecAdapter$Factory.createAdapter(SynchronousMediaCodecAdapter.java:49) at com.google.android.exoplayer2.mediacodec.DefaultMediaCodecAdapterFactory.createAdapter(DefaultMediaCodecAdapterFactory.java:113) at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:1091) at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:1002) at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecOrBypass(MediaCodecRenderer.java:537)  at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1445)  at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:917)  at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readSourceOmittingSampleData(MediaCodecRenderer.java:946)  at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:761)  at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1007)  at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:502)  at android.os.Handler.dispatchMessage(Handler.java:103)  at android.os.Looper.loop(Looper.java:214)  at android.os.HandlerThread.run(HandlerThread.java:67) 

below here sample that I use MediaCodecVideoRenderer to get type of render media code:

`
override fun buildVideoRenderers(
context: Context,
extensionRendererMode: Int, // @ExtensionRendererMode extensionRendererMode: Int,
mediaCodecSelector: MediaCodecSelector,
enableDecoderFallback: Boolean,
eventHandler: Handler,
eventListener: VideoRendererEventListener,
allowedVideoJoiningTimeMs: Long,
out: ArrayList
) {

    out.add(
        XaafMediaCodecVideoRenderer(
            context,
            MediaCodecSelector.DEFAULT,
            allowedVideoJoiningTimeMs,
            enableDecoderFallback,
            eventHandler,
            eventListener,
            MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY,
            playerDecoderUsedListener
        )
    )


    if (extensionRendererMode == EXTENSION_RENDERER_MODE_OFF) {
        return
    }

    var extensionRendererIndex = out.size
    if (extensionRendererMode == EXTENSION_RENDERER_MODE_PREFER) {
        extensionRendererIndex--
    }

    try {
        // Full class names used for constructor args so the LINT rule triggers if any of them move.
        // LINT.IfChange
        val clazz = Class.forName("com.google.android.exoplayer2.ext.vp9.LibvpxVideoRenderer")
        val constructor = clazz.getConstructor(
            Boolean::class.javaPrimitiveType,
            Long::class.javaPrimitiveType,
            android.os.Handler::class.java,
            com.google.android.exoplayer2.video.VideoRendererEventListener::class.java,
            Int::class.javaPrimitiveType
        )
        // LINT.ThenChange(../../../../../../../proguard-rules.txt)
        val renderer = constructor.newInstance(
            true,
            allowedVideoJoiningTimeMs,
            eventHandler,
            eventListener,
            MAX_DROPPED_VIDEO_FRAME_COUNT_TO_NOTIFY
        ) as Renderer
        out.add(extensionRendererIndex++, renderer)
        logI("Loaded LibvpxVideoRenderer")
    } catch (e: ClassNotFoundException) {
        // Expected if the app was built without the extension.
    } catch (e: Exception) {
        // The extension is present, but instantiation failed.
        throw RuntimeException("Error instantiating VP9 extension", e)
    }
}

override fun getDecoderInfos(
mediaCodecSelector: MediaCodecSelector,
format: Format,
requiresSecureDecoder: Boolean
): MutableList {
val all = super.getDecoderInfos(mediaCodecSelector, format, requiresSecureDecoder)
if (!context.packageManager.hasSystemFeature(AMAZON_FEATURE_FIRE_TV) && !requiresSecureDecoder) {
val googleDecoder = ArrayList()
for (info in all) {
if (info.name.contains("google") || info.name.contains("android")) {
googleDecoder.add(info)
}
}
val decoderListToUse = googleDecoder.takeIf { it.isNotEmpty() } ?: all
reportDecoderUsed(decoderListToUse)

        return decoderListToUse
    }
    reportDecoderUsed(all)
    return all
}`

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions