Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The video_player plugin fails to play videos after playing successfully 10-15 times #24565

Closed
Abgaryan opened this issue Nov 20, 2018 · 76 comments
Labels
c: crash Stack traces logged to the console customer: amplify e: device-specific Only manifests on certain devices engine flutter/engine repository. See also e: labels. p: video_player The Video Player plugin package flutter/packages repository. See also p: labels.

Comments

@Abgaryan
Copy link

Abgaryan commented Nov 20, 2018

Steps to Reproduce

Video player fails to load (both in Android and iOS) after it loads approximately 10-15 times successfully.I assume VideoPlayer instance in a native level gets corrupted.

Sequence of events:

  1. There is a pageView which has around 20 widgets which include VideoPlayer
  2. In the first 10-15 pages the video loads successfully, afterwards the video player fails to load any video (both in Android and iOS)

My custom VideoPlayer:

import 'dart:async';

import 'package:connectivity/connectivity.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:video_player/video_player.dart';

class CustomVideoPlayer extends StatefulWidget {
  final VideoPlayerController controller;
  final bool autoInitialize;
  final bool autoPlay;
  final Duration startAt;
  final bool looping;
  final bool showControls;
  final double aspectRatio;
  final Widget placeholder;

  CustomVideoPlayer(
    this.controller, {
    Key key,
    this.aspectRatio,
    this.autoInitialize = false,
    this.autoPlay = false,
    this.startAt,
    this.looping = false,
        this.placeholder = const Icon(
          FontAwesomeIcons.fileVideo,
          size: 36.0,
        ),
    this.showControls = true,
  })  : assert(controller != null, 'You must provide a controller to play a video'),
        super(key: key);

  @override
  State<StatefulWidget> createState() => _CustomVideoPlayerState();
}

class _CustomVideoPlayerState extends State<CustomVideoPlayer> {
  VideoPlayerController _controller;

  @override
  Widget build(BuildContext context) {
    return _PlayerWithControls(
      controller: _controller,
      aspectRatio: widget.aspectRatio ?? _calculateAspectRatio(context),
      placeholder: widget.placeholder,
      autoPlay: widget.autoPlay,
      showControls: widget.showControls,
    );
  }

  @override
  void initState() {
    super.initState();
    _controller = widget.controller;
    _initialize();
  }

  Future _initialize() async {
    await _controller.setLooping(widget.looping);

    if (widget.autoInitialize) {
      await _controller.initialize();
    }

    if (widget.autoPlay) {
      await _controller.play().catchError((dynamic error) => print('Video player  play error: $error'));
    } else {
      await _controller.pause().catchError((dynamic error) => print('Video player pause error: $error'));
    }

    if (widget.startAt != null) {
      await _controller.seekTo(widget.startAt);
    }
  }

  @override
  void didUpdateWidget(CustomVideoPlayer oldWidget) {
    super.didUpdateWidget(oldWidget);

    if (widget.controller.dataSource != _controller.dataSource) {
      _controller.dispose();
      _controller = widget.controller;
      _initialize();
    }
  }

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

  double _calculateAspectRatio(BuildContext context) {
    final size = MediaQuery.of(context).size;
    final width = size.width;
    final height = size.height;

    return width > height ? width / height : height / width;
  }
}

class _PlayerWithControls extends StatefulWidget {
  final VideoPlayerController controller;
  final Widget placeholder;
  final double aspectRatio;
  final bool autoPlay;
  final bool showControls;

  _PlayerWithControls({
    @required this.controller,
    @required this.aspectRatio,
    this.showControls = true,
    this.placeholder,
    this.autoPlay,
                        Key key,
  }) : super(key: key);

  @override
  State createState() => _VideoPlayerWithControlsState();
}

class _VideoPlayerWithControlsState extends State<_PlayerWithControls> {
  bool isLoadingFailed;

  @override
  void initState() {
    super.initState();
    isLoadingFailed = false;
    _registerControllerListeners();
  }

  void _registerControllerListeners() {
    widget.controller.addListener(_onPlay);
    widget.controller.addListener(_onFailed);
  }

  void _removeControllerListeners() {
    widget.controller.removeListener(_onPlay);
    widget.controller.removeListener(_onFailed);
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Container(
        width: MediaQuery.of(context).size.width,
        child: AspectRatio(
          aspectRatio: widget.aspectRatio,
          child: isLoadingFailed ? widget.placeholder : _buildPlayerWithControls(widget.controller, context),
        ),
      ),
    );
  }

  Container _buildPlayerWithControls(VideoPlayerController controller, BuildContext context) {
    return Container(
      child: Stack(
        children: <Widget>[
          Center(
            child: AspectRatio(
              aspectRatio: widget.aspectRatio,
              child: VideoPlayer(controller),
            ),
          ),
          _Controls(
            controller: controller,
            autoPlay: widget.autoPlay,
          ),
        ],
      ),
    );
  }

  @override
  void didUpdateWidget(_PlayerWithControls oldWidget) {
    super.didUpdateWidget(oldWidget);
    if (widget.controller.dataSource != oldWidget.controller.dataSource) {
      _registerControllerListeners();
    }
  }

  void _onPlay() {
    if (widget.controller.value.isPlaying) {
      setState(_removeControllerListeners);
    }
  }

  void _onFailed() {
    if (widget.controller.value.hasError) {
      print(
          "\n============= error start ================\n\n  custom video player error: ${widget.controller.value
              .errorDescription}\n\n controller ${widget.controller.toString()}\n\n=============== error end ================\n");
      setState(() {
        isLoadingFailed = true;
      });
    }
  }

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

class _Controls extends StatefulWidget {
  final VideoPlayerController controller;
  final bool autoPlay;

  _Controls({
    @required this.controller,
    @required this.autoPlay,
  });

  @override
  State<StatefulWidget> createState() => _ControlsState();
}

class _ControlsState extends State<_Controls> {
  VideoPlayerValue _latestValue;
  Stream<ConnectivityResult> _connectivityStream;
  bool _dragging = false;

  @override
  Widget build(BuildContext context) {
    return Column(children: <Widget>[
      _latestValue != null && !_latestValue.isPlaying && _latestValue.duration == null || _latestValue.isBuffering
          ? Expanded(
              child: Center(
                child: CircularProgressIndicator(),
              ),
            )
          : _buildHitArea(),
    ]);
  }

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

  void _dispose() {
    widget.controller.removeListener(_updateState);
  }

  @override
  void initState() {
    super.initState();
    _initialize();
    if (widget.controller.dataSourceType == DataSourceType.network) {
      _registerInternetConnectivityListener();
    }
  }

  void _registerInternetConnectivityListener() async {
    final connectivity = Connectivity();
    _connectivityStream = connectivity.onConnectivityChanged;
    _connectivityStream.listen((ConnectivityResult result) async {
      if (result != ConnectivityResult.none) {
        // if connectivity is back play video
        _play();
      } else if (widget.controller.value.isPlaying) {
        // if connectivity has gone pause video
        _pause();
      }
    });
  }

  @override
  void didUpdateWidget(_Controls oldWidget) {
    super.didUpdateWidget(oldWidget);
    if (widget.controller.dataSource != oldWidget.controller.dataSource) {
      _dispose();
      _initialize();
    }
  }

  Expanded _buildHitArea() {
    return Expanded(
      child: GestureDetector(
        onTap: _playPause,
        child: Container(
          color: Colors.transparent,
          child: Center(
            child: AnimatedOpacity(
              opacity: _latestValue != null && !_latestValue.isPlaying && !_dragging ? 1.0 : 0.0,
              duration: Duration(milliseconds: 300),
              child: GestureDetector(
                child: Container(child: Icon(FontAwesomeIcons.playCircle, color: Colors.white, size: 60.0)),
              ),
            ),
          ),
        ),
      ),
    );
  }

  Future<Null> _initialize() async {
    widget.controller.addListener(_updateState);

    _updateState();

    if ((widget.controller.value != null && widget.controller.value.isPlaying) || widget.autoPlay) {}
  }

  void _playPause() {
    if (widget.controller.value.isPlaying) {
      _pause();
    } else {
      _play();
    }
  }

  void _pause() {
    setState(() {
      widget.controller.pause();
    });
  }

  void _play() {
    setState(() {
      if (!widget.controller.value.initialized) {
        widget.controller.initialize().then((_) {
          widget.controller.play();
        }).catchError((dynamic error) => print('Video player error: $error'));
      } else {
        if (widget.controller.value.position >= widget.controller.value.duration) {
          widget.controller.seekTo(Duration(seconds: 0));
        }
        widget.controller.play();
      }
    });
  }

