统一video插件

This commit is contained in:
sky.min 2026-10-10 17:25:12 +08:00
parent 485f1f19c8
commit 12c54045e3
5 changed files with 44 additions and 25 deletions

View File

@ -6,7 +6,7 @@ Flutter 智能锁接入 SDK。SDK 封装了星云账户、蓝牙扫描和配对
## 交付内容
实际交付根目录包含下列五个同级目录。`flutter_sdk` 通过相对路径依赖前三个底层包;`video_decode_plugin` 是示例工程的视频渲染可选组件:
`flutter_sdk` 通过固定 Git 提交依赖 `starlock_ble`、`starcloud` 和 `starchart`;`video_decode_plugin` 是示例工程的视频渲染可选组件:
```text
vendor/
@ -33,7 +33,7 @@ vendor/
## 安装
将 `flutter_sdk`、`starlock_ble`、`starcloud`、`starchart` 放入宿主 App 的 `vendor/`。需要使用示例同款 FFmpeg 视频渲染时,再一并放入 `video_decode_plugin`。
宿主项目需要具有读取 `minbingbing` 名下私有 Gitea 仓库的权限。`flutter_sdk` 的底层 SDK 依赖会在 `pub get` 时按固定提交自动拉取,不需要放入同级 `vendor/` 目录。
宿主 `pubspec.yaml` 的最小依赖只需要声明 `flutter_sdk`:
@ -46,7 +46,7 @@ dependencies:
path: vendor/flutter_sdk
```
`flutter_sdk` 的 `pubspec.yaml` 已通过 `path: ../starlock_ble`、`../starcloud`、`../starchart` 引用同级底层包,因此宿主执行一次依赖安装即可递归解析全部核心包:
`flutter_sdk` 的 `pubspec.yaml` 已通过固定 Git 提交引用底层包,因此宿主执行一次依赖安装即可递归解析全部核心包:
```bash
fvm flutter pub get
@ -56,7 +56,9 @@ fvm flutter pub get
```yaml
video_decode_plugin:
path: vendor/video_decode_plugin
git:
url: https://code.skychip.top/sky/video_decode_plugin.git
ref: 26ce13204e017f421c6b236c0342a40c0cd120ac
```
然后仍只需要在宿主 App 根目录再执行一次 `fvm flutter pub get`。**不需要**为正常集成专门进入 `video_decode_plugin`、`starlock_ble`、`starcloud` 或 `starchart` 逐个执行 `pub get`;只有开发/测试这些包自身或运行它们的独立 example 时才需要。
@ -280,7 +282,7 @@ final status = await StarCloudClient.instance.wifi.getGatewayStatus(
### 6. 视频对讲
视频对讲服务只负责注册、呼叫和事件分发;H264 解码渲染、G711 编解码、麦克风采集与权限处理由宿主 App 集成。示例工程使用本地 `video_decode_plugin` 的 FFmpeg 后端进行 H264 解码渲染。
视频对讲服务只负责注册、呼叫和事件分发;H264 解码渲染、G711 编解码、麦克风采集与权限处理由宿主 App 集成。示例工程使用 `video_decode_plugin` 的 FFmpeg 后端进行 H264 解码渲染。
```dart
await StarCloudClient.instance.talk.init(

View File

@ -9,7 +9,7 @@
- Flutter 3.19.6(项目通过 FVM 管理)
- Android 真机或 iOS 真机
- 已按根目录 [README](../README.md) 配置蓝牙、定位、网络、麦克风和相机权限
- 需要 `flutter_sdk`、`starlock_ble`、`starcloud`、`starchart` 及 `video_decode_plugin` 位于当前相对路径所指向的位置
- 需要具有读取相关私有 Gitea 仓库的权限;底层 SDK 与 `video_decode_plugin` 会按 `pubspec.yaml` 固定的 Git 提交拉取
安装依赖并运行:
@ -19,7 +19,7 @@ fvm flutter pub get
fvm flutter run
```
不需要先进入 `../../video_decode_plugin` 执行 `fvm flutter pub get`:本示例的 `pubspec.yaml` 已以 `path: ../../video_decode_plugin` 声明该插件,执行本目录的 `fvm flutter pub get` 会递归解析其依赖。只有修改插件源码或运行插件自身示例时,才进入插件目录单独执行该命令。
不需要先进入 `video_decode_plugin` 执行 `fvm flutter pub get`:执行本目录的 `fvm flutter pub get` 会按固定 Git 提交递归解析其依赖。只有修改插件源码或运行插件自身示例时,才进入插件目录单独执行该命令。
若只做代码检查:
@ -88,7 +88,7 @@ https://cloud.skychip.top/sdk
[DIAG] decoder active engine=ffmpeg
```
若日志显示 `mediacodec`,说明运行的不是当前 FFmpeg 配置;请检查本地 `video_decode_plugin` 路径、重新构建 APK,并确认未使用旧产物。
若日志显示 `mediacodec`,说明运行的不是当前 FFmpeg 配置;请确认已解析 `video_decode_plugin` 的指定 Git 提交、重新构建 APK,并确认未使用旧产物。
## 示例配置位置

View File

@ -212,7 +212,7 @@ class _VideoTalkTabState extends State<VideoTalkTab> {
Future<bool> _doInitDecoder() async {
if (_decoderReady) return true;
try {
// 参考项目 Android 端的 video_decode_plugin 默认使用 FFmpeg;这里显式
// video_decode_plugin 的 Android 端默认使用 FFmpeg;这里显式
// 保持同一后端,避免插件默认值变化时两端走出不同的解码流程。
final engineState = await VideoDecodePlugin.setDecodeEngine(
VideoDecodePlugin.engineFfmpeg,

View File

@ -607,23 +607,29 @@ packages:
starchart:
dependency: transitive
description:
path: "../../starchart"
relative: true
source: path
path: "."
ref: "003705cf35ffc8039e749077197879e50ecc4248"
resolved-ref: "003705cf35ffc8039e749077197879e50ecc4248"
url: "https://code.skychip.top/minbingbing/starchart.git"
source: git
version: "0.1.0"
starcloud:
dependency: "direct main"
description:
path: "../../starcloud"
relative: true
source: path
path: "."
ref: "500c733e571bb9354812722ef7d16daf703d28b3"
resolved-ref: "500c733e571bb9354812722ef7d16daf703d28b3"
url: "https://code.skychip.top/minbingbing/starcloud.git"
source: git
version: "0.1.2"
starlock_ble:
dependency: "direct main"
description:
path: "../../starlock_ble"
relative: true
source: path
path: "."
ref: "045a1ee931ddc8fa92a481358202023a19144187"
resolved-ref: "045a1ee931ddc8fa92a481358202023a19144187"
url: "https://code.skychip.top/minbingbing/starlock_ble.git"
source: git
version: "0.1.0"
stream_channel:
dependency: transitive
@ -700,9 +706,11 @@ packages:
video_decode_plugin:
dependency: "direct main"
description:
path: "../../video_decode_plugin"
relative: true
source: path
path: "."
ref: "26ce13204e017f421c6b236c0342a40c0cd120ac"
resolved-ref: "26ce13204e017f421c6b236c0342a40c0cd120ac"
url: "https://code.skychip.top/sky/video_decode_plugin.git"
source: git
version: "0.0.1"
vm_service:
dependency: transitive
@ -721,7 +729,7 @@ packages:
source: hosted
version: "0.5.1"
win32:
dependency: transitive
dependency: "direct overridden"
description:
name: win32
sha256: "0eaf06e3446824099858367950a813472af675116bf63f008a4c2a75ae13e9cb"

View File

@ -15,9 +15,13 @@ dependencies:
flutter_sdk:
path: ..
starlock_ble:
path: ../../starlock_ble
git:
url: https://code.skychip.top/minbingbing/starlock_ble.git
ref: 045a1ee931ddc8fa92a481358202023a19144187
starcloud:
path: ../../starcloud
git:
url: https://code.skychip.top/minbingbing/starcloud.git
ref: 500c733e571bb9354812722ef7d16daf703d28b3
crypto: ^3.0.3
shared_preferences: ^2.2.3
@ -34,7 +38,12 @@ dependencies:
permission_handler: ^11.3.1
# 视频对讲:H264 裸流解码渲染(本地插件,含 ffmpeg-kit)
video_decode_plugin:
path: ../../video_decode_plugin
git:
url: https://code.skychip.top/sky/video_decode_plugin.git
ref: 26ce13204e017f421c6b236c0342a40c0cd120ac
dependency_overrides:
win32: 5.5.0
dev_dependencies:
flutter_test: