前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flutter视频播放、Flutter VideoPlayer 视频播放组件精要

Flutter视频播放、Flutter VideoPlayer 视频播放组件精要

原创
作者头像
易寒
发布2022-02-08 17:57:19
4.8K0
发布2022-02-08 17:57:19
举报
文章被收录于专栏:Android知识

1 添加依赖

代码语言:txt
复制
  # 视频播放
  video_player: ^1.0.1

2 播放视频前的准备

2.1 网络访问权限

在 ios 目录下的 info.plist 清单文件中配置 iOS设置的http网络访问权限 :

代码语言:txt
复制
<key>NSAppTransportSecurity</key>
<dict>
  <key>NSAllowsArbitraryLoads</key>
  <true/>
</dict>

如下图所示

在 android 目录下的 AndroidManifest.xml 清单文件中配置网络请求权限以及http的访问权限

代码语言:txt
复制
    <!--    网络请求权限-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--外部文件存储权限-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

networkSecurityConfig 配置的是 http访问权限

代码语言:txt
复制
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true" />
</network-security-config>

3 视频播放

视频资源的加载以及播放控制全部是通过 VideoPlayerController来操作的

3.1 视频资源的加载

代码语言:txt
复制
VideoPlayerController  _playerController ;
  @override
  void initState() {
    super.initState();

    //网络链接
    //VideoPlayerController.network(url);
    //VideoPlayerController.file(File(url));
    //本地链接
    _videoPlayerController =
        VideoPlayerController.asset("asset资源路径");

   //调用初始化方法
   _videoPlayerController.initialize()
     //异步执行完的回调
     ..whenComplete(() {
       //刷新页面
       setState(() {});
     });

  }

3.2 视频播放组件

代码语言:txt
复制
AspectRatio(
   //设置视频的大小 宽高比。长宽比表示为宽高比。例如,16:9宽高比的值为16.0/9.0
   aspectRatio: _videoPlayerController.value.aspectRatio,
   //播放视频的组件
   child: VideoPlayer(_videoPlayerController),
 ),
)

3.3 视频播放相关控制

代码语言:txt
复制
    //获取当前视频播放的信息
    VideoPlayerValue videoPlayerValue = _videoPlayerController.value;

    //是否初始化完成
    bool initialized = videoPlayerValue.initialized;
    //是否正在播放
    bool isPlaying = videoPlayerValue.isPlaying;
    //当前播放的视频的宽高比例
    double aspectRatio = videoPlayerValue.aspectRatio;
    //当前视频是否缓存
    bool isBuffer = videoPlayerValue.isBuffering;
    //当前视频是否循环
    bool isLoop = videoPlayerValue.isLooping;
    //当前播放视频的总时长
    Duration totalDuration = videoPlayerValue.duration;
    //当前播放视频的位置
    Duration currentDuration = videoPlayerValue.position;
    if (initialized) {
      // 视频已初始化
      if (isPlaying) {
        // 正播放 --- 暂停
        _videoPlayerController.pause();
      } else {
        //暂停 ----播放
        _videoPlayerController.play();
      }
      setState(() {});
    } else {
      //未初始化
      _videoPlayerController.initialize().then((_) {
        // videoPlayerController.play();
        // setState(() {});
      });
    }

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云点播
面向音视频、图片等媒体,提供制作上传、存储、转码、媒体处理、媒体 AI、加速分发播放、版权保护等一体化的高品质媒体服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档