  void _updateState() {
    setState(() {
      _latestValue = widget.controller.value;
    });
  }
}

Logs

iOS:

errorDescription: Failed to load video: Dekodieren fehlgeschlagen

Android :

I/OMXClient( 9654): Treble IOmx obtained
W/ACodec  ( 9654): Allocating component 'OMX.qcom.video.decoder.avc' failed, try next one.
E/ACodec  ( 9654): Unable to instantiate codec 'OMX.qcom.video.decoder.avc' with err 0xfffffff4.
E/ACodec  ( 9654): signalError(omxError 0xfffffff4, internalError -12)
E/MediaCodec( 9654): Codec reported err 0xfffffff4, actionCode 0, while in state 1
W/MediaCodec-JNI( 9654): try to release MediaCodec from JMediaCodec::~JMediaCodec()...
W/MediaCodec-JNI( 9654): done releasing MediaCodec from JMediaCodec::~JMediaCodec().
E/ExoPlayerImplInternal( 9654): Playback error.
E/ExoPlayerImplInternal( 9654): com.google.android.exoplayer2.ExoPlaybackException
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.throwDecoderInitError(MediaCodecRenderer.java:441)
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:428)
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:920)
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:503)
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:557)
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518)
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301)
E/ExoPlayerImplInternal( 9654): 	at android.os.Handler.dispatchMessage(Handler.java:101)
E/ExoPlayerImplInternal( 9654): 	at android.os.Looper.loop(Looper.java:180)
E/ExoPlayerImplInternal( 9654): 	at android.os.HandlerThread.run(HandlerThread.java:65)
E/ExoPlayerImplInternal( 9654): Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(2, null, video/avc, -1, null, [640, 360, -1.0], [-1, -1])
E/ExoPlayerImplInternal( 9654): 	... 9 more
E/ExoPlayerImplInternal( 9654): Caused by: android.media.MediaCodec$CodecException: Failed to initialize OMX.qcom.video.decoder.avc, error 0xfffffff4
E/ExoPlayerImplInternal( 9654): 	at android.media.MediaCodec.native_setup(Native Method)
E/ExoPlayerImplInternal( 9654): 	at android.media.MediaCodec.<init>(MediaCodec.java:1796)
E/ExoPlayerImplInternal( 9654): 	at android.media.MediaCodec.createByCodecName(MediaCodec.java:1769)
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:415)
E/ExoPlayerImplInternal( 9654): 	... 8 more
I/OMXClient( 9654): Treble IOmx obtained
W/ACodec  ( 9654): Allocating component 'OMX.qcom.video.decoder.avc' failed, try next one.
E/ACodec  ( 9654): Unable to instantiate codec 'OMX.qcom.video.decoder.avc' with err 0xfffffff4.
E/ACodec  ( 9654): signalError(omxError 0xfffffff4, internalError -12)
E/MediaCodec( 9654): Codec reported err 0xfffffff4, actionCode 0, while in state 1
W/MediaCodec-JNI( 9654): try to release MediaCodec from JMediaCodec::~JMediaCodec()...
W/MediaCodec-JNI( 9654): done releasing MediaCodec from JMediaCodec::~JMediaCodec().
E/ExoPlayerImplInternal( 9654): Playback error.
E/ExoPlayerImplInternal( 9654): com.google.android.exoplayer2.ExoPlaybackException
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.throwDecoderInitError(MediaCodecRenderer.java:441)
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:428)
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:920)
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:503)
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:557)
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518)
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301)
E/ExoPlayerImplInternal( 9654): 	at android.os.Handler.dispatchMessage(Handler.java:101)
E/ExoPlayerImplInternal( 9654): 	at android.os.Looper.loop(Looper.java:180)
E/ExoPlayerImplInternal( 9654): 	at android.os.HandlerThread.run(HandlerThread.java:65)
E/ExoPlayerImplInternal( 9654): Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(2, null, video/avc, -1, null, [640, 360, -1.0], [-1, -1])
E/ExoPlayerImplInternal( 9654): 	... 9 more
E/ExoPlayerImplInternal( 9654): Caused by: android.media.MediaCodec$CodecException: Failed to initialize OMX.qcom.video.decoder.avc, error 0xfffffff4
E/ExoPlayerImplInternal( 9654): 	at android.media.MediaCodec.native_setup(Native Method)
E/ExoPlayerImplInternal( 9654): 	at android.media.MediaCodec.<init>(MediaCodec.java:1796)
E/ExoPlayerImplInternal( 9654): 	at android.media.MediaCodec.createByCodecName(MediaCodec.java:1769)
E/ExoPlayerImplInternal( 9654): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:415)
E/ExoPlayerImplInternal( 9654): 	... 8 more
[✓] Flutter (Channel dev, v0.11.5, on Mac OS X 10.13.6 17G65, locale en-DE)
[✓] Android toolchain - develop for Android devices (Android SDK 28.0.2)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.0)
[✓] Android Studio (version 3.2)
[!] VS Code (version 1.29.1)
[✓] Connected device (3 available)

! Doctor found issues in 1 category.
@zoechi zoechi added c: crash Stack traces logged to the console plugin a: video Video playback labels Nov 22, 2018
@zoechi zoechi added this to the Goals milestone Nov 22, 2018
@jamiegau
Copy link

I have had a similar problem, this is my first flutter App so I am new to this..
Would total creation and dispose of the widget fix this issue as a work around?

And would like example of how to use your CustomVideoPlayer in a demo app. Otherwise I nut it out.

@jamiegau
Copy link

Hello all, I have done more experimenting with this issue.
I created a simple signage app for my cinema to show trailers.
So it is supposed to run forever randomly picking up mp4 files to play from a local directory. The App downloads the mp4s before it starts the player..

I can confirm this issue happens about 15-20 as indicated. My test platform is a Mi Android TV box. (The emulator on my Macbook seems far more robust and can go langer then the target hardware I am using.)

In todays tests, I changed my app to place the Video Player in a widget. then that widget, between plays I dispose, and it disposes of the Video Player instance within it. In an attempt to force clean up of the player into a state as if it was the fist time you use it and it all works fine.

This has not made a difference. The problem still occurs.

I am greatly disappointed as I find flutter extremely fast and easy to make apps for digital signs and have some great ideas for writing apps for my needs. But without a reliable video player.... disappointed.

Video is a very popular feature so I am hoping this gets some attention sooner than later.
Am happy to do more testing when an attempt to make this part of flutter reliable is addressed.

Notes,

amess-MacBook-Pro-3:cm_player jamieg$ flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel beta, v0.11.11, on Mac OS X 10.13.6 17G3025, locale en-AU)
[✓] Android toolchain - develop for Android devices (Android SDK 28.0.3)
[✓] iOS toolchain - develop for iOS devices (Xcode 10.1)
[✓] Android Studio (version 3.2)
[!] VS Code (version 1.29.1)
[✓] Connected device (1 available)


@jamiegau
Copy link

@tvolkert following on from #24402 resulting in 0.11.13, re-compiling with that version has not fixed my issue as seen on the Mi BOX Android TV. It still locks up the player after quite a number of video file playbacks.

I must admit, however, under my Mac emulator, it seems to be playing OK.
It does not appear to be be exhibiting the same issue.

I just loaded my test App onto an older Android Box that had the video corruption. The #24402 fix definitely worked as it now works on this older android box, but it also stops after a small number of restarts just like the MiBOX.

This would indicate its not likely the MiBOX as its exhibiting the same behaviour on this older android unit. But I must admit, I find it strange the Emulator is running wthout issues currently, and its been running for about 40mins. the others are stuffed in about 5-10 mins.
Playing 1 second nothing, 7 seconds Video, Pause, Dispose, wait 1 sec, create new player on new file, .. repeat..
This test app is simply used to see if solid digital signage type use model can work.

The behaviour I have is that the timer keeps going, but the 7 seconds of attempting to play the video.. nothing but a BLACK background. 7 seconds up, container disappears for a 1 second period and it tries again .. just black backgrounds and no playing video.

I will also mention I am using 'flutter build apk --release' version of the test android boxes. Should I attempt a debug build?

@recastrodiaz
Copy link

@Abgaryan It looks like you have a memory leak. Can you dispose the controller when your CustomVideoPlayer gets disposed?

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

That's probably the root of your leak.

@jamiegau
Copy link

No I specifically made sure I did that as I expected it could have been that..
So yes I did override dispose and made sure it disposed the controller before disposing the widget..

@recastrodiaz
Copy link

recastrodiaz commented Nov 30, 2018

You'd also need to dispose the _controller when _CustomVideoPlayerState gets disposed. Is that something your are doing too? From #24565 (comment) it doesn't look like @Abgaryan is doing it.

