前提・実現したいこと
Flutterでmp4を再生したい。
Androidで画面が起動し、動画のビューが表示されるが、しばらくすると(5秒ほど)エラーが発生して動画のビューが非表示になる。また、再生ボタンを押しても同様の現象が起きる。(iOSでは特に起きない)
発生している問題・エラーメッセージ
D/CCodecBuffers( 7529): [c2.android.aac.decoder#823:1D-Input.Impl[N]] codec released a buffer owned by client (index 1) W/ConnectionTracker( 7529): Exception thrown while unbinding W/ConnectionTracker( 7529): java.lang.IllegalArgumentException: Service not registered: lm@a4094d2 W/ConnectionTracker( 7529): at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1757) W/ConnectionTracker( 7529): at android.app.ContextImpl.unbindService(ContextImpl.java:1874) W/ConnectionTracker( 7529): at android.content.ContextWrapper.unbindService(ContextWrapper.java:792) W/ConnectionTracker( 7529): at ce.b(:com.google.android.gms.dynamite_measurementdynamite@201817048@20.18.17 (040400-0):1) W/ConnectionTracker( 7529): at ce.a(:com.google.android.gms.dynamite_measurementdynamite@201817048@20.18.17 (040400-0):5) W/ConnectionTracker( 7529): at ln.A(:com.google.android.gms.dynamite_measurementdynamite@201817048@20.18.17 (040400-0):10) W/ConnectionTracker( 7529): at ky.a(:com.google.android.gms.dynamite_measurementdynamite@201817048@20.18.17 (040400-0):3) W/ConnectionTracker( 7529): at dy.run(:com.google.android.gms.dynamite_measurementdynamite@201817048@20.18.17 (040400-0):2) W/ConnectionTracker( 7529): at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:462) W/ConnectionTracker( 7529): at java.util.concurrent.FutureTask.run(FutureTask.java:266) W/ConnectionTracker( 7529): at iw.run(:com.google.android.gms.dynamite_measurementdynamite@201817048@20.18.17 (040400-0):15) D/BufferPoolAccessor2.0( 7529): bufferpool2 0xb4000074add32238 : 4(8388608 size) total buffers - 4(8388608 size) used buffers - 0/4 (recycle/alloc) - 6/23 (fetch/transfer) D/BufferPoolAccessor2.0( 7529): evictor expired: 1, evicted: 1 D/BufferPoolAccessor2.0( 7529): bufferpool2 0xb4000074add32b78 : 6(49152 size) total buffers - 5(40960 size) used buffers - 1/7 (recycle/alloc) - 6/26 (fetch/transfer) D/BufferPoolAccessor2.0( 7529): evictor expired: 1, evicted: 1 W/CCodec ( 7529): previous call to queue exceeded timeout E/MediaCodec( 7529): Codec reported err 0x80000000, actionCode 0, while in state 6 D/SurfaceUtils( 7529): disconnecting from surface 0xb40000754dd35010, reason disconnectFromSurface D/CCodecBufferChannel( 7529): [c2.android.avc.decoder#498] MediaCodec discarded an unknown buffer E/BufferQueueProducer( 7529): [SurfaceTexture-0-7529-0](id:1d6900000000,api:0,p:-1,c:7529) cancelBuffer: BufferQueue has no E/MediaCodecVideoRenderer( 7529): Video codec error E/MediaCodecVideoRenderer( 7529): java.lang.IllegalStateException E/MediaCodecVideoRenderer( 7529): at android.media.MediaCodec.native_dequeueInputBuffer(Native Method) E/MediaCodecVideoRenderer( 7529): at android.media.MediaCodec.dequeueInputBuffer(MediaCodec.java:2855) E/MediaCodecVideoRenderer( 7529): at com.google.android.exoplayer2.mediacodec.SynchronousMediaCodecAdapter.dequeueInputBufferIndex(SynchronousMediaCodecAdapter.java:93) E/MediaCodecVideoRenderer( 7529): at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.feedInputBuffer(MediaCodecRenderer.java:1209) E/MediaCodecVideoRenderer( 7529): at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:845) E/MediaCodecVideoRenderer( 7529): at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:945) E/MediaCodecVideoRenderer( 7529): at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:478) E/MediaCodecVideoRenderer( 7529): at android.os.Handler.dispatchMessage(Handler.java:102) E/MediaCodecVideoRenderer( 7529): at android.os.Looper.loop(Looper.java:223) E/MediaCodecVideoRenderer( 7529): at android.os.HandlerThread.run(HandlerThread.java:67) E/ExoPlayerImplInternal( 7529): Playback error E/ExoPlayerImplInternal( 7529): com.google.android.exoplayer2.ExoPlaybackException: MediaCodecVideoRenderer error, index=0, format=Format(1, null, null, video/avc, avc1.64001F, -1, null, [1280, 720, 29.975233], [-1, -1]), format_supported=YES E/ExoPlayerImplInternal( 7529): at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:555) E/ExoPlayerImplInternal( 7529): at android.os.Handler.dispatchMessage(Handler.java:102) E/ExoPlayerImplInternal( 7529): at android.os.Looper.loop(Looper.java:223) E/ExoPlayerImplInternal( 7529): at android.os.HandlerThread.run(HandlerThread.java:67) E/ExoPlayerImplInternal( 7529): Caused by: com.google.android.exoplayer2.video.MediaCodecVideoDecoderException: Decoder failed: c2.android.avc.decoder E/ExoPlayerImplInternal( 7529): at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.createDecoderException(MediaCodecVideoRenderer.java:1410) E/ExoPlayerImplInternal( 7529): at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:864) E/ExoPlayerImplInternal( 7529): at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:945) E/ExoPlayerImplInternal( 7529): at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:478) E/ExoPlayerImplInternal( 7529): ... 3 more E/ExoPlayerImplInternal( 7529): Caused by: java.lang.IllegalStateException E/ExoPlayerImplInternal( 7529): at android.media.MediaCodec.native_dequeueInputBuffer(Native Method) E/ExoPlayerImplInternal( 7529): at android.media.MediaCodec.dequeueInputBuffer(MediaCodec.java:2855) E/ExoPlayerImplInternal( 7529): at com.google.android.exoplayer2.mediacodec.SynchronousMediaCodecAdapter.dequeueInputBufferIndex(SynchronousMediaCodecAdapter.java:93) E/ExoPlayerImplInternal( 7529): at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.feedInputBuffer(MediaCodecRenderer.java:1209) E/ExoPlayerImplInternal( 7529): at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:845) E/ExoPlayerImplInternal( 7529): ... 5 more
該当のソースコード
コードは公式ドキュメントのSampleのコードをそのまま使っております。
https://pub.dev/packages/video_player#example
import 'package:video_player/video_player.dart'; import 'package:flutter/material.dart'; void main() => runApp(VideoApp()); class VideoApp extends StatefulWidget { @override _VideoAppState createState() => _VideoAppState(); } class _VideoAppState extends State<VideoApp> { VideoPlayerController _controller; @override void initState() { super.initState(); _controller = VideoPlayerController.network( 'https://flutter.github.io/assets-for-api-docs/assets/videos/bee.mp4') ..initialize().then((_) { // Ensure the first frame is shown after the video is initialized, even before the play button has been pressed. setState(() {}); }); } @override Widget build(BuildContext context) { return MaterialApp( title: 'Video Demo', home: Scaffold( body: Center( child: _controller.value.isInitialized ? AspectRatio( aspectRatio: _controller.value.aspectRatio, child: VideoPlayer(_controller), ) : Container(), ), floatingActionButton: FloatingActionButton( onPressed: () { setState(() { _controller.value.isPlaying ? _controller.pause() : _controller.play(); }); }, child: Icon( _controller.value.isPlaying ? Icons.pause : Icons.play_arrow, ), ), ), ); } @override void dispose() { super.dispose(); _controller.dispose(); } }
試したこと
エラーの内容で検索や、githubなどのissueを見たりしたが、これといった解決方法が見つからなかった。
補足情報(FW/ツールのバージョンなど)
動画の再生のライブラリはデファクト?「video_player」を使用している。
バージョンは最新のバージョン。
https://pub.dev/packages/video_player
確実ではないが、実機、エミュレータ共にAPIレベル30で発生している。
あなたの回答
tips
プレビュー