Flutter投屏框架插件flutter_cast_framework_v2的使用
Flutter投屏框架插件flutter_cast_framework_v2的使用
概述
Flutter Cast Framework 是一个实验性的 Flutter 插件,允许您在 Flutter 应用程序中使用 Chromecast API。通过此插件,您可以实现投屏功能,包括播放、暂停、停止媒体,以及扩展控制等功能。
使用指南
添加依赖
首先,克隆此仓库并在您的 pubspec.yaml 文件中添加以下依赖项:
dependencies:
flutter_cast_framework:
path: ../flutter_cast_framework/ # 根据您克隆的路径调整
Android 设置
1. 创建 CastOptionsProvider
在您的 Android 项目中添加以下类:
import android.content.Context
import com.google.android.gms.cast.framework.CastOptions
import com.google.android.gms.cast.framework.OptionsProvider
import com.google.android.gms.cast.framework.SessionProvider
class CastOptionsProvider : OptionsProvider {
override fun getCastOptions(context: Context): CastOptions {
return CastOptions.Builder()
.setReceiverApplicationId("4F8B3483") // 替换为您的接收器应用 ID
.build()
}
override fun getAdditionalSessionProviders(context: Context): List<SessionProvider>? {
return null
}
}
2. 加载 CastOptionsProvider
在 AndroidManifest.xml 文件的 <application> 标签中添加以下条目以引用 CastOptionsProvider 类:
<application>
<meta-data
android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.gianlucaparadise.flutter_cast_framework_example.CastOptionsProvider" />
</application>
3. 主题设置
确保您的应用程序和活动使用了 AppCompat 主题(详见 这里)。
iOS 设置
1. 最低 iOS 版本
确保最低 iOS 版本为 10.0。
在 Xcode 中,选择左侧的 Runner,然后转到 General > Deployment Info > Target,将版本设置为 10.0 或更高。
2. 安装 iOS 依赖
关闭 Xcode 后,在项目的根目录打开终端并运行以下命令:
cd ios && pod install
3. 在 Xcode 中打开项目
从项目的根目录运行以下命令以使用 Xcode 打开 Flutter 项目:
open ios/Runner.xcworkspace
4. Chromecast SDK 设置
在您的 AppDelegate.swift 文件中添加以下代码:
import UIKit
import Flutter
+import GoogleCast
@UIApplicationMain
-@objc class AppDelegate: FlutterAppDelegate {
+@objc class AppDelegate: FlutterAppDelegate, GCKLoggerDelegate {
+ let kReceiverAppID = "4F8B3483" // 替换为您的接收器应用 ID
+ let kDebugLoggingEnabled = true
+
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
+ let criteria = GCKDiscoveryCriteria(applicationID: kReceiverAppID)
+ let options = GCKCastOptions(discoveryCriteria: criteria)
+ GCKCastContext.setSharedInstance(with: options)
+
+ // 启用日志记录。
+ GCKLogger.sharedInstance().delegate = self
+
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
+
+ // MARK: - GCKLoggerDelegate
+
+ func logMessage(_ message: String,
+ at level: GCKLoggerLevel,
+ fromFunction function: String,
+ location: String) {
+ if (kDebugLoggingEnabled) {
+ print(function + " - " + message)
+ }
+ }
}
技术说明
该项目用于测试以下技术的能力:
- Chromecast API(发送器 - Android SDK)
- Flutter
- Flutter 自定义平台特定代码
路线图
接下来要开发的功能包括:
- 扩展控件中的 CC(iOS)
- 扩展控件的美化(进度条广告、全屏、进度条句柄)
- MiniController 和 扩展控件中的标题(由于 pigeon issue 被阻塞)
- 处理队列
- 处理进度拖动
- 确定是否应使用流而不是监听器进行重构
- 添加测试
示例代码
以下是一个简单的示例代码,展示如何在 Flutter 应用程序中使用 flutter_cast_framework_v2:
import 'package:flutter/material.dart';
import 'package:flutter_cast_framework/flutter_cast_framework.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('Flutter Cast Framework Example')),
body: Center(
child: ElevatedButton(
onPressed: () async {
final castFramework = FlutterCastFramework();
await castFramework.connect();
print('Connected to Chromecast!');
},
child: Text('Connect to Chromecast'),
),
),
),
);
}
}
更多关于Flutter投屏框架插件flutter_cast_framework_v2的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter投屏框架插件flutter_cast_framework_v2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
flutter_cast_framework_v2 是一个用于在 Flutter 应用中实现投屏功能的插件,支持 Google Cast(Chromecast)等投屏设备。通过这个插件,你可以轻松地将媒体内容投屏到支持 Google Cast 的设备上。
1. 安装插件
首先,你需要在 pubspec.yaml 文件中添加 flutter_cast_framework_v2 插件的依赖:
dependencies:
flutter:
sdk: flutter
flutter_cast_framework_v2: ^latest_version
然后运行 flutter pub get 来安装插件。
2. 配置 Android 和 iOS 项目
Android
在 android/app/src/main/AndroidManifest.xml 文件中,添加以下权限和元数据:
<uses-permission android:name="android.permission.INTERNET" />
<application>
<meta-data
android:name="com.google.android.gms.cast.framework.OPTIONS_PROVIDER_CLASS_NAME"
android:value="com.google.android.gms.cast.framework.options.SessionProvider" />
</application>
iOS
在 ios/Runner/Info.plist 文件中,添加以下键值对:
<key>NSLocalNetworkUsageDescription</key>
<string>We need access to your local network to discover Cast devices.</string>
<key>NSBonjourServices</key>
<array>
<string>_googlecast._tcp</string>
</array>
3. 初始化 CastContext
在你的 Flutter 应用中,首先需要初始化 CastContext。通常,你可以在应用启动时进行初始化。
import 'package:flutter_cast_framework_v2/flutter_cast_framework.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await CastContext.initialize();
runApp(MyApp());
}
4. 添加 Cast 按钮
你可以在应用的 UI 中添加一个 Cast 按钮,用户可以通过这个按钮选择投屏设备。
import 'package:flutter/material.dart';
import 'package:flutter_cast_framework_v2/flutter_cast_framework.dart';
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Cast Demo'),
actions: [
CastButton(),
],
),
body: Center(
child: Text('Press the Cast button to start casting.'),
),
);
}
}
5. 投屏媒体内容
你可以使用 CastSessionManager 来控制媒体内容的投屏。以下是一个简单的示例,展示如何投屏一个视频:
import 'package:flutter_cast_framework_v2/flutter_cast_framework.dart';
void castVideo(String videoUrl) async {
final sessionManager = CastSessionManager.instance;
final castSession = await sessionManager.startSession();
if (castSession != null) {
await castSession.loadMedia(
MediaInfo(
contentId: videoUrl,
contentType: 'video/mp4',
streamType: StreamType.buffered,
),
);
}
}
6. 处理 Cast 会话状态
你可以监听 Cast 会话的状态变化,以便在用户连接或断开投屏设备时做出相应的反应。
import 'package:flutter_cast_framework_v2/flutter_cast_framework.dart';
void listenToCastSession() {
CastSessionManager.instance.addListener(() {
final castSession = CastSessionManager.instance.currentSession;
if (castSession != null) {
print('Connected to Cast device: ${castSession.device.friendlyName}');
} else {
print('Disconnected from Cast device');
}
});
}
7. 处理媒体播放状态
你还可以监听媒体播放状态的变化,以便在媒体开始播放、暂停或结束时做出相应的反应。
import 'package:flutter_cast_framework_v2/flutter_cast_framework.dart';
void listenToMediaStatus() {
CastSessionManager.instance.addMediaStatusListener((mediaStatus) {
if (mediaStatus.playerState == PlayerState.playing) {
print('Media is playing');
} else if (mediaStatus.playerState == PlayerState.paused) {
print('Media is paused');
} else if (mediaStatus.playerState == PlayerState.idle) {
print('Media playback ended');
}
});
}
8. 结束 Cast 会话
当用户想要结束投屏时,你可以调用 endSession 方法来结束当前的 Cast 会话。
import 'package:flutter_cast_framework_v2/flutter_cast_framework.dart';
void endCastSession() async {
await CastSessionManager.instance.endSession();
}
9. 处理错误
在使用 flutter_cast_framework_v2 时,可能会遇到一些错误。你可以通过捕获异常来处理这些错误。
try {
await CastContext.initialize();
} catch (e) {
print('Failed to initialize CastContext: $e');
}