@tvolkert tvolkert added the waiting for customer response The Flutter team cannot make further progress on this issue until the original reporter responds label Nov 30, 2018
@tvolkert
Copy link
Contributor

/cc @cbracken

@jason-simmons
Copy link
Member

jason-simmons commented Nov 30, 2018

One technique that can help for debugging this is instrumenting the lifecycle of the video player plugin.

Obtain the plugin source from https://github.com/flutter/plugins. In the app's pubspec.yaml, set the path of the video_player plugin to the local copy of the source:

  video_player:
    path: /path/to/plugins/packages/video_player

Then, in packages/video_player/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java, try adding logs to the VideoPlayer constructor and the release method. Verify that calls to release are happening at the expected times.

@jamiegau
Copy link

jamiegau commented Nov 30, 2018

Ok, just to follow up on this..
my test videoplayer widget has the following.

@override
  void dispose() {
    super.dispose();
    _controller.dispose();
    debugPrint('CmVideoPlayer - dispose()');
  }

Note: _controller.dispose(); and a print statement so in the debugging I can see it has run the dispose.

In the parent widget I use a variable that periodically makes the video widget and removes it.. causing a dispose when it gets removed.
my release build I test with can be found at..
http://admin.clubmovie.com.au/media scroll to the bottom to find the APKs use 170. load and run, it will download some media, then start the test.

In terms of @jason-simmons suggestion. Good suggestion, it was were I was looking at going next and was going to ask for some direction.
So I cloned the plugins, and updated me pubspec.yaml
But when I try and compile now I get the following error. A little out of my depth here.

Jamess-MacBook-Pro-3:cm_player jamieg$ flutter build apk --release
Running "flutter packages get" in cm_player...               0.5s
Initializing gradle...                                       3.8s
Resolving dependencies...                                    1.8s
Gradle task 'assembleRelease'...                                 
Note: /Users/jamieg/AndroidStudioProjects/plugins/packages/video_player/android/src/main/java/io/flutter/plugins/videoplayer/VideoPlayerPlugin.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
D8: Invoke-customs are only supported starting with Android O (--min-api 26)
D8: Invoke-customs are only supported starting with Android O (--min-api 26)
D8: Invoke-customs are only supported starting with Android O (--min-api 26)
D8: Invoke-customs are only supported starting with Android O (--min-api 26)
D8: Default interface methods are only supported starting with Android N (--min-api 24): void com.google.android.exoplayer2.Player$EventListener.onLoadingChanged(boolean)
D8: Invoke-customs are only supported starting with Android O (--min-api 26)
D8: Default interface methods are only supported starting with Android N (--min-api 24): void com.google.android.exoplayer2.analytics.AnalyticsListener.onAudioAttributesChanged(com.google.android.exoplayer2.analytics.AnalyticsListener$EventTime, com.google.android.exoplayer2.audio.AudioAttributes)
D8: Default interface methods are only supported starting with Android N (--min-api 24): void com.google.android.exoplayer2.drm.DefaultDrmSessionEventListener.onDrmSessionAcquired()
com.android.builder.dexing.DexArchiveBuilderException: com.android.builder.dexing.DexArchiveBuilderException: Failed to process /Users/jamieg/.gradle/caches/transforms-1/files-1.1/exoplayer-core-2.9.1.aar/2e4844a1bac384ad0e2cc0c8a07d2404/jars/classes.jar
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at java.util.concurrent.ForkJoinTask.getThrowableException(ForkJoinTask.java:593)
        at java.util.concurrent.ForkJoinTask.reportException(ForkJoinTask.java:677)
        at java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:720)
        at com.android.ide.common.internal.WaitableExecutor.waitForTasksWithQuickFail(WaitableExecutor.java:146)
        at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.transform(DexArchiveBuilderTransform.java:405)
        at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:239)
        at com.android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.java:235)
        at com.android.builder.profile.ThreadRecorder.record(ThreadRecorder.java:102)
        at com.android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.java:230)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
        at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)
        at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
        at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:300)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:292)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:174)
        at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:90)
        at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)
        at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)
        at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
        at java.lang.Thread.run(Thread.java:745)
Caused by: com.android.builder.dexing.DexArchiveBuilderException: Failed to process /Users/jamieg/.gradle/caches/transforms-1/files-1.1/exoplayer-core-2.9.1.aar/2e4844a1bac384ad0e2cc0c8a07d2404/jars/classes.jar
        at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.launchProcessing(DexArchiveBuilderTransform.java:900)
        at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.lambda$convertToDexArchive$6(DexArchiveBuilderTransform.java:825)
        at java.util.concurrent.ForkJoinTask$AdaptedCallable.exec(ForkJoinTask.java:1424)
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: com.android.builder.dexing.DexArchiveBuilderException: Error while dexing.
        at com.android.builder.dexing.D8DexArchiveBuilder.getExceptionToRethrow(D8DexArchiveBuilder.java:124)
        at com.android.builder.dexing.D8DexArchiveBuilder.convert(D8DexArchiveBuilder.java:101)
        at com.android.build.gradle.internal.transforms.DexArchiveBuilderTransform.launchProcessing(DexArchiveBuilderTransform.java:895)
        ... 6 more
Caused by: com.android.tools.r8.CompilationFailedException: Compilation failed to complete
        at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:65)
        at com.android.tools.r8.utils.ExceptionUtils.withD8CompilationHandler(ExceptionUtils.java:43)
        at com.android.tools.r8.D8.run(D8.java:90)
        at com.android.builder.dexing.D8DexArchiveBuilder.convert(D8DexArchiveBuilder.java:99)
        ... 7 more
Caused by: com.android.tools.r8.utils.AbortException: Error: Default interface methods are only supported starting with Android N (--min-api 24): void com.google.android.exoplayer2.drm.DefaultDrmSessionEventListener.onDrmSessionAcquired()
        at com.android.tools.r8.utils.Reporter.failIfPendingErrors(Reporter.java:116)
        at com.android.tools.r8.utils.Reporter.fatalError(Reporter.java:74)
        at com.android.tools.r8.utils.ExceptionUtils.withCompilationHandler(ExceptionUtils.java:59)
        ... 10 more


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:transformClassesWithDexBuilderForRelease'.
> com.android.build.api.transform.TransformException: com.android.builder.dexing.DexArchiveBuilderException: com.android.builder.dexing.DexArchiveBuilderException: Failed to process /Users/jamieg/.gradle/caches/transforms-1/files-1.1/exoplayer-core-2.9.1.aar/2e4844a1bac384ad0e2cc0c8a07d2404/jars/classes.jar

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 4s                                                                                                                                                                                                     
Gradle task 'assembleRelease'... Done                        4.6s
Gradle task assembleRelease failed with exit code 1
Jamess-MacBook-Pro-3:cm_player jamieg$ 

@jamiegau
Copy link

Just another update.
This morning I loaded the test app onto my handset a OnePlus6. It appears to be running ok.
Its a much more powerful device with much more memory then a Mi-BOX and other old less powerful devices I have been testing against.
Would I be right to say the best course of action, due to this, is to hook up a MiBox for example, directly to my MacBook and run the test-app in debug mode with the memory tool accessible so I can check it that way?
If so, I will have to do that in a few days. I only have a MiBox at the office.

@jason-simmons
Copy link
Member

jason-simmons commented Nov 30, 2018

For the compilation errors, try modifying your app's android/app/build.gradle script. Go to the android section and add a block like this:

    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }

@jamiegau
Copy link

jamiegau commented Dec 3, 2018

