视频播放 - 准备工作及注意事项
// 以下是视频播放功能在Flutter开发前的准备工作及一些需要注意的事项。
1、把自己的 android stuido 升级为最新版本,Xcode 升级成最新版本。否则安装配置插件的时候可能会出现问题
2、安装完成调用原生的 api 库后,需要重新运行 flutter run
3、如果运行 flutter run 失败,请打开 android studio 后重新运行,如果 android studio 下载包失败的话请用电脑连接手机热点重试。
4、如果依赖安装完成后引入库提示错误,请重启 Vscode
Flutter 视频播放插件介绍
// Flutter官方提供了一个叫做video_player的插件来播放视频,但这个插件在UI和功能上有一些限制。
// 因此,这里我们会使用一个更强大的第三方插件chewie来播放视频。
// chewie是基于video_player构建的,但它提供了更多的功能,如控制栏、全屏播放等,并且提供了更友好的Material或Cupertino界面。
在 Flutter 里官方提供了一个 video_player 插件可以播放视频。但是 video_player 有一些局限性。没法控制底部播放进度等。 所以我们主要给大家讲解一个第三方的视频播放库chewie。chewie 是一个非官方的第三方视频播放组件,看起来好像是基于 HTML5 播放的组件。chewie 相对 video_player 来说,有控制栏和全屏的功能。Chewie 使用 video_player 引擎并将其包裹在友好的 Material 或 Cupertino UI 中!
// 安装这两个插件的链接如下:
https://pub.dev/packages/video_playe
https://pub.dev/packages/chewie
视频播放功能的实现 - 代码实现
// 下面是使用video_player和chewie实现视频播放功能的Flutter代码示例。
import 'package:flutter/material.dart';
import 'package:video_player/video_player.dart';
import 'package:chewie/chewie.dart';
class CameraPage extends StatefulWidget {
CameraPage({Key key});
_CameraPage createState() => _CameraPage();
}
class _CameraPage extends State<CameraPage> {
var videoPlayerController; // 视频播放控制器
var chewieController; // chewie视频组件控制器
var play = true; // 控制视频播放状态,true为播放,false为暂停
@override
initState() {
super.initState();
}
@override
dispose() {
super.dispose();
videoPlayerController.dispose(); // 释放视频资源
chewieController.dispose(); // 释放chewie组件资源
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('设备硬件')
),
body: ListView(
children: <Widget>[
RaisedButton(child: Text('播放视频'), onPressed: () {
playAudio();
setState(() {
play = true;
});
}),
play ? Container(child: Chewie(controller: chewieController),) : SizedBox(height: 0,)
]
)
);
}
// 播放视频的函数
playAudio() {
videoPlayerController = VideoPlayerController.network('http://vfx.mtime.cn/Video/2019/02/04/mp4/190204084208765161.mp4');
chewieController = ChewieController(
videoPlayerController: videoPlayerController,
aspectRatio: 3 / 2,
autoPlay: true,
looping: true,
);
}
}