有没有一种方法可以使视频播放器中的控件播放youtube视频颤动网络

问题描述

我正在制作一个页面,以显示来自youtube的许多视频,并在动态网络中使用ext_video_player。但是现在我要启用显示控件。我也希望它可以用于应用程序。我在流程发布中的this堆栈中看到过。但是chewie播放器说它需要从video_player而不是ext_video_player来的视频控制器播放器。还有其他方法可以使它适用于Flutter Web和应用程序,还可以用于youtube视频。由于某些原因,YouTube播放器插件不是一个选择。我什至无法做到这一点。使用rn

代码
class videoBox2 extends StatefulWidget {
  String Video;
  videoBox2(this.Video);
  @override
  _videoBox2State createState() => _videoBox2State(Video);
}

class _videoBox2State extends State<videoBox2> {
  String Video;
  bool error = false;
  _videoBox2State(this.Video);
  VideoPlayerController _controller;
  @override
  void dispose(){
    super.dispose();
    _controller.dispose();
  }
  @override
  void initState(){
    super.initState();
    _controller = VideoPlayerController.network(
      Video,);

    _controller.initialize().then((value) {
      setState(() {
      });
    });
    _controller.addListener(() {
      if (_controller.value.hasError) {
        setState(() {
          error = true;
          print(Video);
        });
      }
    });
  }
  @override
  Widget build(BuildContext context) {
    return error?Container(
        decoration: Boxdecoration(
            color: Colors.white,borderRadius: BorderRadius.all(Radius.circular(15))
        ),child: Image(fit:BoxFit.cover,image:NetworkImage("https://hiapseng-thailand.com/wp-content/themes/skywalker/facilities/video-placeholder.jpg"))
    ):GestureDetector(
        onTap:(){
          _controller.value.isPlaying?
          _controller.pause()
              :_controller.play();
        },child: Container(
          width:MediaQuery.of(context).size.width*0.7,decoration: Boxdecoration(
              color: Colors.white,borderRadius: BorderRadius.all(Radius.circular(15))
          ),child:  VideoPlayer(_controller),)
    );
  }
}

解决方法

所以我最终做了一个非常简单的技术。我导入了chewie视频播放器,并从外部库中的dart插件中打开了它的文件。然后,我将所有video_player / video_player.dart更改为ext_video_player / ext_video_player.dart。 ext_video_player只是视频播放器的扩展

警告:-这将影响所有使用chewie播放器的项目。进行更改,构建项目,然后删除更改

所以您要做的是转到外部库文件夹,然后打开Dart Packages,然后向下滚动到chewie-0.12.0文件夹(或您使用的任何软件包)\

然后打开源文件夹,并转到以下文件:-\

  1. chewie_player.dart
  2. cupertino_controls.dart
  3. cupertino_progress_bar.dart
  4. material_controls.dart
  5. material_progress_bar.dart
  6. player_with_controls.dart \

现在所有这些文件中,您都必须滚动到顶部并找到这一行

import 'package:video_player/video_player.dart';

并替换为

import 'package:ext_video_player/ext_video_player.dart';

请记住将ext_video_player包导入pubspec.yaml中。阅读此软件包的说明,但基本上您可以提供一个youtube网址 VideoPlayer.network() 事情。我希望这能解决您的问题。如果您不希望这样做,也可以将网络视图用于应用程序或将iframe用于网站

,

由于运行 flutter clean 时 Dart 包将被删除,因此使用 @Siddharth 答案,我分叉 Chewie 并根据 @Siddharth 答案进行编辑(将 video_player 更改为 ext_video_player)。

您可以在 pubspec.yaml 中将您的 Chewie 更改为我的 git:

  chewie:
    git:
      url: https://github.com/azhar-rafiq/chewie/

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...