Hi those watching.
I did some tests on an emulator over the weekend. The emulator did appear to deal with the issue.
In looking closer at the debug output, the files I am using are not within spec for the player. I get a lot of quasi errors saying this be it works anyway.
(I am guessing that the emulator is likely more resilient then a real Android device as a reason why the emulator may be dealing with this while real android devices are not. There must be a reason for this inconsistency)
At this stage I think it best to make sure the video media files being used for my tests are exactly within the specs suited for all Android devices. Due to this I will be making changes to ensure this is the case for my test app.
Once this is done, I will be testing on the Android units that die quickly. See if it makes a difference.
It is a lot of work for a small bug but it appears to be the next loose end I need to tie up before we go deeper. (And I have no experience with the Java code so I'm not really in a position to help much there.)

In the mean time, I have set up a permanent windows machines running the test emulator 24h while this is still an open issue. Also to confirm my tests over the weekend. (The test app did die a few times but the errors looked more to do with how my Macbook wakes up after being left idle)

@zoechi zoechi added e: device-specific Only manifests on certain devices engine flutter/engine repository. See also e: labels. labels Dec 3, 2018
@jamiegau
Copy link

jamiegau commented Dec 4, 2018

Ok,
I'm stumped.
I changed my backend to offer MP4 files as specified as being supported by android devices..
Ie, the baseline, limited to 2mbit 720p files etc.
All I can now say is that, in the emulator, NOT A PROBLEM, runs all night as you would expect.
On all REAL android devices. quite quickly it will not play the videos.

Any suggestions on how we can solve this problem would be appreciated. Considering it works on the emulator and not on any real Android devices. it looks like a really deep difficult issue only the key media player developers may have any idea about. There is no reason why this should work..

If I can help, considering I am no java developer, anything else hit me up.

I will continue with my flutter app and develop the POSTER (Images only) side for now. But hell, I was hoping to allow it to also play MP4 trailers.

My flutter apk will be on admin.clubmovie.com.au/media, the APK downloads towards the bottom.
At the moment, it only has a test version as described above. v180 is the test version that loads Android specific media files.
(Note, 2mbit limited bandwidth is also a little to ppor quality. It plays a lot of the hi-quality videos such as directly from Apple Trailers. And as making the media files 2mbit 720p etc has made no difference, I am hoping if this is ever fixed, the original hi quality media files that do play could be used)

I must admit, considering emulator works and devices don't, I am also crossing my fingers simply showing a poster every 7 seconds then loading a new one, constantly will not also die on a real android device.!! (Using Flutter)

Would also like to hear from anyone that has successfully made an AndroidApp, in java/kotlin over flutter that can successfully play mp4s day in and day out without dieing. Want to know if it is even possible.. (DO I need to learn Java/kotlin to get such an app working)

@jamiegau
Copy link

jamiegau commented Dec 5, 2018

@jason-simmons I am chasing down the latest video_player on github (v0.8.0) as it has some fixes that may affect this issue. I added,

video_player:
      git:
        url: git://github.com/flutter/plugins.git
        path: packages/video_player

so my pubspec.yaml

This came up with an error suggesting I add

android {
    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}

to build.gradle

Resulting in an error of..

* What went wrong:
A problem occurred evaluating root project 'android'.
> Could not find method android() for arguments [build_d6mdoymalwj5gai0mg18ss7gs$_run_closure5@5a3d59bd] on root project 'android' of type org.gradle.api.Project.

This is where I get lost and would appreciate input.
Thanks.

@jamiegau
Copy link

jamiegau commented Dec 5, 2018

Update info.

I have connected a MI Box m3 to windows machine and run the app through AndroidStudio resulting in the following crash info


.
.
.
E/libc    ( 6365): Access denied finding property "media.metrics.enabled"
I/flutter ( 6365): _showPlayer = true
I/ExoPlayerImpl( 6365): Init 2faba73 [ExoPlayerLib/2.8.0] [once, MIBOX3, Xiaomi, 26]
W/ExoPlayerImplIn( 6365): type=1400 audit(0.0:2884): avc: denied { read } for name="u:object_r:media_prop:s0" dev="tmpfs" ino=12279 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:o
bject_r:media_prop:s0 tclass=file permissive=0
E/libc    ( 6365): Access denied finding property "media.metrics.enabled"
I/OMXClient( 6365): Treble IOmx obtained
D/SurfaceUtils( 6365): connecting to surface 0xe4acf808, reason connectToSurface
I/MediaCodec( 6365): [OMX.amlogic.avc.decoder.awesome] setting surface generation to 6518216
D/SurfaceUtils( 6365): disconnecting from surface 0xe4acf808, reason connectToSurface(reconnect)
D/SurfaceUtils( 6365): connecting to surface 0xe4acf808, reason connectToSurface(reconnect)
V/AVUtils ( 6365): AVUtils::getComponentRole
E/ACodec  ( 6365): [OMX.amlogic.avc.decoder.awesome] setPortMode on output to DynamicANWBuffer failed w/ err -2147483648
I/ACodec  ( 6365): codec does not support config priority (err -1010)
D/SurfaceUtils( 6365): disconnecting from surface 0xe4acf808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils( 6365): connecting to surface 0xe4acf808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils( 6365): set up nativeWindow 0xe4acf808 for 320x180, color 0x11, rotation 0, usage 0x2002900
W/ACodec  ( 6365): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 9 failed: -1010
W/ACodec  ( 6365): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 8 failed: -1010
W/ACodec  ( 6365): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 7 failed: -1010
W/GrallocMapperPassthrough( 6365): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough( 6365): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough( 6365): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough( 6365): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough( 6365): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough( 6365): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough( 6365): buffer descriptor with invalid usage bits 0x2002000
W/ExoPlayerImplIn( 6365): type=1400 audit(0.0:2885): avc: denied { read } for name="u:object_r:media_prop:s0" dev="tmpfs" ino=12279 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:o
bject_r:media_prop:s0 tclass=file permissive=0
E/libc    ( 6365): Access denied finding property "media.metrics.enabled"
I/OMXClient( 6365): Treble IOmx obtained
V/AVUtils ( 6365): AVUtils::getComponentRole
I/ACodec  ( 6365): codec does not support config priority (err -2147483648)
D/AudioTrack( 6365): Client defaulted notificationFrames to 7552 for frameCount 22656
I/flutter ( 6365): initliaised.then VideoPlayerValue(duration: 0:03:02.416000, size: Size(320.0, 180.0), position: 0:00:00.000000, buffered: [], isPlaying: false, isLooping: false, isB
uffering: falsevolume: 1.0, errorDescription: null)
D/AudioTrack( 6365): Client defaulted notificationFrames to 7552 for frameCount 22656
E/GLConsumer( 6365): [SurfaceTexture-0-6365-455] syncForReleaseLocked: error dup'ing native fence fd: 0x3000
E/flutter ( 6365): [ERROR:flutter/shell/platform/android/platform_view_android_jni.cc(40)] java.lang.RuntimeException: Error during updateTexImage (see logcat for details)
E/flutter ( 6365):      at android.graphics.SurfaceTexture.nativeUpdateTexImage(Native Method)
E/flutter ( 6365):      at android.graphics.SurfaceTexture.updateTexImage(SurfaceTexture.java:243)
E/flutter ( 6365):
F/flutter ( 6365): [FATAL:flutter/shell/platform/android/platform_view_android_jni.cc(130)] Check failed: CheckException(env).
F/libc    ( 6365): Fatal signal 6 (SIGABRT), code -6 in tid 6389 (Thread-2)
*** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
Build fingerprint: 'Xiaomi/once/once:8.0.0/OPR6.170623.013/2396:user/release-keys'
Revision: '0'
ABI: 'arm'
pid: 6365, tid: 6389, name: Thread-2  >>> au.net.digitall.cmplayer <<<
signal 6 (SIGABRT), code -6 (SI_TKILL), fault addr --------
Abort message: '[FATAL:flutter/shell/platform/android/platform_view_android_jni.cc(130)] Check failed: CheckException(env).
'
    r0 00000000  r1 000018f5  r2 00000006  r3 00000008
    r4 000018dd  r5 000018f5  r6 d68830b0  r7 0000010c
    r8 00000000  r9 d564a04c  sl d74be8fc  fp d6884638
    ip 00000000  sp d68830a0  lr f29f7637  pc f2a27bf4  cpsr 200f0010
backtrace:
    #00 pc 0004abf4  /system/lib/libc.so (tgkill+12)
    #01 pc 0001a633  /system/lib/libc.so (abort+54)
    #02 pc 0053ea03  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #03 pc 00522201  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #04 pc 0053c61f  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #05 pc 0053a8b7  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #06 pc 0053c6ef  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #07 pc 0053a8b7  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #08 pc 0053b4f9  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #09 pc 0053a8b7  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #10 pc 0053b4f9  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #11 pc 0053a8b7  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #12 pc 0053c6ef  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #13 pc 0053a8b7  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #14 pc 0053c6ef  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #15 pc 0053a8b7  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #16 pc 0053c6ef  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #17 pc 0053aaef  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #18 pc 00539a81  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #19 pc 005633a9  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #20 pc 005632eb  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #21 pc 0053fe6d  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #22 pc 0054142d  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #23 pc 000105cd  /system/lib/libutils.so (_ZN7android6Looper9pollInnerEi+572)
    #24 pc 000102f9  /system/lib/libutils.so (_ZN7android6Looper8pollOnceEiPiS1_PPv+32)
    #25 pc 0000d31b  /system/lib/libandroid.so (ALooper_pollOnce+50)
    #26 pc 005414c7  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #27 pc 0053ed61  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #28 pc 005403e9  /data/app/au.net.digitall.cmplayer-KCv_bCyuTn3YAs5hcjh5Cw==/lib/arm/libflutter.so (offset 0x4e5000)
    #29 pc 00047f17  /system/lib/libc.so (_ZL15__pthread_startPv+22)
    #30 pc 0001b1dd  /system/lib/libc.so (__start_thread+32)
Lost connection to device.

@tvolkert
Copy link
Contributor

tvolkert commented Dec 5, 2018

@jamiegau any chance you can try symbolicating that trace? https://github.com/flutter/flutter/wiki/Crashes

If you know the framework revision when that happened, we can symbolicate it as well

@jason-simmons
Copy link
Member

This crash was caused by an exception thrown when SurfaceTexture.updateTexImage was called via JNI from the engine

E/GLConsumer( 6365): [SurfaceTexture-0-6365-455] syncForReleaseLocked: error dup'ing native fence fd: 0x3000
E/flutter ( 6365): [ERROR:flutter/shell/platform/android/platform_view_android_jni.cc(40)] java.lang.RuntimeException: Error during updateTexImage (see logcat for details)
E/flutter ( 6365):      at android.graphics.SurfaceTexture.nativeUpdateTexImage(Native Method)
E/flutter ( 6365):      at android.graphics.SurfaceTexture.updateTexImage(SurfaceTexture.java:243)
E/flutter ( 6365):
F/flutter ( 6365): [FATAL:flutter/shell/platform/android/platform_view_android_jni.cc(130)] Check failed: CheckException(env).

@jamiegau
Copy link

jamiegau commented Dec 6, 2018

On this issue...
The crash above is actually a once of. Doing more tests under a more controlled path.. I have archived the same typical "PROBLEM" in that the app keeps running but the following error is occurring. which I now have the console logs for.. So Please take note of this below.. it talks about running out of memory, but the memory monitor is sitting flat at under 100meg...


I/flutter (20331): CmVideoPlayer - dispose()
I/ExoPlayerImpl(20331): Release 9268a2d [ExoPlayerLib/2.8.0] [once, MIBOX3, Xiaomi, 26] [goog.exo.core]
I/flutter (20331): _showPlayer = true
I/ExoPlayerImpl(20331): Init 58bacdc [ExoPlayerLib/2.8.0] [once, MIBOX3, Xiaomi, 26]
W/ExoPlayerImplIn(20331): type=1400 audit(0.0:8100): avc: denied { read } for name="u:object_r:media_prop:s0" dev="tmpfs" ino=2159 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:media_prop:s0 tclass=file permissive=0
E/libc    (20331): Access denied finding property "media.metrics.enabled"
I/OMXClient(20331): Treble IOmx obtained
D/SurfaceUtils(20331): connecting to surface 0xdcbe3808, reason connectToSurface
I/MediaCodec(20331): [OMX.amlogic.avc.decoder.awesome] setting surface generation to 20819636
D/SurfaceUtils(20331): disconnecting from surface 0xdcbe3808, reason connectToSurface(reconnect)
D/SurfaceUtils(20331): connecting to surface 0xdcbe3808, reason connectToSurface(reconnect)
V/AVUtils (20331): AVUtils::getComponentRole
E/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setPortMode on output to DynamicANWBuffer failed w/ err -2147483648
I/ACodec  (20331): codec does not support config priority (err -1010)
D/SurfaceUtils(20331): disconnecting from surface 0xdcbe3808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils(20331): connecting to surface 0xdcbe3808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils(20331): set up nativeWindow 0xdcbe3808 for 320x180, color 0x11, rotation 0, usage 0x2002900
W/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 9 failed: -1010
W/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 8 failed: -1010
W/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 7 failed: -1010
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
E/GraphicBufferAllocator(20331): Failed to allocate (320 x 180) layerCount 1 format 17 usage 2002900: 5
E/BufferQueueProducer(20331): [SurfaceTexture-0-20331-691] dequeueBuffer: createGraphicBuffer failed
E/ACodec  (20331): dequeueBuffer failed: Out of memory (12)
E/ACodec  (20331): Failed to allocate buffers after transitioning to IDLE state (error 0xfffffff4)
E/ACodec  (20331): signalError(omxError 0x80001001, internalError -12)
E/MediaCodec(20331): Codec reported err 0xfffffff4, actionCode 0, while in state 5
D/SurfaceUtils(20331): disconnecting from surface 0xdcbe3808, reason disconnectFromSurface
W/AHierarchicalStateMachine(20331): Warning message AMessage(what = 'omxI') = {
W/AHierarchicalStateMachine(20331):   int32_t type = 0
W/AHierarchicalStateMachine(20331):   int32_t event = 0
W/AHierarchicalStateMachine(20331):   int32_t data1 = 0
W/AHierarchicalStateMachine(20331):   int32_t data2 = 1
W/AHierarchicalStateMachine(20331): } unhandled in root state.
E/ExoPlayerImplInternal(20331): Playback error.
E/ExoPlayerImplInternal(20331): com.google.android.exoplayer2.ExoPlaybackException
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.throwDecoderInitError(MediaCodecRenderer.java:441)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:428)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:920)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:503)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:557)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301)
E/ExoPlayerImplInternal(20331): 	at android.os.Handler.dispatchMessage(Handler.java:101)
E/ExoPlayerImplInternal(20331): 	at android.os.Looper.loop(Looper.java:164)
E/ExoPlayerImplInternal(20331): 	at android.os.HandlerThread.run(HandlerThread.java:65)
E/ExoPlayerImplInternal(20331): Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.amlogic.avc.decoder.awesome, Format(1, null, video/avc, -1, null, [320, 180, -1.0], [-1, -1])
E/ExoPlayerImplInternal(20331): 	... 9 more
E/ExoPlayerImplInternal(20331): Caused by: android.media.MediaCodec$CodecException: start failed
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.native_start(Native Method)
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.start(MediaCodec.java:2043)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:421)
E/ExoPlayerImplInternal(20331): 	... 8 more
E/libc    (20331): Access denied finding property "media.metrics.enabled"
E/ExoPlayerImplInternal(20331): Stop failed.
E/ExoPlayerImplInternal(20331): java.lang.IllegalStateException
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.native_stop(Native Method)
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.stop(MediaCodec.java:2059)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.releaseCodec(MediaCodecRenderer.java:518)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.releaseCodec(MediaCodecVideoRenderer.java:474)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onDisabled(MediaCodecRenderer.java:474)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onDisabled(MediaCodecVideoRenderer.java:362)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.BaseRenderer.disable(BaseRenderer.java:153)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.disableRenderer(ExoPlayerImplInternal.java:969)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.resetInternal(ExoPlayerImplInternal.java:768)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.stopInternal(ExoPlayerImplInternal.java:731)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:343)
E/ExoPlayerImplInternal(20331): 	at android.os.Handler.dispatchMessage(Handler.java:101)
E/ExoPlayerImplInternal(20331): 	at android.os.Looper.loop(Looper.java:164)
E/ExoPlayerImplInternal(20331): 	at android.os.HandlerThread.run(HandlerThread.java:65)
I/flutter (20331): _showPlayer = false
I/flutter (20331): CmVideoPlayer - dispose()
I/ExoPlayerImpl(20331): Release 58bacdc [ExoPlayerLib/2.8.0] [once, MIBOX3, Xiaomi, 26] [goog.exo.core]
I/flutter (20331): _showPlayer = true
I/ExoPlayerImpl(20331): Init ff1747 [ExoPlayerLib/2.8.0] [once, MIBOX3, Xiaomi, 26]
W/ExoPlayerImplIn(20331): type=1400 audit(0.0:8102): avc: denied { read } for name="u:object_r:media_prop:s0" dev="tmpfs" ino=2159 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:media_prop:s0 tclass=file permissive=0
E/libc    (20331): Access denied finding property "media.metrics.enabled"
I/OMXClient(20331): Treble IOmx obtained
D/SurfaceUtils(20331): connecting to surface 0xdcbe3808, reason connectToSurface
I/MediaCodec(20331): [OMX.amlogic.avc.decoder.awesome] setting surface generation to 20819637
D/SurfaceUtils(20331): disconnecting from surface 0xdcbe3808, reason connectToSurface(reconnect)
D/SurfaceUtils(20331): connecting to surface 0xdcbe3808, reason connectToSurface(reconnect)
V/AVUtils (20331): AVUtils::getComponentRole
E/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setPortMode on output to DynamicANWBuffer failed w/ err -2147483648
I/ACodec  (20331): codec does not support config priority (err -1010)
D/SurfaceUtils(20331): disconnecting from surface 0xdcbe3808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils(20331): connecting to surface 0xdcbe3808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils(20331): set up nativeWindow 0xdcbe3808 for 1280x720, color 0x11, rotation 0, usage 0x2002900
W/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 9 failed: -1010
W/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 8 failed: -1010
W/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 7 failed: -1010
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
E/GraphicBufferAllocator(20331): Failed to allocate (1280 x 720) layerCount 1 format 17 usage 2002900: 5
E/BufferQueueProducer(20331): [SurfaceTexture-0-20331-692] dequeueBuffer: createGraphicBuffer failed
E/ACodec  (20331): dequeueBuffer failed: Out of memory (12)
E/ACodec  (20331): Failed to allocate buffers after transitioning to IDLE state (error 0xfffffff4)
E/ACodec  (20331): signalError(omxError 0x80001001, internalError -12)
E/MediaCodec(20331): Codec reported err 0xfffffff4, actionCode 0, while in state 5
D/SurfaceUtils(20331): disconnecting from surface 0xdcbe3808, reason disconnectFromSurface
W/AHierarchicalStateMachine(20331): Warning message AMessage(what = 'omxI') = {
W/AHierarchicalStateMachine(20331):   int32_t type = 0
W/AHierarchicalStateMachine(20331):   int32_t event = 0
W/AHierarchicalStateMachine(20331):   int32_t data1 = 0
W/AHierarchicalStateMachine(20331):   int32_t data2 = 1
W/AHierarchicalStateMachine(20331): } unhandled in root state.
E/ExoPlayerImplInternal(20331): Playback error.
E/ExoPlayerImplInternal(20331): com.google.android.exoplayer2.ExoPlaybackException
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.throwDecoderInitError(MediaCodecRenderer.java:441)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:428)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:920)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:503)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:557)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301)
E/ExoPlayerImplInternal(20331): 	at android.os.Handler.dispatchMessage(Handler.java:101)
E/ExoPlayerImplInternal(20331): 	at android.os.Looper.loop(Looper.java:164)
E/ExoPlayerImplInternal(20331): 	at android.os.HandlerThread.run(HandlerThread.java:65)
E/ExoPlayerImplInternal(20331): Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.amlogic.avc.decoder.awesome, Format(1, null, video/avc, -1, null, [1280, 720, -1.0], [-1, -1])
E/ExoPlayerImplInternal(20331): 	... 9 more
E/ExoPlayerImplInternal(20331): Caused by: android.media.MediaCodec$CodecException: start failed
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.native_start(Native Method)
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.start(MediaCodec.java:2043)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:421)
E/ExoPlayerImplInternal(20331): 	... 8 more
E/libc    (20331): Access denied finding property "media.metrics.enabled"
E/ExoPlayerImplInternal(20331): Stop failed.
E/ExoPlayerImplInternal(20331): java.lang.IllegalStateException
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.native_stop(Native Method)
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.stop(MediaCodec.java:2059)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.releaseCodec(MediaCodecRenderer.java:518)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.releaseCodec(MediaCodecVideoRenderer.java:474)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onDisabled(MediaCodecRenderer.java:474)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onDisabled(MediaCodecVideoRenderer.java:362)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.BaseRenderer.disable(BaseRenderer.java:153)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.disableRenderer(ExoPlayerImplInternal.java:969)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.resetInternal(ExoPlayerImplInternal.java:768)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.stopInternal(ExoPlayerImplInternal.java:731)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:343)
E/ExoPlayerImplInternal(20331): 	at android.os.Handler.dispatchMessage(Handler.java:101)
E/ExoPlayerImplInternal(20331): 	at android.os.Looper.loop(Looper.java:164)
E/ExoPlayerImplInternal(20331): 	at android.os.HandlerThread.run(HandlerThread.java:65)
I/zygote  (20331): Do partial code cache collection, code=504KB, data=322KB
I/zygote  (20331): After code cache collection, code=504KB, data=322KB
I/zygote  (20331): Increasing code cache capacity to 2MB
I/flutter (20331): _showPlayer = false
I/flutter (20331): CmVideoPlayer - dispose()
I/ExoPlayerImpl(20331): Release ff1747 [ExoPlayerLib/2.8.0] [once, MIBOX3, Xiaomi, 26] [goog.exo.core]
I/flutter (20331): _showPlayer = true
I/ExoPlayerImpl(20331): Init 6e7dc5e [ExoPlayerLib/2.8.0] [once, MIBOX3, Xiaomi, 26]
E/libc    (20331): Access denied finding property "media.metrics.enabled"
I/OMXClient(20331): Treble IOmx obtained
D/SurfaceUtils(20331): connecting to surface 0xdcbe3808, reason connectToSurface
I/MediaCodec(20331): [OMX.amlogic.avc.decoder.awesome] setting surface generation to 20819638
D/SurfaceUtils(20331): disconnecting from surface 0xdcbe3808, reason connectToSurface(reconnect)
D/SurfaceUtils(20331): connecting to surface 0xdcbe3808, reason connectToSurface(reconnect)
V/AVUtils (20331): AVUtils::getComponentRole
E/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setPortMode on output to DynamicANWBuffer failed w/ err -2147483648
I/ACodec  (20331): codec does not support config priority (err -1010)
D/SurfaceUtils(20331): disconnecting from surface 0xdcbe3808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils(20331): connecting to surface 0xdcbe3808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils(20331): set up nativeWindow 0xdcbe3808 for 320x180, color 0x11, rotation 0, usage 0x2002900
W/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 9 failed: -1010
W/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 8 failed: -1010
W/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 7 failed: -1010
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
E/GraphicBufferAllocator(20331): Failed to allocate (320 x 180) layerCount 1 format 17 usage 2002900: 5
E/BufferQueueProducer(20331): [SurfaceTexture-0-20331-693] dequeueBuffer: createGraphicBuffer failed
E/ACodec  (20331): dequeueBuffer failed: Out of memory (12)
E/ACodec  (20331): Failed to allocate buffers after transitioning to IDLE state (error 0xfffffff4)
E/ACodec  (20331): signalError(omxError 0x80001001, internalError -12)
E/MediaCodec(20331): Codec reported err 0xfffffff4, actionCode 0, while in state 5
D/SurfaceUtils(20331): disconnecting from surface 0xdcbe3808, reason disconnectFromSurface
W/AHierarchicalStateMachine(20331): Warning message AMessage(what = 'omxI') = {
W/AHierarchicalStateMachine(20331):   int32_t type = 0
W/AHierarchicalStateMachine(20331):   int32_t event = 0
W/AHierarchicalStateMachine(20331):   int32_t data1 = 0
W/AHierarchicalStateMachine(20331):   int32_t data2 = 1
W/AHierarchicalStateMachine(20331): } unhandled in root state.
E/ExoPlayerImplInternal(20331): Playback error.
E/ExoPlayerImplInternal(20331): com.google.android.exoplayer2.ExoPlaybackException
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.throwDecoderInitError(MediaCodecRenderer.java:441)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:428)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:920)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:503)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:557)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301)
E/ExoPlayerImplInternal(20331): 	at android.os.Handler.dispatchMessage(Handler.java:101)
E/ExoPlayerImplInternal(20331): 	at android.os.Looper.loop(Looper.java:164)
E/ExoPlayerImplInternal(20331): 	at android.os.HandlerThread.run(HandlerThread.java:65)
E/ExoPlayerImplInternal(20331): Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.amlogic.avc.decoder.awesome, Format(1, null, video/avc, -1, null, [320, 180, -1.0], [-1, -1])
E/ExoPlayerImplInternal(20331): 	... 9 more
E/ExoPlayerImplInternal(20331): Caused by: android.media.MediaCodec$CodecException: start failed
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.native_start(Native Method)
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.start(MediaCodec.java:2043)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:421)
E/ExoPlayerImplInternal(20331): 	... 8 more
E/libc    (20331): Access denied finding property "media.metrics.enabled"
E/ExoPlayerImplInternal(20331): Stop failed.
E/ExoPlayerImplInternal(20331): java.lang.IllegalStateException
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.native_stop(Native Method)
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.stop(MediaCodec.java:2059)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.releaseCodec(MediaCodecRenderer.java:518)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.releaseCodec(MediaCodecVideoRenderer.java:474)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onDisabled(MediaCodecRenderer.java:474)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onDisabled(MediaCodecVideoRenderer.java:362)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.BaseRenderer.disable(BaseRenderer.java:153)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.disableRenderer(ExoPlayerImplInternal.java:969)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.resetInternal(ExoPlayerImplInternal.java:768)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.stopInternal(ExoPlayerImplInternal.java:731)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:343)
E/ExoPlayerImplInternal(20331): 	at android.os.Handler.dispatchMessage(Handler.java:101)
E/ExoPlayerImplInternal(20331): 	at android.os.Looper.loop(Looper.java:164)
E/ExoPlayerImplInternal(20331): 	at android.os.HandlerThread.run(HandlerThread.java:65)
I/flutter (20331): _showPlayer = false
I/flutter (20331): CmVideoPlayer - dispose()
I/ExoPlayerImpl(20331): Release 6e7dc5e [ExoPlayerLib/2.8.0] [once, MIBOX3, Xiaomi, 26] [goog.exo.core]
I/flutter (20331): _showPlayer = true
I/ExoPlayerImpl(20331): Init 71d2ad1 [ExoPlayerLib/2.8.0] [once, MIBOX3, Xiaomi, 26]
W/ExoPlayerImplIn(20331): type=1400 audit(0.0:8106): avc: denied { read } for name="u:object_r:media_prop:s0" dev="tmpfs" ino=2159 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:media_prop:s0 tclass=file permissive=0
E/libc    (20331): Access denied finding property "media.metrics.enabled"
I/OMXClient(20331): Treble IOmx obtained
D/SurfaceUtils(20331): connecting to surface 0xdcbe3808, reason connectToSurface
I/MediaCodec(20331): [OMX.amlogic.avc.decoder.awesome] setting surface generation to 20819639
D/SurfaceUtils(20331): disconnecting from surface 0xdcbe3808, reason connectToSurface(reconnect)
D/SurfaceUtils(20331): connecting to surface 0xdcbe3808, reason connectToSurface(reconnect)
V/AVUtils (20331): AVUtils::getComponentRole
E/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setPortMode on output to DynamicANWBuffer failed w/ err -2147483648
I/ACodec  (20331): codec does not support config priority (err -1010)
D/SurfaceUtils(20331): disconnecting from surface 0xdcbe3808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils(20331): connecting to surface 0xdcbe3808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils(20331): set up nativeWindow 0xdcbe3808 for 320x180, color 0x11, rotation 0, usage 0x2002900
W/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 9 failed: -1010
W/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 8 failed: -1010
W/ACodec  (20331): [OMX.amlogic.avc.decoder.awesome] setting nBufferCountActual to 7 failed: -1010
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
W/GrallocMapperPassthrough(20331): buffer descriptor with invalid usage bits 0x2002000
E/GraphicBufferAllocator(20331): Failed to allocate (320 x 180) layerCount 1 format 17 usage 2002900: 5
E/BufferQueueProducer(20331): [SurfaceTexture-0-20331-694] dequeueBuffer: createGraphicBuffer failed
E/ACodec  (20331): dequeueBuffer failed: Out of memory (12)
E/ACodec  (20331): Failed to allocate buffers after transitioning to IDLE state (error 0xfffffff4)
E/ACodec  (20331): signalError(omxError 0x80001001, internalError -12)
E/MediaCodec(20331): Codec reported err 0xfffffff4, actionCode 0, while in state 5
D/SurfaceUtils(20331): disconnecting from surface 0xdcbe3808, reason disconnectFromSurface
W/AHierarchicalStateMachine(20331): Warning message AMessage(what = 'omxI') = {
W/AHierarchicalStateMachine(20331):   int32_t type = 0
W/AHierarchicalStateMachine(20331):   int32_t event = 0
W/AHierarchicalStateMachine(20331):   int32_t data1 = 0
W/AHierarchicalStateMachine(20331):   int32_t data2 = 1
W/AHierarchicalStateMachine(20331): } unhandled in root state.
E/ExoPlayerImplInternal(20331): Playback error.
E/ExoPlayerImplInternal(20331): com.google.android.exoplayer2.ExoPlaybackException
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.throwDecoderInitError(MediaCodecRenderer.java:441)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:428)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:920)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:503)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:557)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301)
E/ExoPlayerImplInternal(20331): 	at android.os.Handler.dispatchMessage(Handler.java:101)
E/ExoPlayerImplInternal(20331): 	at android.os.Looper.loop(Looper.java:164)
E/ExoPlayerImplInternal(20331): 	at android.os.HandlerThread.run(HandlerThread.java:65)
E/ExoPlayerImplInternal(20331): Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.amlogic.avc.decoder.awesome, Format(1, null, video/avc, -1, null, [320, 180, -1.0], [-1, -1])
E/ExoPlayerImplInternal(20331): 	... 9 more
E/ExoPlayerImplInternal(20331): Caused by: android.media.MediaCodec$CodecException: start failed
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.native_start(Native Method)
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.start(MediaCodec.java:2043)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:421)
E/ExoPlayerImplInternal(20331): 	... 8 more
E/libc    (20331): Access denied finding property "media.metrics.enabled"
E/ExoPlayerImplInternal(20331): Stop failed.
E/ExoPlayerImplInternal(20331): java.lang.IllegalStateException
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.native_stop(Native Method)
E/ExoPlayerImplInternal(20331): 	at android.media.MediaCodec.stop(MediaCodec.java:2059)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.releaseCodec(MediaCodecRenderer.java:518)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.releaseCodec(MediaCodecVideoRenderer.java:474)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onDisabled(MediaCodecRenderer.java:474)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onDisabled(MediaCodecVideoRenderer.java:362)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.BaseRenderer.disable(BaseRenderer.java:153)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.disableRenderer(ExoPlayerImplInternal.java:969)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.resetInternal(ExoPlayerImplInternal.java:768)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.stopInternal(ExoPlayerImplInternal.java:731)
E/ExoPlayerImplInternal(20331): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:343)
E/ExoPlayerImplInternal(20331): 	at android.os.Handler.dispatchMessage(Handler.java:101)
E/ExoPlayerImplInternal(20331): 	at android.os.Looper.loop(Looper.java:164)
E/ExoPlayerImplInternal(20331): 	at android.os.HandlerThread.run(HandlerThread.java:65)

