fijkplayer是一款开源免费的Flutter视频播放器,fijkplayer 使用 ijkplayer 作为播放器内核。ijkplayer 使用 ffmpeg 进行音视频解封装和解码,同时添加了 Android 和 iOS 平台特有的硬件加速解码能力。
安装步骤:
新建 Flutter App 项目
终端输入以下命令,新建一个名为 playerapp 的 Flutter App 项目。
$ flutter create -t app playerapp
命令运行结束后,Flutter 会给我们如下提示。
In order to run your application, type: $ cd playerapp $ flutter run Your application code is in playerapp/lib/main.dart.
连接上手机设备(或者打开 Android 模拟器),并且使用 flutter doctor 命令检查设备是否连接成功。
$ flutter doctor Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel stable, v1.7.8+hotfix.4, on Mac OS X 10.14.3 18D109, locale zh-Hans-CN) [✓] Android toolchain - develop for Android devices (Android SDK version 28.0.3) [✓] Xcode - develop for iOS and macOS (Xcode 10.3) [✓] iOS tools - develop for iOS devices [✓] Android Studio (version 3.4) [✓] IntelliJ IDEA Ultimate Edition (version 2019.1.2) [✓] VS Code (version 1.36.1) [✓] Connected device (1 available) • No issues found!
在 flutter doctor 命令的输出中,至少应该含有 [✓] Connected device (1 available)
安装 fijkplayer 依赖
进入上一步中创建的目录 playerapp 中,编辑其中的文件 pubspec.yaml ,增加依赖 fijkplayer: ^0.0.7
dependencies: flutter: sdk: flutter + fijkplayer: ^0.0.7
然后在 playerapp 目录中运行如下命令安装依赖,等待命令成功完成。
$ flutter pub get --verbose
验证依赖安装
安装完 fijkplayer 之后我们先验证一下,确保安装正确。
编辑 lib/main.dart 文件,在开头加入如下行,引入 fijkplayer。
import 'package:fijkplayer/fijkplayer.dart';
然后分别编译 ios 和 android 项目,确保 build 成功
$ flutter build apk $ flutter build ios --no-codesign
如果 build apk 时太久时间没有输出,可以先在 android 目录运行 ./gradlew 检查 gradle 环境是否正确。
播放器状态:
idle 闲置状态,刚完成构造的 FijkPlayer 处于此状态。
此状态下播放器占用少量内存,无额外线程启动。
idle 状态只能通过 setDataSource 转换为 initialized 状态
initialized 初始化完成状态,和 idle 状态相比,仅是多了输入媒体数据源的信息。 同样无额外线程打开。
asyncPreparing 异步准备状态,在 initialized 状态调用 prepareAsync 到达此状态。
这不是一个稳定状态,此状态等待特定任务完成后自动转化为 prepared 状态。
这一状态的主要准备工作是 探测媒体文件类型,打开媒体文件,打开解码器以及新建解码线程,新建数据 read 线程,打开音频输出设备,新建视频输出线程等。
prepared asyncPreparing 完成指定任务后自动转化为此状态。
此状态下已经缓冲并解码了一部分音视频数据,可以随时进行播放。
started 媒体(视频、音频)正在播放中。
paused 媒体(视频、音频)播放暂停。
completed 媒体(视频、音频)播放完成。 可重新从头开始播放。
stopped 播放器各种线程占用资源都已经释放。 音频设备关闭。
end 播放器中所有需要手动释放的内存都释放完成。
处于此状态的播放器只能等待垃圾回收进行内存释放。