Видеоплеер Flutter: ошибка MediaCodecVideoRenderer на Android с ExoPlayerAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Видеоплеер Flutter: ошибка MediaCodecVideoRenderer на Android с ExoPlayer

Сообщение Anonymous »

Я столкнулся с проблемой с пакетом video_player Flutter при попытке воспроизвести видео на Android. Видеопроигрыватель не инициализируется из-за следующей ошибки:

Код: Выделить всё

PlatformException(VideoError, Video player had error androidx.media3.exoplayer.ExoPlaybackException: MediaCodecVideoRenderer error, index=0, format=Format(1, null, null, video/avc, avc1.64001F, -1, null, [1280, 720, 29.975233, ColorInfo(BT709, Limited range, SDR SMPTE 170M, false, 8bit Luma, 8bit Chroma)], [-1, -1]), format_supported=YES, null, null)
Полный стек ошибок:

Код: Выделить всё

Failed to initialize decoder: OMX.MTK.VIDEO.DECODER.AVC
W/MediaCodecRenderer( 1398):   java.lang.IllegalArgumentException: start failed
W/MediaCodecRenderer( 1398):       at android.media.MediaCodec.native_start(Native Method)
W/MediaCodecRenderer( 1398):       at android.media.MediaCodec.start(MediaCodec.java:2131)
W/MediaCodecRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.SynchronousMediaCodecAdapter$Factory.createAdapter(SynchronousMediaCodecAdapter.java:60)
W/MediaCodecRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.DefaultMediaCodecAdapterFactory.createAdapter(DefaultMediaCodecAdapterFactory.java:139)
W/MediaCodecRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:1225)
W/MediaCodecRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:1137)
W/MediaCodecRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.maybeInitCodecOrBypass(MediaCodecRenderer.java:588)
W/MediaCodecRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1602)
W/MediaCodecRenderer( 1398):       at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:1182)
W/MediaCodecRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.readSourceOmittingSampleData(MediaCodecRenderer.java:1042)
W/MediaCodecRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:860)
W/MediaCodecRenderer( 1398):       at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.render(MediaCodecVideoRenderer.java:1018)
W/MediaCodecRenderer( 1398):       at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1136)
W/MediaCodecRenderer( 1398):       at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:561)
W/MediaCodecRenderer( 1398):       at android.os.Handler.dispatchMessage(Handler.java:103)
W/MediaCodecRenderer( 1398):       at android.os.Looper.loop(Looper.java:264)
W/MediaCodecRenderer( 1398):       at android.os.HandlerThread.run(HandlerThread.java:67)
E/MediaCodecVideoRenderer( 1398): Video codec error
E/MediaCodecVideoRenderer( 1398):   androidx.media3.exoplayer.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.MTK.VIDEO.DECODER.AVC, Format(1, null, null, video/avc, avc1.64001F, -1, null, [1280, 720, 29.975233, ColorInfo(BT709, Limited range, SDR SMPTE 170M, false, 8bit Luma, 8bit Chroma)], [-1, -1])
E/MediaCodecVideoRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:1144)
E/MediaCodecVideoRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.maybeInitCodecOrBypass(MediaCodecRenderer.java:588)
E/MediaCodecVideoRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1602)
E/MediaCodecVideoRenderer( 1398):       at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:1182)
E/MediaCodecVideoRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.readSourceOmittingSampleData(MediaCodecRenderer.java:1042)
E/MediaCodecVideoRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:860)
E/MediaCodecVideoRenderer( 1398):       at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.render(MediaCodecVideoRenderer.java:1018)
E/MediaCodecVideoRenderer( 1398):       at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1136)
E/MediaCodecVideoRenderer( 1398):       at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:561)
E/MediaCodecVideoRenderer( 1398):       at android.os.Handler.dispatchMessage(Handler.java:103)
E/MediaCodecVideoRenderer( 1398):       at android.os.Looper.loop(Looper.java:264)
E/MediaCodecVideoRenderer( 1398):        at android.os.HandlerThread.run(HandlerThread.java:67)
E/MediaCodecVideoRenderer( 1398):   Caused by: java.lang.IllegalArgumentException: start failed
E/MediaCodecVideoRenderer( 1398):       at android.media.MediaCodec.native_start(Native Method)
E/MediaCodecVideoRenderer( 1398):       at android.media.MediaCodec.start(MediaCodec.java:2131)
E/MediaCodecVideoRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.SynchronousMediaCodecAdapter$Factory.createAdapter(SynchronousMediaCodecAdapter.java:60)
E/MediaCodecVideoRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.DefaultMediaCodecAdapterFactory.createAdapter(DefaultMediaCodecAdapterFactory.java:139)
E/MediaCodecVideoRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:1225)
E/MediaCodecVideoRenderer( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:1137)
E/MediaCodecVideoRenderer( 1398):       ... 11 more
E/ExoPlayerImplInternal( 1398): Playback error
E/ExoPlayerImplInternal( 1398):   androidx.media3.exoplayer.ExoPlaybackException: MediaCodecVideoRenderer error, index=0, format=Format(1, null, null, video/avc, avc1.64001F, -1, null, [1280, 720, 29.975233, ColorInfo(BT709, Limited range, SDR SMPTE 170M, false, 8bit Luma, 8bit Chroma)], [-1, -1]), format_supported=YES
E/ExoPlayerImplInternal( 1398):       at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:640)
E/ExoPlayerImplInternal( 1398):       at android.os.Handler.dispatchMessage(Handler.java:103)
E/ExoPlayerImplInternal( 1398):       at android.os.Looper.loop(Looper.java:264)
E/ExoPlayerImplInternal( 1398):       at android.os.HandlerThread.run(HandlerThread.java:67)
E/ExoPlayerImplInternal( 1398):   Caused by: androidx.media3.exoplayer.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.MTK.VIDEO.DECODER.AVC, Format(1, null, null, video/avc, avc1.64001F, -1, null, [1280, 720, 29.975233, ColorInfo(BT709, Limited range, SDR SMPTE 170M, false, 8bit Luma, 8bit Chroma)], [-1, -1])
E/ExoPlayerImplInternal( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:1144)
E/ExoPlayerImplInternal( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.maybeInitCodecOrBypass(MediaCodecRenderer.java:588)
E/ExoPlayerImplInternal( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1602)
E/ExoPlayerImplInternal( 1398):       at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:1182)
E/ExoPlayerImplInternal( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.readSourceOmittingSampleData(MediaCodecRenderer.java:1042)
E/ExoPlayerImplInternal( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:860)
E/ExoPlayerImplInternal( 1398):       at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.render(MediaCodecVideoRenderer.java:1018)
E/ExoPlayerImplInternal( 1398):       at androidx.media3.exoplayer.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:1136)
E/ExoPlayerImplInternal( 1398):       at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:561)
E/ExoPlayerImplInternal( 1398):       ... 3 more
E/ExoPlayerImplInternal( 1398):   Caused by: java.lang.IllegalArgumentException: start failed
E/ExoPlayerImplInternal( 1398):       at android.media.MediaCodec.native_start(Native Method)
E/ExoPlayerImplInternal( 1398):       at android.media.MediaCodec.start(MediaCodec.java:2131)
E/ExoPlayerImplInternal( 1398):       at androidx.media3.exoplayer.mediacodec.SynchronousMediaCodecAdapter$Factory.createAdapter(SynchronousMediaCodecAdapter.java:60)
E/ExoPlayerImplInternal( 1398):       at androidx.media3.exoplayer.mediacodec.DefaultMediaCodecAdapterFactory.createAdapter(DefaultMediaCodecAdapterFactory.java:139)
E/ExoPlayerImplInternal( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:1225)
E/ExoPlayerImplInternal( 1398):       at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:1137)
E/ExoPlayerImplInternal( 1398):       ... 11 more
Я подозреваю, что это как-то связано с тем, как видео декодируется MediaCodec на устройстве, особенно для H.264 (видео/avc). Эта ошибка указывает на проблему с кодеком или ограничение, специфичное для устройства.
Код:
Вот код, который я использую:

