# screen_cast **Repository Path**: dinf/screen_cast ## Basic Information - **Project Name**: screen_cast - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-23 - **Last Updated**: 2025-11-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 小橘投屏 - 跨平台投屏应用
![Version](https://img.shields.io/badge/version-1.0.0-blue.svg) ![Flutter](https://img.shields.io/badge/Flutter-3.0+-blue.svg) ![License](https://img.shields.io/badge/license-MIT-green.svg) 一个功能强大的跨平台投屏应用,支持多种投屏协议,轻松将手机内容投屏到智能电视、电脑、车机等设备。 [功能特性](#功能特性) • [快速开始](#快速开始) • [使用说明](#使用说明) • [项目结构](#项目结构)
--- ## 📱 项目简介 **小橘投屏**是一款基于 Flutter 开发的跨平台投屏应用,支持将手机上的视频、音频、图片和文档文件投屏到各种智能设备。应用采用现代化的 Material Design 3 设计,提供流畅的用户体验,支持深色模式,适配 Android 和 iOS 平台。 ### 核心特点 - 🎯 **多协议支持** - 支持 DLNA、Miracast、Chromecast、AirPlay、USB、蓝牙等多种投屏协议 - 📺 **广泛兼容** - 支持智能电视、Windows 电脑、车机系统等多种设备 - 🎬 **媒体投屏** - 支持视频、音频、图片等多种媒体格式 - 📄 **文档传输** - 支持 PDF、Word、Excel、PPT 等文档文件传输 - 📹 **屏幕录制** - 内置屏幕录制功能,可录制屏幕内容 - 📊 **历史记录** - 完整的投屏、录制、传输历史记录 - 🎨 **现代 UI** - Material Design 3 设计,支持深色模式 - ⚡ **高性能** - 优化的网络传输和播放控制,设备发现超时控制 - 🔄 **智能重试** - 自动重试机制,提高投屏成功率 - ⭐ **设备管理** - 设备收藏、重命名、分组、排序等高级功能 --- ## ✨ 功能特性 ### 1. 投屏功能 #### 支持的投屏协议 - **DLNA 无线投屏** ✅ - 支持智能电视(Android TV、Tizen、webOS 等) - 支持 Windows 电脑(通过 DLNA 协议) - 自动设备发现和连接 - 支持播放控制(播放、暂停、停止、进度控制) - **Miracast 屏幕镜像** ✅ (Android) - 支持 Miracast 协议的设备 - 屏幕实时镜像 - 低延迟传输 - **Chromecast 投屏** ⚠️ - 支持 Google Chromecast 设备 - 跨平台支持(Android 和 iOS) - 使用 WebSocket 和 Cast 协议通信 - **AirPlay 投屏** ⚠️ (iOS) - 支持 Apple AirPlay 设备 - 支持 Apple TV 等设备 - 需要原生平台实现 - **USB 有线投屏** ⚠️ - 支持通过 USB 连接进行投屏 - 暂时禁用(等待兼容插件更新) - **蓝牙投屏** ✅ - 支持蓝牙音频设备(A2DP 协议) - 支持蓝牙音箱、耳机等设备 - 自动设备发现和连接 - 支持音频流传输 - 支持视频投屏(通过蓝牙发送媒体URL,设备通过WiFi获取) - 支持图片投屏 #### 支持的设备类型 - ✅ 智能电视(Android TV、Tizen、webOS 等) - ✅ Windows 电脑(通过 DLNA 协议) - ✅ 车机系统 - ✅ Android Auto(已集成SDK,支持媒体投屏) - ⚠️ CarPlay(框架代码,需要原生实现) - ⚠️ CarLife(框架代码,需要原生实现) - ⚠️ WIDI(Windows 无线显示,框架代码) - ⚠️ ICCOA(智慧车联开放联盟,框架代码) - ⚠️ HiCar(华为智慧车载,框架代码) ### 2. 媒体文件管理 #### 支持的媒体格式 **视频格式:** - MP4, AVI, MKV, MOV, WMV, FLV, WebM **音频格式:** - MP3, WAV, AAC, FLAC, OGG, M4A **图片格式:** - JPG, JPEG, PNG, GIF, BMP, WebP #### 功能特性 - 📁 本地文件选择和管理 - 🔍 文件搜索和筛选 - 📋 文件列表展示 - 🗑️ 文件删除功能 - 🔄 下拉刷新加载 ### 3. 文档传输功能 #### 支持的文档格式 - **办公文档:** PDF, DOC, DOCX, XLS, XLSX, PPT, PPTX - **文本文件:** TXT, RTF - **其他格式:** ODT, ODS, ODP, CSV #### 功能特性 - 📤 文档文件选择(支持多选) - 🌐 通过 HTTP 服务器传输文档 - 📊 传输历史记录 - ✅ 传输状态跟踪 ### 4. 屏幕录制功能 #### 功能特性 - 🎥 屏幕录制(需要原生平台支持) - ⏱️ 录制时长显示 - 💾 录制文件保存 - 📹 录制历史记录 - 🎬 录制状态监控 ### 5. 历史记录 - **投屏历史** - 记录所有投屏操作和设备信息 - **录制历史** - 记录所有屏幕录制记录 - **传输历史** - 记录所有文件传输记录 ### 6. 设备管理 - 🔍 自动设备发现(支持超时控制,避免长时间等待) - 📱 设备列表管理(支持收藏、重命名、分组、排序) - 🔌 设备连接/断开 - 📊 设备状态显示 - 🏷️ 设备信息展示 - ⭐ 设备收藏功能 - 🏷️ 自定义设备名称 - 📁 设备分组管理 - 📈 连接次数统计 - 🔄 多种排序方式(按名称、最后连接时间、连接次数、类型) ### 7. 播放控制 - ▶️ 播放/暂停 - ⏹️ 停止 - ⏩ 快进/快退(进度条拖拽) - 🔊 音量控制(滑块调节) - 📊 播放进度显示(实时更新) - ⏮️ 上一首/下一首(队列播放) - 🔄 自动播放下一首 - ⚙️ 投屏设置(清晰度、显示模式、横竖屏) - 🔁 错误重试机制(最多3次自动重试) ### 8. 用户界面 - 🎨 Material Design 3 设计 - 🌙 深色模式支持(自动跟随系统) - 📱 响应式布局 - ✨ 流畅的动画效果 - 🎯 直观的操作界面 - ♿ 无障碍支持 --- ## 🛠️ 技术栈 ### 核心框架 - **Flutter** - 跨平台 UI 框架 - **Dart** - 编程语言 ### 主要依赖 - **状态管理:** Provider - **UI 适配:** flutter_screenutil - **网络请求:** http - **网络发现:** multicast_dns - **DLNA 播放:** media_cast_dlna(基于 JUPnP 的 DLNA/UPnP 实现) - **WebSocket:** web_socket_channel - **XML 解析:** xml - **文件选择:** file_picker - **路径管理:** path_provider - **权限管理:** permission_handler - **蓝牙支持:** flutter_blue_plus - **本地存储:** shared_preferences - **日志记录:** logger - **文件打开:** open_file ### 协议和标准 - **DLNA** - 数字生活网络联盟协议 - **Miracast** - WiFi Display 标准(Android) - **Chromecast** - Google Cast 协议 - **AirPlay** - Apple 无线流媒体协议(iOS) - **蓝牙 A2DP** - 高级音频分发配置文件 - **WIDI** - Windows 无线显示技术 - **ICCOA** - 智慧车联开放联盟协议 - **HiCar** - 华为智慧车载协议 - **mDNS** - 多播 DNS 服务发现 - **WebSocket** - Chromecast 通信协议 - **HTTP** - 媒体文件服务器 --- ## 🧩 组件化架构 项目采用组件化设计,将可复用的UI组件和工具类抽离,提高代码复用性和可维护性。 ### 可复用组件 #### UI组件 (`lib/widgets/`) - **StatusCard** - 状态卡片组件 - 显示投屏状态信息(连接中、已连接、播放中、已暂停等) - 支持自定义状态颜色和图标 - 提供状态文本获取方法 - **ConnectingView** - 连接中视图组件 - 统一的连接进度显示界面 - 支持显示设备名称 - 支持取消连接操作 - **ErrorView** - 错误视图组件 - 统一的错误信息显示界面 - 支持重试功能(带重试次数显示) - 支持关闭操作 - **DeviceSelectionDialog** - 设备选择对话框组件 - 统一的设备选择界面 - 支持显示设备连接状态 - 支持屏幕镜像选项(Miracast) - 支持批量文件选择提示 #### 工具类 (`lib/utils/`) - **IconHelper** - 图标和名称工具类 - `getDeviceIcon()` - 获取设备连接类型图标 - `getConnectionTypeName()` - 获取连接类型名称 - `getMediaIcon()` - 获取媒体类型图标 - `getDeviceTypeIcon()` - 获取设备类型图标 - 统一管理所有图标和名称映射,避免代码重复 - **SnackBarHelper** - SnackBar工具类 - `showSuccess()` - 显示成功提示 - `showError()` - 显示错误提示(支持详细信息) - `showInfo()` - 显示信息提示 - `showWarning()` - 显示警告提示 - `showLoading()` - 显示加载提示 - 统一的提示样式和交互体验 ### 组件使用示例 ```dart // 使用状态卡片 StatusCard( status: castProvider.castStatus, deviceName: castProvider.castingDevice?.name, mediaName: castProvider.castingMedia?.name, ) // 使用连接中视图 ConnectingView( deviceName: castProvider.castingDevice?.name, onCancel: () => castProvider.stopCast(), ) // 使用错误视图 ErrorView( title: '投屏失败', message: castProvider.errorMessage, canRetry: castProvider.canRetry, retryCount: castProvider.retryCount, maxRetryCount: CastProvider.maxRetryCount, onRetry: () => castProvider.retryCast(), onClose: () => castProvider.stopCast(), ) // 使用设备选择对话框 DeviceSelectionDialog.show( context, title: '选择投屏设备', subtitle: '已选择 3 个文件', devices: deviceProvider.devices, selectedDevice: deviceProvider.selectedDevice, media: mediaProvider.selectedMedia, selectedCount: 3, showScreenMirrorOption: true, onDeviceSelected: (device) { // 处理设备选择 }, onScreenMirror: (device) { // 处理屏幕镜像 }, ) // 使用图标工具类 IconHelper.getDeviceIcon(device.connectionType) IconHelper.getConnectionTypeName(device.connectionType) IconHelper.getMediaIcon(media.type) // 使用SnackBar工具类 SnackBarHelper.showSuccess(context, message: '投屏成功'); SnackBarHelper.showError( context, message: '投屏失败', detail: errorMessage, ); ``` --- ## 📁 项目结构 ``` screen_cast_app/ ├── lib/ │ ├── main.dart # 应用入口 │ ├── models/ # 数据模型 │ │ ├── device_model.dart # 设备模型 │ │ ├── media_model.dart # 媒体模型 │ │ ├── cast_history_model.dart # 投屏历史模型 │ │ └── recording_history_model.dart # 录制历史模型 │ ├── providers/ # 状态管理 │ │ ├── device_provider.dart # 设备状态管理 │ │ ├── media_provider.dart # 媒体状态管理 │ │ ├── cast_provider.dart # 投屏状态管理 │ │ ├── history_provider.dart # 历史记录管理 │ │ ├── recording_provider.dart # 录制状态管理 │ │ └── settings_provider.dart # 设置管理 │ ├── services/ # 服务层 │ │ ├── media_cast_dlna_service.dart # 基于 media_cast_dlna (JUPnP) 的 DLNA 投屏服务 │ │ ├── miracast_service.dart # Miracast 屏幕镜像服务 │ │ ├── chromecast_service.dart # Chromecast 投屏服务 │ │ ├── airplay_service.dart # AirPlay 投屏服务 │ │ ├── usb_service.dart # USB 投屏服务 │ │ ├── bluetooth_service.dart # 蓝牙服务 │ │ ├── media_service.dart # 媒体文件服务 │ │ ├── file_transfer_service.dart # 文件传输服务 │ │ ├── screen_recorder_service.dart # 屏幕录制服务 │ │ ├── http_media_server.dart # HTTP 媒体服务器 │ │ └── car_platform_service.dart # 车机平台服务 │ ├── screens/ # 页面 │ │ ├── splash_screen.dart # 启动页 │ │ ├── home_screen.dart # 主页面(底部导航) │ │ ├── home_page.dart # 首页 │ │ ├── connect_page.dart # 连接页 │ │ ├── device_list_screen.dart # 设备列表页 │ │ ├── media_list_screen.dart # 媒体列表页 │ │ ├── cast_screen.dart # 投屏页 │ │ ├── cast_detail_screen.dart # 投屏详情页 │ │ ├── cast_history_screen.dart # 投屏历史页 │ │ ├── recording_history_screen.dart # 录制历史页 │ │ ├── transfer_history_screen.dart # 传输历史页 │ │ ├── control_page.dart # 控制页 │ │ ├── profile_screen.dart # 个人中心页 │ │ ├── settings_screen.dart # 设置页 │ │ ├── privacy_policy_screen.dart # 隐私政策页 │ │ └── user_agreement_screen.dart # 用户协议页 │ ├── widgets/ # 组件 │ │ ├── device_card.dart # 设备卡片 │ │ ├── media_item.dart # 媒体项 │ │ ├── cast_controller.dart # 投屏控制器 │ │ ├── animated_card.dart # 动画卡片 │ │ ├── swipeable_item.dart # 滑动删除项 │ │ ├── long_press_menu.dart # 长按菜单 │ │ ├── loading_indicator.dart # 加载指示器 │ │ ├── status_card.dart # 状态卡片组件 │ │ ├── connecting_view.dart # 连接中视图组件 │ │ ├── error_view.dart # 错误视图组件 │ │ └── device_selection_dialog.dart # 设备选择对话框组件 │ └── utils/ # 工具类 │ ├── constants.dart # 常量定义 │ ├── app_theme.dart # 主题配置 │ ├── error_handler.dart # 错误处理 │ ├── http_client.dart # HTTP 客户端 │ ├── icon_helper.dart # 图标和名称工具类 │ └── snackbar_helper.dart # SnackBar工具类 ├── android/ # Android 平台代码 ├── ios/ # iOS 平台代码 ├── assets/ # 资源文件 │ └── icons/ # 应用图标 ├── web/ # Web 平台代码 └── pubspec.yaml # 项目配置 ``` --- ## 🚀 快速开始 ### 环境要求 - **Flutter SDK** >= 3.0.0 - **Dart SDK** >= 3.0.0 - **Android Studio** / **Xcode**(用于平台特定开发) - **Android 设备** 或 **iOS 设备**(用于测试) ### 安装步骤 1. **克隆项目** ```bash git clone cd screen_cast_app ``` 2. **安装依赖** ```bash flutter pub get ``` 3. **运行应用** ```bash # Android flutter run # iOS flutter run -d ios ``` ### 编译和构建 ```bash # Android Debug APK flutter build apk --debug # Android Release APK flutter build apk --release # Android Release App Bundle (用于 Google Play) flutter build appbundle --release # iOS (需要 macOS) flutter build ios --release ``` --- ## 📖 使用说明 ### DLNA 投屏 1. **确保设备在同一网络** - 手机和目标设备必须连接到同一个 WiFi 网络 2. **搜索设备** - 打开应用,进入"连接"页面 - 点击"搜索设备"按钮 - 等待设备列表显示 3. **连接设备** - 从设备列表中选择要投屏的设备 - 点击设备卡片进行连接 4. **选择媒体文件** - 进入"设备"页面(显示媒体文件列表) - 点击"添加"按钮选择媒体文件 - 支持视频、音频、图片格式 5. **开始投屏** - 选择文件后,点击“投屏”按钮 - 媒体文件将在目标设备上播放 > 说明:DLNA 功能基于 `media_cast_dlna` 插件(JUPnP 实现)。应用负责发现 DLNA/UPnP 设备、建立连接并将媒体 URL 投送到目标设备进行播放。 **投屏到 Windows 电脑:** - Windows 10/11 支持 DLNA 接收 - 在 Windows 上启用"媒体流"功能: 1. 打开"设置" > "网络和 Internet" > "网络和共享中心" 2. 点击"更改高级共享设置" 3. 启用"媒体流"功能 - 或者使用 Windows Media Player 作为 DLNA 接收器 - 应用会自动识别 Windows 设备并显示为"Windows 设备" ### Miracast 屏幕镜像(Android) 1. **确保设备支持 Miracast** - 手机和目标设备都必须支持 Miracast 协议 2. **启用无线显示** - 在 Android 设备上启用"无线显示"功能 - 确保已授予位置权限(WiFi P2P 需要) 3. **搜索和连接** - 打开应用,选择"Miracast"连接方式 - 点击"搜索设备" - 选择要镜像的设备并连接 4. **开始镜像** - 连接成功后,点击"开始镜像" - 手机屏幕将实时显示在目标设备上 ### Chromecast 投屏 1. **确保设备在同一网络** - 手机和 Chromecast 设备必须连接到同一个 WiFi 网络 2. **搜索设备** - 打开应用,选择"Chromecast"连接方式 - 点击"搜索设备" - 等待 Chromecast 设备显示 3. **连接和投屏** - 选择 Chromecast 设备 - 选择媒体文件 - 开始投屏 ### AirPlay 投屏(iOS) 1. **确保设备在同一网络** - iPhone/iPad 和 AirPlay 设备必须连接到同一个 WiFi 网络 2. **搜索设备** - 打开应用,选择"AirPlay"连接方式 - 点击"搜索设备" - 选择 AirPlay 设备(如 Apple TV) 3. **投屏** - 选择媒体文件 - 开始投屏 **注意:** AirPlay 功能需要使用平台通道调用 iOS 原生 API,当前实现提供了框架代码,需要完善原生实现。 ### USB 投屏 1. **连接设备** - 使用 USB 线连接手机和目标设备 - 在手机上授权 USB 权限(首次连接需要) 2. **搜索设备** - 打开应用,进入"连接"页面 - 选择"USB"连接方式 - 点击"搜索设备"按钮 - 等待USB设备列表显示 3. **连接设备** - 从设备列表中选择要连接的USB设备 - 点击设备卡片进行连接 - 首次连接需要授予USB权限 4. **投屏媒体** - 选择媒体文件 - 点击"投屏"按钮 - 媒体文件将通过USB传输到目标设备 **注意:** USB投屏需要设备支持USB主机模式,并且需要相应的USB权限。 ### 蓝牙投屏 1. **确保蓝牙已开启** - 在手机上开启蓝牙功能 - 确保目标设备支持蓝牙并已开启 2. **搜索设备** - 打开应用,进入"连接"页面 - 切换到"蓝牙"标签 - 点击"搜索设备"按钮 - 等待蓝牙设备列表显示 3. **连接设备** - 从设备列表中选择要连接的蓝牙设备 - 点击设备卡片进行连接 - 首次连接可能需要配对确认 4. **投屏音频** - 选择音频文件 - 点击"投屏"按钮 - 音频将通过蓝牙 A2DP 协议传输到目标设备 **注意:** 蓝牙投屏主要用于音频传输,支持蓝牙音箱、耳机等音频设备。视频投屏建议使用 DLNA、Miracast 等协议。 ### 屏幕录制 1. **进入首页** - 打开应用,在首页找到"屏幕录制"卡片 2. **开始录制** - 点击"开始录制"按钮 - 授予必要的权限(屏幕录制权限) 3. **停止录制** - 点击"停止录制"按钮 - 录制文件将自动保存 4. **查看录制历史** - 进入"我的"页面 - 点击"录制历史"查看所有录制记录 ### 文档传输 1. **选择文档** - 进入"设备"页面 - 点击"添加"按钮 - 选择"文档"类型 - 选择要传输的文档文件(支持多选) 2. **传输文档** - 选择文档后,选择目标设备 - 点击"传输"按钮 - 文档将通过 HTTP 服务器传输到目标设备 3. **查看传输历史** - 进入"我的"页面 - 点击"传输历史"查看所有传输记录 --- ## ⚠️ 重要注意事项 ### 平台限制 1. **Miracast** - 主要支持 Android 平台 - 需要使用平台通道调用 Android 原生 API(WifiDisplayManager) - 当前实现提供了框架代码,需要完善原生实现 2. **AirPlay** - 主要支持 iOS 平台 - 需要使用平台通道调用 iOS 原生 API - 当前实现提供了框架代码,需要完善原生实现 3. **Chromecast** - 跨平台支持(Android 和 iOS) - 使用 WebSocket 和 Cast 协议进行通信 - 需要设备支持 Google Cast 4. **USB** - 支持USB设备发现和连接 - 支持USB权限管理 - 支持通过USB传输媒体文件 - 支持USB投屏功能 5. **蓝牙** - 支持蓝牙设备发现和连接 - 支持 A2DP 音频传输 - 主要用于音频投屏 6. **车机平台协议** - WIDI、ICCOA、HiCar 等协议需要原生平台实现 - 当前提供了框架代码和接口定义 ### 实现状态 - ✅ **DLNA** - 完整实现 - ✅ **蓝牙** - 完整实现(设备发现、连接、音频投屏) - ✅ **Miracast** - 原生实现完成(WiFi P2P设备发现、连接、屏幕镜像) - ✅ **USB** - 完整实现(设备发现、连接、权限管理、媒体传输) - ✅ **Chromecast** - 完整实现(WebSocket通信、Android mDNS发现) - ✅ **AirPlay** - iOS原生实现框架完成(设备发现、连接、媒体投屏) - ✅ **WIDI** - 框架代码完成(DisplayManager集成) - ✅ **ICCOA** - 框架代码完成(需要集成ICCOA SDK) - ✅ **HiCar** - 框架代码完成(需要集成HiCar SDK) - ✅ **Android Auto** - SDK集成完成(MediaBrowserService实现,支持媒体投屏) - ✅ **CarPlay** - iOS框架代码完成(需要集成CarPlay SDK) - ✅ **CarLife** - 框架代码完成(需要集成CarLife SDK) ### 网络要求 - **DLNA/Chromecast/AirPlay**:手机和目标设备必须在同一 WiFi 网络 - **Miracast**:支持 WiFi Direct,不需要路由器 - **USB**:通过 USB 线直接连接,不需要网络 - **蓝牙**:不需要网络,通过蓝牙直接连接 - **车机平台**:根据连接方式(USB/蓝牙/WiFi)而定 ### 权限要求 - **存储权限**:用于选择和管理媒体文件 - **网络权限**:用于设备发现和文件传输 - **位置权限**:Android 上 WiFi P2P(Miracast)需要位置权限 - **蓝牙权限**:用于蓝牙设备发现和连接(Android 12+ 需要) - **USB权限**:用于USB设备连接和文件传输 - **屏幕录制权限**:用于屏幕录制功能 ### SDK集成说明 以下功能需要集成对应的SDK才能完整使用: - **Android Auto**:需要集成 Google Android Auto SDK - **CarPlay**:需要集成 Apple CarPlay SDK(iOS) - **CarLife**:需要集成百度 CarLife SDK - **ICCOA**:需要集成智慧车联开放联盟 SDK - **HiCar**:需要集成华为 HiCar SDK 当前实现提供了完整的框架代码和接口,集成SDK后即可使用完整功能。 --- ## 🔮 开发计划 ### 已完成功能 - [x] DLNA 设备发现和连接 - [x] DLNA 媒体投屏 - [x] 蓝牙设备发现和连接 - [x] 蓝牙音频投屏(A2DP) - [x] Miracast WiFi P2P设备发现和连接(Android原生实现) - [x] Miracast 屏幕镜像功能 - [x] Chromecast WebSocket通信实现 - [x] Chromecast mDNS设备发现(Android原生实现) - [x] AirPlay iOS原生实现框架 - [x] USB设备发现、连接和媒体传输 - [x] 车机平台框架代码(Android Auto、CarPlay、CarLife、WIDI、ICCOA、HiCar) - [x] 媒体文件管理 - [x] 设备列表管理 - [x] 投屏历史记录 - [x] 录制历史记录 - [x] 传输历史记录 - [x] 用户界面优化 - [x] 深色模式支持 - [x] 动画效果 - [x] 无障碍支持 - [x] 车机平台服务框架(WIDI、ICCOA、HiCar、Android Auto、CarPlay、CarLife) - [x] 播放控制界面优化(增强控制选项、进度条、音量控制等) - [x] 设备管理功能增强(设备收藏、重命名、分组、排序等功能) - [x] 性能优化(设备发现超时控制、避免重复搜索、内存优化) - [x] 错误处理改进(增强错误提示、重试机制、错误恢复) - [x] 组件化重构(抽离可复用组件,提高代码复用性) ### 进行中 - [x] Miracast 原生实现(Android)- ✅ 已完成WiFi P2P设备发现和连接 - [x] AirPlay 原生实现(iOS)- ✅ 已完成iOS原生实现框架 - [x] Chromecast 完整实现 - ✅ 已完成WebSocket通信和Android mDNS发现 - [x] USB 投屏 - ✅ 已完成USB设备发现、连接和媒体传输 ### 计划中 - [x] Android Auto 原生实现 - ✅ 框架代码已完成(需要集成Android Auto SDK) - [x] CarPlay 原生实现 - ✅ iOS框架代码已完成(需要集成CarPlay SDK) - [x] CarLife 原生实现 - ✅ 框架代码已完成(需要集成CarLife SDK) - [x] WIDI 原生实现 - ✅ 框架代码已完成(需要完善DisplayManager集成) - [x] ICCOA 原生实现 - ✅ 框架代码已完成(需要集成ICCOA SDK) - [x] HiCar 原生实现 - ✅ 框架代码已完成(需要集成HiCar SDK) - [x] 播放控制界面优化 - ✅ 已完成(增强控制选项、进度条、音量控制等) - [x] 设备管理功能增强 - ✅ 已完成(设备收藏、重命名、分组、排序等功能) - [x] 性能优化 - ✅ 已完成(设备发现超时控制、避免重复搜索、内存优化) - [x] 错误处理改进 - ✅ 已完成(增强错误提示、重试机制、错误恢复) - [x] 蓝牙视频投屏支持 - ✅ 已完成(通过蓝牙发送媒体URL,设备通过WiFi获取视频) - [x] 组件化重构 - ✅ 已完成(抽离可复用组件,提高代码复用性和可维护性) --- ## 📄 许可证 MIT License --- ## 👥 贡献 欢迎提交 Issue 和 Pull Request! --- ## 📞 联系方式 如有问题或建议,请通过以下方式联系: - 提交 Issue - 发送邮件 ---
**小橘投屏** - 让投屏更简单 🎬 Made with ❤️ using Flutter