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

第二百八十八回

文章目录

  • 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来播放视频;
  • 该包主要通过控制器和视频播放器两个类来播放视频;
  • 控制器用来初始化视频文件,对视频文件进行播放,暂停等操作;
  • 视频播放器主要用来播放视频文件,相当于提供一个播放窗口;
  • 视频播放完成后要释放控制器相关的资源;
    看官们,与"如何播放视频"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!
http://www.lryc.cn/news/288950.html

相关文章:

  • 【日常学习笔记】gtest
  • go-zero配置DB的redis缓存
  • 物理服务器
  • 3.3 实验三:以太网链路聚合实验
  • php mysql字段默认值使用问题
  • 【linux】Debian防火墙
  • 2022年至2023年广东省职业院校技能大赛高职组“信息安全管理与评估”赛项样题
  • CC++内存管理【非常详细,对新手友好】
  • 022-安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用
  • 大白话解析LevelDB 3: SST Compaction
  • 【Python】02快速上手爬虫案例二:搞定验证码
  • C# 中的接口
  • 一篇文章带你了解C++中隐含的this指针
  • shardinig-JDBC二开-支持sharding-jdbc的配置文件接入到nacos
  • a-table自定义展开图标
  • Kubernetes Ingress暴露应用的工作流程
  • Redis应用(1)缓存(1.2)------Redis三种缓存问题
  • 安全 专题
  • 自然语言处理-文本对分类或回归
  • 以梦为码,CodeArts Snap 缩短我与算法的距离
  • SpringMVC-HttpMessageConverter 报文信息转化器
  • [AG32VF407]国产MCU+FPGA 使用I2C测试陀螺仪MPU6050
  • ES 可扩展、高可靠、使用场景等常见问题
  • <网络安全>《4 网络安全产品之web应用防护系统》
  • 如何解决Flutter应用程序的兼容性问题
  • 详解Mockito
  • 【论文+App试玩+图像到视频】2311.Animate-anyone:上传1张图片为任何人制作动画(用于角色动画的一致且可控的图像到视频合成)(暂未开源)
  • 【深度学习实验】TensorBoard使用教程【SCALARS、IMAGES、TIME SERIES】
  • 渗透测试(12)- WireShark 网络数据包分析
  • XSS_Labs靶场通关笔记