@jamiegau
Copy link

jamiegau commented Dec 6, 2018

Guys, if it will help, I can zip up my (test version) app and send it to you. It will auto download a number of test files, play them in a loop (1 sec between files then plays 7 seconds of file and disposes and loops), takes about 10 min for the error to appear. The app simply continues with the error seen above being output. An observation is that when it starts erroring, it happens on one, then another, then all items it tries to play result in the error. This would indicate memory allocation again and as it get worse, it has more problems until it completely fails.
Email me at james.gardiner@digitall.net.au if you want my test app.

The initial error with the ultimate crash as listed before the continuous error above may have been an overnight crash, forget exact details. I am guessing it may have gone all the way till it resulted in the total crash in the previous dump example. But ultimately we need to concentrate on why, after a number of plays, the continuous memory error occurs.

I would also like to mention. I would consider this a ShowStopper bug for those wishing to use Flutter for any type of video application.. I suppose it is unlikely flutter apps will ever attempt to play videos 20-30 times before the app is killed and restarted, but I can see it being a edge case even for some mobile apps.

@nitneuq33
Copy link

nitneuq33 commented Aug 1, 2019

Hello I have this also when I repeat call of _controller.initialize(); . I repeated call _controller.initialize(); to reload video after finish. without this I can't repeat video after finish. but When I call multiple time _controller.initialize(); I have this error :

