如何捕捉fletch video_player插件错误?

时间:2019-05-03 10:02:55

标签: flutter

如何在flutter video_player插件上捕获错误? 错误为Source error。当发生此错误时,我想显示错误消息。

I/ExoPlayerImpl(31473): Init 98a4284 [ExoPlayerLib/2.9.6] [kenzo, Redmi Note 3, Xiaomi, 23]
E/ExoPlayerImplInternal(31473): Source error.
E/ExoPlayerImplInternal(31473): com.google.android.exoplayer2.source.UnrecognizedInputFormatException: None of the available extractors (MatroskaExtractor, FragmentedMp4Extractor, Mp4Extractor, Mp3Extractor, AdtsExtractor, Ac3Extractor, TsExtractor, FlvExtractor, OggExtractor, PsExtractor, WavExtractor, AmrExtractor) could read the stream.
E/ExoPlayerImplInternal(31473):     at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractorHolder.selectExtractor(ExtractorMediaPeriod.java:973)
E/ExoPlayerImplInternal(31473):     at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:891)
E/ExoPlayerImplInternal(31473):     at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:381)
E/ExoPlayerImplInternal(31473):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
E/ExoPlayerImplInternal(31473):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
E/ExoPlayerImplInternal(31473):     at java.lang.Thread.run(Thread.java:818)
I/flutter (31473): Another exception was thrown: A ChewieController was used after being disposed.
I/ExoPlayerImpl(31473): Release 98a4284 [ExoPlayerLib/2.9.6] [kenzo, Redmi Note 3, Xiaomi, 23] [goog.exo.core]

我的代码

animeVidBloc.vidCtrl = VideoPlayerController.network(streamurl.src)
          ..initialize().then((_) {
            animeVidBloc.vidCtrl.pause();
            animeVidBloc.cheCtrl = ChewieController(
              videoPlayerController: animeVidBloc.vidCtrl,
              aspectRatio: animeVidBloc.vidCtrl.value.aspectRatio,
              autoPlay: false,
              looping: false,
              allowedScreenSleep: false,
            );
            animeVidBloc.isLoadingData = false;
            animeVidBloc.isLoadingVideo = false;
            animeVidBloc.cheCtrl.pause();
            animeVidBloc.rebuildWidgets(ids: ['body', 'download']);
          });

.catch之后使用initialize().then无法捕获错误, 示例视频https://str09.vidoza.net/x4lfoiywwbzpvjumxbaeidisvq6cmoufczvmicnesasm4zqpyunkofpekfla/v.mp4

1 个答案:

答案 0 :(得分:0)

您可以将侦听器附加到VidePlayerController对象以捕获控制器的状态。

VideoPlayerController _controller = VideoPlayerController.network(
    "https://str09.vidoza.net/x4lfoiywwbzpvjumxbaeidisvq6cmoufczvmicnesasm4zqpyunkofpekfla/v.mp4")
  ..initialize();

_controller.addListener(() {
  if (_controller.value.hasError) {
    print(_controller.value.errorDescription);
  }
  if (_controller.value.initialized) {}
  if (_controller.value.isBuffering) {}
});