Video codec error in exoplayer version 2.18.5 in android 10
- Dominant language
- Java
- Stars
- 21.9k
- Forks
- 6k
- PR merge metrics
- No merged PRs in 30d
Description
### 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.(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
}`
Contributor guide
Assessment
This issue has not been assessed yet.