Код: Выделить всё

late VideoPlayerController _videoPlayerController;
bool isVideoInitialized = false;

@override
void initState() {
super.initState();
initializeVideoPlayer();
}

void initializeVideoPlayer() async {
try {
_videoPlayerController = VideoPlayerController.networkUrl(
Uri.parse("https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4"),
)
..initialize().then((_) {
setState(() {
isVideoInitialized = true;
});
}).onError((error, stackTrace) {
log("Error: $error, StackTrace: $stackTrace");
});
} catch (e, st) {
log("Error: $e, StackTrace: $st");
}
}

@override
void dispose() {
disposeVideoPlayer();
super.dispose();
}

disposeVideoPlayer() async {
await _videoPlayerController.dispose();
log("Video Player Disposed");
}
Среда:
  • Версия Flutter: 3.24.3
  • Пакет video_player: последняя версия.
  • Устройство Android: набор микросхем MediaTek.
Шаги I' Пробовал:
  • Протестировал разные URL-адреса видео.
  • Пробовал использовать формат HLS с VideoFormat.hls.
  • Удален formatHint, но проблема по-прежнему возникает.
Кто-нибудь сталкивался с подобной проблемой с MediaCodec на Android ? Будем признательны за любые решения и обходные пути!

Подробнее здесь: https://stackoverflow.com/questions/791 ... -exoplayer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»