Flutter SDK 安装与配置
当前插件版本为 meshstream_p2p 1.0.8,发布于 pub.dev。插件把原生 SDK 的播放地址和状态交给 Flutter 播放器,不提供播放器界面或解码器。
接入准备
- Flutter 3.22+、Dart 3.4+;
- 控制台创建的 Flutter 应用 SDK Key;
- 一个可播放的 HLS
.m3u8、DASH.mpd、支持 Range 的 MP4 或 MP3 地址; - 一个 Flutter 播放器,例如
video_player。
插件 Android 声明下限为 API 21,iOS 为 15.0。应用实际下限取插件、Flutter 引擎、播放器和其他依赖的最高要求;当前示例使用 Android API 24。插件固定使用公开 Android SDK io.meshstream:meshstream-android-sdk:1.0.9 和 iOS MeshStreamKit 1.0.8。
Android 原生依赖包含 armeabi-v7a、arm64-v8a、x86、x86_64 四种 ABI。真机与模拟器需同时满足框架和播放器的系统及架构要求。
Flutter 的 Android 模拟器调试请使用当前 Flutter 版本支持的 arm64 或 x86_64 系统镜像。
Android 权限与编译要求见原生工程配置,R8 和缓存预算见混淆与内存。保留 Flutter 工程要求的 Java/Kotlin 编译目标。
安装
dependencies:
meshstream_p2p: 1.0.8
video_player: ^2.9.3
根据工程当前的仓库管理方式选择下面一种配置。以下示例使用 Kotlin DSL。
Flutter 默认工程
在 android/build.gradle.kts 已有的 allprojects.repositories 中添加 MeshStream 仓库,保留原有仓库:
allprojects {
repositories {
google()
mavenCentral()
maven {
url = uri("https://sdk.meshstream.net/maven")
content { includeGroup("io.meshstream") }
}
}
}
使用 settings 集中管理仓库的工程
在 android/settings.gradle.kts 的 dependencyResolutionManagement 中合并下面的配置。显式设置 PREFER_SETTINGS,让 settings 中的仓库生效;同时保留 Google、Maven Central、Flutter 引擎及业务所需的仓库:
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.PREFER_SETTINGS)
repositories {
google()
mavenCentral()
maven {
val flutterStorageBaseUrl =
System.getenv("FLUTTER_STORAGE_BASE_URL") ?: "https://storage.googleapis.com"
url = uri("$flutterStorageBaseUrl/download.flutter.io")
content { includeGroup("io.flutter") }
}
maven {
url = uri("https://sdk.meshstream.net/maven")
content { includeGroup("io.meshstream") }
}
}
}
执行 flutter pub get,iOS 工程再执行 cd ios && pod install。插件会从公开渠道解析对应的原生依赖。
平台网络配置
Android
SDK 返回的播放地址使用本机 HTTP 回环代理,即使媒体源是 HTTPS,也需要允许播放器访问该代理。
在 android/app/src/main/AndroidManifest.xml 的 <application> 中添加:
android:networkSecurityConfig="@xml/meshstream_network_security_config"
创建 android/app/src/main/res/xml/meshstream_network_security_config.xml:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="false" />
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="false">127.0.0.1</domain>
<domain includeSubdomains="false">localhost</domain>
</domain-config>
</network-security-config>
将配置放在 src/main,使 Debug 和 Release 均生效。已有网络安全策略时合并回环地址规则,保留原有配置。公网 HTTP 媒体源需另行添加对应域名规则,建议优先使用 HTTPS。需要兼容 Android 6.0(API 23)的应用,请同时参照 Android 网络配置 设置该系统的明文访问策略。
iOS
在 ios/Runner/Info.plist 的 NSAppTransportSecurity 字典中添加本地网络许可;已有该字典时合并配置:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsLocalNetworking</key>
<true/>
</dict>
保留其他 ATS 限制;媒体源需要额外例外时只添加必要规则。
下一步
完成以上配置后,进入快速接入,创建会话、连接播放器,并在播放结束后释放资源。