当前位置: 首页 > news >正文

VideoPlayer插件的用法

文章目录

  • 1. 概念介绍
  • 2. 使用方法
    • 2.1 实现步骤
    • 2.2 具体细节
  • 3. 示例代码
  • 4. 内容总结

我们在上一章回中介绍了"如何获取文件类型"相关的内容,本章回中将介绍如何播放视频.闲话休提,让我们一起Talk Flutter吧。

1. 概念介绍

播放视频是我们常用的功能,不过Flutter官方SDK中没有提供这样的API,怎么办呢?官方也想到了这点,因此提供了video_player包供开发人员使用,本章回中将
详细介绍如何通过该包提供的API来播放视频。

在这里插入图片描述

2. 使用方法

2.1 实现步骤

下面是使用video_palyer包播放视频的详细步骤,请大家参考:

  • 在yaml配置文件中添加包,并且获取包到项目中;
  • 创建控制器对象,也就是包中提供的VideoPlayerController类的实例;
  • 使用控制器对象初始化,并且设置声音等视频播放参数;
  • 使用控制器对象创建视频播放器对象,也就是包中提供的VideoPlayer类的实例;
  • 通过控制器对象操作视频,比较播放视频,暂停播放视频等;
  • 视频播放完成后释放控制器相关资源;

2.2 具体细节

在上面介绍的步骤中还有一些细节需要说明,主要是创建控制器对象和创建视频播放器对象这两个步骤:

  • 创建控制器对象需要使用VideoPlayerController的file()或者networkUrl()方法。这两个方法用来把本地存储中的视频文件,或者网络上的视频文件转换成
    控制器对象,方法的参数是本地视频文件的绝对地址或者网络视频文件的链接,此外,播放网络视频时还需要在配置文件中添加网络权限;
  • 创建视频播放器对象时直接使用VideoPlayer类的构造方法就可以,该方法只有一个控制器类型的参数,把控制器对象传递给该方法就可以;
  • 视频播放时有一定宽高比,最好在视频播放器外层嵌套一个AspectRatio组件,这样可以限制视频播放器的宽高比,进而达到良好的播放效果;
    我们先用文本介绍这些细节内容,在后面的小节中将通过示例代码来演示。

3. 示例代码

///创建控制器对象并且进行初始化操作VideoPlayerController? _controller = VideoPlayerController.file(File(file_path));await _controller?.setVolume(0.0);await _controller?.initialize();await _controller?.setLooping(true);///创建视频播放器对象Center(///控制视频的宽高比child: AspectRatio(aspectRatio: controller!.value.aspectRatio,child: VideoPlayer(controller!),),);///通过按钮播放、暂停视频
Container(width: 64,color: Colors.green,child: IconButton(onPressed: () {setState(() {_controller!.value.isPlaying? _controller?.pause(): _controller?.play();});},icon: _controller == null? const Icon(Icons.video_call): (Icon(_controller!.value.isPlaying? Icons.pause: Icons.play_arrow)),),
),///释放控制器相关资源

void dispose() {_controller = null;super.dispose();
}

4. 内容总结

最后,我们对本章回的内容做一个全面总结:

  • 在Flutter开发中需要使用三方包video_player来播放视频;
  • 该包主要通过控制器和视频播放器两个类来播放视频;
  • 控制器用来初始化视频文件,对视频文件进行播放,暂停等操作;
  • 视频播放器主要用来播放视频文件,相当于提供一个播放窗口;
  • 视频播放完成后要释放控制器相关的资源;
    看官们,与"如何播放视频"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 富格林:活用阻挠欺诈套路计策
  • 从零开始搭建 EMQX 集群压测框架
  • linux:有关目录、链接文件的函数 Makefil、gdb的使用
  • Nature Medicine | 常规机器学习构建蛋白质组衰老时钟!对于数学基础不好的同学,好好思考一下这种研究模式如何借鉴?
  • 暨南大学2024年硕士研究生报考录取情况统计表
  • Java面试八股之简述消息队列P2P模型
  • 硬件面试经典 100 题(51~70 题)
  • Collection - LinkedList 源码解读
  • [Windows CMD] 查看网络连接状态 netstat -na | findstr “TCP“
  • 【投融界-注册安全分析报告】
  • 富格林:谨防虚假陷阱杜绝暗箱
  • Javascript反调试实现判断用户是否打开了浏览器控制台
  • 【一招解决】局域网内命令行无法通过代理进行依赖下载,适用于npm、pip、mvn、gradle等命令
  • EXTI外部中断之对射式红外传感器计次应用案例
  • 鱼眼相机去畸变和矫正
  • 自己简单写的 事件订阅机制
  • [译]CSS 居中(Center)方法大合集
  • 345-反转字符串中的元音字母
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Docker 笔记(2):Dockerfile
  • Go 语言编译器的 //go: 详解
  • JavaScript新鲜事·第5期
  • Java小白进阶笔记(3)-初级面向对象
  • linux安装openssl、swoole等扩展的具体步骤
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Linux后台研发超实用命令总结
  • mysql innodb 索引使用指南
  • PHP变量
  • Python - 闭包Closure
  • 构建二叉树进行数值数组的去重及优化
  • 欢迎参加第二届中国游戏开发者大会
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 使用SAX解析XML
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #define用法
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • (3)llvm ir转换过程
  • (备份) esp32 GPIO
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .gitignore不生效的解决方案
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net core 外观者设计模式 实现,多种支付选择
  • .net core控制台应用程序初识
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • .NET基础篇——反射的奥妙
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)