I/ACodec  (20516):  [] Now uninitialized
I/ACodec  (20516): [] onAllocateComponent
I/OMXClient(20516): Treble IOmx obtained
I/ACodec  (20516): [OMX.Exynos.avc.dec] Now Loaded
I/ACodec  (20516):  [OMX.Exynos.avc.dec] Now uninitialized
I/ACodec  (20516):  [] Now kWhatShutdownCompleted event : 8483
I/MediaCodec(20516): Codec shutdown complete
W/MediaCodecRenderer(20516): Failed to initialize decoder: OMX.Exynos.avc.dec
W/MediaCodecRenderer(20516): android.media.MediaCodec$CodecException: Error 0xffffec77
W/MediaCodecRenderer(20516): 	at android.media.MediaCodec.native_configure(Native Method)
W/MediaCodecRenderer(20516): 	at android.media.MediaCodec.configure(MediaCodec.java:1935)
W/MediaCodecRenderer(20516): 	at android.media.MediaCodec.configure(MediaCodec.java:1864)
W/MediaCodecRenderer(20516): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.configureCodec(MediaCodecVideoRenderer.java:483)
W/MediaCodecRenderer(20516): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:805)
W/MediaCodecRenderer(20516): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodecWithFallback(MediaCodecRenderer.java:745)
W/MediaCodecRenderer(20516): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:474)
W/MediaCodecRenderer(20516): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.reinitializeCodec(MediaCodecRenderer.java:1261)
W/MediaCodecRenderer(20516): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1111)
W/MediaCodecRenderer(20516): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:552)
W/MediaCodecRenderer(20516): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:647)
W/MediaCodecRenderer(20516): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:529)
W/MediaCodecRenderer(20516): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:300)
W/MediaCodecRenderer(20516): 	at android.os.Handler.dispatchMessage(Handler.java:101)
W/MediaCodecRenderer(20516): 	at android.os.Looper.loop(Looper.java:164)
W/MediaCodecRenderer(20516): 	at android.os.HandlerThread.run(HandlerThread.java:65)
E/ExoPlayerImplInternal(20516): Playback error.
E/ExoPlayerImplInternal(20516): com.google.android.exoplayer2.ExoPlaybackException: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.Exynos.avc.dec, Format(1, null, null, video/avc, null, -1, null, [1440, 1080, -1.0], [-1, -1])
E/ExoPlayerImplInternal(20516): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:479)
E/ExoPlayerImplInternal(20516): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.reinitializeCodec(MediaCodecRenderer.java:1261)
E/ExoPlayerImplInternal(20516): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1111)
E/ExoPlayerImplInternal(20516): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:552)
E/ExoPlayerImplInternal(20516): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:647)
E/ExoPlayerImplInternal(20516): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:529)
E/ExoPlayerImplInternal(20516): 	at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:300)
E/ExoPlayerImplInternal(20516): 	at android.os.Handler.dispatchMessage(Handler.java:101)
E/ExoPlayerImplInternal(20516): 	at android.os.Looper.loop(Looper.java:164)
E/ExoPlayerImplInternal(20516): 	at android.os.HandlerThread.run(HandlerThread.java:65)
E/ExoPlayerImplInternal(20516): Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.Exynos.avc.dec, Format(1, null, null, video/avc, null, -1, null, [1440, 1080, -1.0], [-1, -1])
E/ExoPlayerImplInternal(20516): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodecWithFallback(MediaCodecRenderer.java:753)
E/ExoPlayerImplInternal(20516): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodec(MediaCodecRenderer.java:474)
E/ExoPlayerImplInternal(20516): 	... 9 more
E/ExoPlayerImplInternal(20516): Caused by: android.media.MediaCodec$CodecException: Error 0xffffec77
E/ExoPlayerImplInternal(20516): 	at android.media.MediaCodec.native_configure(Native Method)
E/ExoPlayerImplInternal(20516): 	at android.media.MediaCodec.configure(MediaCodec.java:1935)
E/ExoPlayerImplInternal(20516): 	at android.media.MediaCodec.configure(MediaCodec.java:1864)
E/ExoPlayerImplInternal(20516): 	at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.configureCodec(MediaCodecVideoRenderer.java:483)
E/ExoPlayerImplInternal(20516): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:805)
E/ExoPlayerImplInternal(20516): 	at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodecWithFallback(MediaCodecRenderer.java:745)
E/ExoPlayerImplInternal(20516): 	... 10 more

