当前位置: 首页 > 知识库问答 >
问题:

在Flutter中,获取URL但无法在视频播放器上显示视频,并出现错误

阮雅达
2023-03-14

我无法在UI中显示视频,但我得到URL,它显示一些“未处理的异常:坏状态:未来已经完成”

   List<String> videoList = [];
   
   VideoPlayerController _controller;

    @override
   void initState() {
super.initState();
getVideos(context);
  }

  @override
  Future<void> dispose() async {
  super.dispose();
  if (videoList != null && mounted) {
  await _controller.dispose();

   }
}

我要显示视频的代码:

        Container(
              height: 200.0,
              padding: EdgeInsets.symmetric(vertical: 15.0, horizontal: 15.0),
              child: ListView(
                //shrinkWrap: true,
                scrollDirection: Axis.horizontal,
                children: [
                  FutureBuilder (
                      future: hasInitialized,
                      builder: (context, snapshot){
                        if (snapshot.connectionState == ConnectionState.done) {
                          return new ListView.builder(
                            shrinkWrap: true,
                            scrollDirection: Axis.horizontal,
                              itemCount:videoList.length,
                              itemBuilder: (BuildContext context,int index){
                              return Container(
                                height: 180,
                                width: 180,
                                padding: EdgeInsets.all(10),
                                child: _controller.value.isInitialized ?

                                    Stack(
                                      children: [
                                        VideoPlayer(_controller),
                                        _ControlsOverlay(_controller),
                                        // AspectRatioVideo(_controller),
                                      ],
                                    )
                                    :Container()
                              );
                            }
                            );
                        } else {
                          return
                            //Text("No video");
                          Center(child: CircularProgressIndicator(),);
                        }
                      }
                  )
                ],
              ),

            ),

我获取视频网址的代码:

                Future  hasInitialized;
         Future<List<String>> getVideos(context) async {
       var document = await          FirebaseFirestore.instance.collection("users").
         doc(auth.currentUser.uid).get();
        List<String> videos = [];
      for (var item in document.data()['videos']) {
        videos.add(item);
             }
       setState(() {
         _controller =    VideoPlayerController.network(videoList.toString());
        // _controller =  VideoPlayerController.network(videoList[videos]);
       _controller.addListener(() {
          setState(() {});
         });
       hasInitialized = _controller.initialize();
       _controller.setLooping(false);
         _controller.initialize();
        });

      videoList= videos;
     print(videoList.length);
    print(videoList);
     return videos;
      }

我得到的错误:

[错误:flatter/lib/ui/ui\u dart\u state.cc(186)]未处理的html" target="_blank">异常:错误状态:未来已完成E/flatter(9697):#0 _AsyncCompleter。完成(dart:async/future\u impl.dart:45:31)E/Flatter(9697):#1个VideoPlayerController。初始化(包:video\u player/video\u player.dart:310:25)E/flatter(9697):E/flatter(9697):E/ExoPlayerImplInternal(9697):播放错误E/ExoPlayerImplInternal(9697):com.google.android.exoplayer2.ExoPlaybackException:源错误E/ExoPlayerImplInternal(9697):在com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:554)E/ExoPlayerImplInternal(9697):在android.os.Handler.dispatchMessage(Handler.java:102)E/ExoPlayerImplInternal(9697):在android.os.Looper.loop(Looper.java:223)E/ExoPlayerImplInternal(9697):在android.os.HandlerThread.run(HandlerThread.java:67)E/ExoPlayerImplInternal(9697):由:com.google.android.exoplayer2.upstream引起。FileDataSource$FileDataSourceException:com.google.android.exoplayer2.upstream。FileDataSource$FileDataSourceException:java.io。FileNotFoundException:[]:打开失败:eNet(没有这样的文件或目录)E/ExoPlayerImplInternal(9697):在com.google.android.exoplayer2.upstream.FileDataSource.open(FileDataSource.java:97)E/ExoPlayerImplInternal(9697):在com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:199)E/ExoPlayerImplInternal(9697):在com.google.android.exoplayer2.upstream.StatsDataSource.open(StatsDataSource.java:84)E/ExoPlayerImplInternal(9697):位于com.google.android.exoplayer2.source.ProgressiveMediaPeriod$ExtractingLoadable.load(ProgressiveMediaPeriod.java:1013)E/ExoPlayerImplInternal(9697):位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)E/ExoPlayerImplInternal(9697):at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)E/ExoPlayerImplInternal(9697):at java.lang.Thread.run(Thread.java:923)E/ExoPlayerImplInternal(9697):由com.google.android.exoplayer2.upstr。FileDataSource$FileDataSourceException:java.io。FileNotFoundException:[]:打开失败:eNet(没有这样的文件或目录)E/ExoPlayerImplInternal(9697):在com.google.android.exoplayer2.upstream.FileDataSource.openLocalFile(FileDataSource.java:166)E/ExoPlayerImplInternal(9697):在com.google.android.exoplayer2.upstream.FileDataSource.open(FileDataSource.java:89)E/ExoPlayerImplInternal(9697):…7更多E/ExoPlayerImplInternal(9697):原因:java.io。FileNotFoundException:[]:打开失败:eNote(没有这样的文件或目录)E/ExoPlayerImplInternal(9697):在libcore.io.IoBridge.open(IoBridge.java:492)E/ExoPlayerImplInternal(9697):在java.io.RandomAccessFile。(RandomAccessFile.java:289)E/ExoPlayerImplInternal(9697):在java.io.RandomAccessFile。(RandomAccessFile.java:152)E/ExoPlayerImplInternal(9697):在com.google.android.exoplayer2.upstream.FileDataSource.openLocalFile(FileDataSource.java:155)E/exoplayerimplininternal(9697):…8更多E/exoplayerimplininternal(9697):由:android.system引起。ErrnoException:open失败:enent(没有这样的文件或目录)E/ExoPlayerImplInternal(9697):位于libcore.io.Linux。open(本机方法)E/exoplayerimplininternal(9697):在libcore.io.ForwardingOs.open(ForwardingOs.java:166)E/exoplayerimplininternal(9697):在libcore.io.BlockGuardOs.open(BlockGuardOs.java:254)E/exoplayerimplininternal(9697):在libcore.io.ForwardingOs.open(ForwardingOs.java:166)E/exoplayerimplininternal(9697):在android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7542)E/ExoPlayerImplInternal(9697):在libcore.io.IoBridge.open(IoBridge.java:478)E/ExoPlayerImplInternal(9697):…11更多E/ExoPlayerImplInternal(9697):播放错误

共有1个答案

何涵畅
2023-03-14

_controller.initialize();返回一个Future我猜。你调用了两次:

hasInitialized = _controller.initialize();
_controller.setLooping(false);
_controller.initialize();

这就是为什么你会得到:未来已经完成

 类似资料:
  • 在我的应用程序中,我想显示来自服务器URI路径的视频,在这里,第一次播放视频,当我想第二次播放视频时,视频没有播放,并显示一个弹出窗口,如无法播放此视频 下面是我的错误 提前谢谢。

  • 每当我加载html文件时,它都会给我一个错误 每当我按下播放按钮时,就会出现以下错误 我能够加载任何远程视频并运行,但问题是当我从资产文件夹代码加载本地视频以加载文件并设置web视图时 干杯,Saurav

  • 我将颤动更新到1.22.0,现在我的video_player给我异常错误。在我将颤动更新到1.22.0之前,它工作正常。 这是我的错误: E/颤动 ( 8545): [错误:颤动/库/ui/ui_dart_state.cc(177)] 未处理的异常:“包:颤动/src/服务/message_codec.dart”:断言失败:第 111 行 pos 15:“代码 != null”:不为 true。E

  • 下面是我的代码以及报错信息,不知道是哪里错了,这个url地址我测试过也是可以的,在这里先谢谢各位大哥们的解答,小弟感激不尽!!

  • 问题内容: 无法播放此视频错误… !! 看到图片 截屏 怎么办?按下播放按钮后,它说不能播放此视频。需要解决这个问题。 问题答案: 您好,前天我遇到了同样的问题,几乎尝试了所有方法,但都没有成功。之后,我使用了这个库,并且运行良好。只需遵循几个步骤: 第1步。 将其添加到您的gradle 第2步。 将其添加为xml布局中的视频播放。 第3步。 从此处检查如何在您的班级中使用此库, 我这边还有另外一

  • 我对录影带所能想象到的知识微乎其微。尽管如此,我正在构建一个需要以下功能的应用程序:给定视频的url,播放视频。这个看似简单的任务对我来说却是非常困难的。下面是我的代码: XML: Java: 下面是我得到的错误: 有趣的是,我可以看到控制肥大底部的VideoView一瞬间。但没有视频播放,只有VideoView的背景显示。有人知道我该怎么解决吗? 一旁 否则,是否有已知的库可以做到这一点?理想情