any solution ? thank you

@leonetosoft
Copy link

leonetosoft commented Aug 1, 2019

@nitneuq33

Every time you call "initialize ()" you create a new video instance, this can result in unnecessary resource usage.

I suggest that instead of using initialize to play the video again, you just change the playback position to the initial time of the video, so you don't have to be initializing all the time.

Detects that you have reached the end:

if (_controller.value.position >= _controller.value.duration ....)

@nitneuq33
Copy link

nitneuq33 commented Aug 2, 2019 via email

@nitneuq33
Copy link

nitneuq33 commented Aug 2, 2019

sorry I havn't a great trad of Portuguese^^ I understand your solution but don't know how to apply this ... have you a little example ? thank you

@nitneuq33
Copy link

I tried this

if (_controller.value.position >= _controller.value.duration ){
        _controller.value.position=0.0;      }

but position can"t be use as a setter because its final ...

@leonetosoft
Copy link

Hello good day,

Try it:

_controller.seekTo(Duration.zero);

@nitneuq33
Copy link

nitneuq33 commented Aug 2, 2019 via email

@nitneuq33
Copy link

nitneuq33 commented Aug 2, 2019 via email

@nitneuq33
Copy link

nitneuq33 commented Aug 2, 2019 via email

@leonetosoft
Copy link

Really this plugin has problems when you want to reuse the same component and just change the datasource ...

You can follow the beginning of this topic where I explain my solution to this question.

Repository: https://github.com/leonetosoft/flutter_video_player

Do not use:
_controller.dispose();
_controller.initialize();

The app will crash very soon if you do this.

@nitneuq33
Copy link

nitneuq33 commented Aug 3, 2019 via email

@iapicca
Copy link
Contributor

iapicca commented Nov 6, 2019

Hi all,
given this comments [1, 2] and related PR I can assume the initial issue resolved;
am I correct? @jamiegau @Abgaryan

I see the discussion being more recently pointing at the issue of
_controller.dispose();
_controller.initialize();
causing instability.

@leonetosoft , @nitneuq33
are you still experiencing this issue with the latest version?
Thank you

@iapicca iapicca added waiting for customer response The Flutter team cannot make further progress on this issue until the original reporter responds and removed waiting for PR to land (fixed) A fix is in flight labels Nov 6, 2019
@leonetosoft
Copy link

@iapicca

I can test ...

Actually I solved this problem by creating my video_player branch, in this branch I created an option to change the video source without having to destroy the component.

You mean they can now destroy without it locking up?

@nitneuq33
Copy link

nitneuq33 commented Nov 7, 2019

I upload last version but have same error, but it's with my old code. I tried to start a new projet with the example in github but I don't found how to launch a file from a path, I did this with my old code but I see only two solution NetworkPlayerLifeCycle or AssetsPlayerLifeCycle, I have a file in Movie/myfile.mp4 but I don't know how to call to test

@k2evil
Copy link

k2evil commented Nov 14, 2019

@iapicca
I tested the plugin and I can approve that in my case, the problem is gone.

@jamiegau
Copy link

Ok,
I ran though my test application on this library over the last week.
Not, its greatly improved. But after player say 2 days of trailers back to back, the player will crash.
Still thats 2 DAYS. much better then inital 1/2 a day.

I am looking at nightly restart-OS to make it reliable, but I am a ways of before I get back into making the player front end. Still developing the backend to feature complete.

The question I have, should I expect this to play forever indefinitely. I suppose I should. But is this considered "good enough"? 2 days without issue..

Hell, it could be another widget I am using that has the memory leak.
It does show a Classification PNG in the corner based on the trailer rating etc.

I could run it though the emulator again and capture the crash output. Tho for some reason take 3-4 days to crash when in emulator over a kogan Android TV set.

@iapicca
Copy link
Contributor

iapicca commented Nov 15, 2019

Hi all,
given your last messages I feel safe to close this issue,
which is specific for
The video_player plugin fails to play videos after playing successfully 10-15 times

if you disagree please write in the comments
and I will reopen it.

If you are experiencing different issues,
for example: NetworkPlayerLifeCycle usage or other memory leak;
please open an issue specific for your case,
providing your flutter doctor -v , a minimal code sample to reproduce the problem
and, if relevant, your flutter run --verbose or flutter build --verbose.

Thank you all for your contribution

@spiderion
Copy link

I still have this problem, I don't understand why this issue was closed?
@iapicca

@jamiegau
Copy link

From my understanding the original developer from Google, looked into this. Stated it was rectified under new revisions that effected the java side of the code..
In any case, I did more testing and it does appear to be fixed last time I tried it.
If you have issues under the current release I suggest you open a new bug and detail all the versions and some test code around it.

@leonetosoft
Copy link

I created a pull request so that I added the implementation of nextVideo for Android.

#53463

@lock
Copy link

lock bot commented Apr 15, 2020

This thread has been automatically locked since there has not been any recent activity after it was closed. If you are still experiencing a similar issue, please open a new bug, including the output of flutter doctor -v and a minimal reproduction of the issue.

@lock lock bot locked and limited conversation to collaborators Apr 15, 2020
@pedromassangocode pedromassangocode removed the waiting for customer response The Flutter team cannot make further progress on this issue until the original reporter responds label Feb 5, 2021
@flutter-triage-bot flutter-triage-bot bot added the package flutter/packages repository. See also p: labels. label Jul 5, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
c: crash Stack traces logged to the console customer: amplify e: device-specific Only manifests on certain devices engine flutter/engine repository. See also e: labels. p: video_player The Video Player plugin package flutter/packages repository. See also p: labels.
Projects
None yet
Development

No branches or pull requests