【视频投屏】最小可用(MVP)局域网投屏”开源项目架构

一、MVP 的功能边界(先定清楚)

本项目 要做

  • 局域网自动发现电视

  • 两种投屏模式:

    1. 媒体投送(视频/音频)
    2. 屏幕镜像(实时)
  • Android 手机 → Android TV

  • UI 简单但可用

本项目 明确不做

  • 商业 App(腾讯/爱奇艺等)投屏
  • DRM 内容
  • 跨网投屏
  • 一键"万能投"

二、整体架构图(MVP 级)

复制代码
┌────────────────────┐
│   Android Phone    │
│────────────────────│
│ UI / 投屏入口       │
│ 投屏调度层          │
│ ├─ DLNA Controller │
│ └─ Screen Mirroring│
│      (WebRTC)      │
│        │           │
└────────┼───────────┘
         │ LAN
┌────────┼───────────┐
│   Android TV       │
│────────────────────│
│ 设备发现服务       │
│ DLNA Receiver      │
│ WebRTC Receiver    │
│ ExoPlayer / Surface│
└────────────────────┘

三、模块拆解(直接按仓库结构设计)

1️⃣ 设备发现模块(必需)

作用

  • 手机自动发现 Android TV
  • 显示为"可投屏设备"

技术选型(开源)

  • SSDP(UPnP)
  • mDNS(可选)

MVP 实现

  • Android TV 启动 SSDP 服务
  • 手机端发送 M-SEARCH
  • TV 响应设备信息(JSON)

模块建议

复制代码
discovery/
 ├─ SsdpServer.kt   (TV)
 ├─ SsdpClient.kt   (Phone)
 └─ DeviceInfo.kt

2️⃣ 投屏调度层(整个项目的核心)

核心逻辑(非常重要)

kotlin 复制代码
when (contentType) {
    MEDIA -> useDlna()
    SCREEN -> useWebRtc()
}

内容判断策略(MVP)

  • 本地视频文件 → MEDIA
  • URL 视频 → MEDIA
  • 其他 → SCREEN

模块建议

复制代码
dispatcher/
 ├─ CastDispatcher.kt
 ├─ ContentAnalyzer.kt
 └─ CastSession.kt

3️⃣ 媒体投送模块(DLNA)

原理

  • 手机只发播放命令
  • TV 自己拉流播放

开源组件

  • 协议:UPnP AV
  • 播放器:ExoPlayer

MVP 功能

  • Play / Pause
  • Seek
  • Stop

模块建议

复制代码
dlna/
 ├─ DlnaController.kt   (Phone)
 ├─ DlnaReceiver.kt    (TV)
 ├─ AvTransport.kt
 └─ ExoPlayerWrapper.kt

4️⃣ 屏幕镜像模块(WebRTC)

原理

  • MediaProjection 捕屏
  • H.264 硬编码
  • WebRTC 点对点传输

开源组件

  • libwebrtc
  • WebSocket(信令)

MVP 取舍

  • 只支持 视频
  • 音频可第二阶段再加

模块建议

复制代码
screen/
 ├─ ScreenCapturer.kt
 ├─ WebRtcSender.kt   (Phone)
 ├─ WebRtcReceiver.kt (TV)
 ├─ SignalingServer.kt
 └─ PeerConnection.kt

5️⃣ TV 接收端(Android TV App)

TV 端职责

  • 启动发现服务
  • 提供 DLNA Receiver
  • 接收 WebRTC 流
  • 全屏显示

模块建议

复制代码
tv/
 ├─ MainActivity.kt
 ├─ DeviceService.kt
 ├─ DlnaService.kt
 ├─ WebRtcService.kt
 └─ PlayerView.kt

四、技术选型汇总表(MVP 级)

模块 技术 是否开源
发现 SSDP
媒体投送 DLNA
播放器 ExoPlayer
捕屏 MediaProjection
推流 WebRTC
信令 WebSocket

五、最小交付能力(你完成后能做到什么)

✔ 手机能看到电视

✔ 点击"投屏"

✔ 视频走 DLNA(流畅、低功耗)

✔ 界面走 WebRTC(实时)

✔ 完全局域网

✔ 完全开源


六、项目仓库结构示例(直接可用)

复制代码
lan-cast/
├─ phone-app/
│   ├─ discovery/
│   ├─ dispatcher/
│   ├─ dlna/
│   └─ screen/
├─ tv-app/
│   ├─ discovery/
│   ├─ dlna/
│   ├─ webrtc/
│   └─ ui/
├─ common/
│   ├─ protocol/
│   └─ model/
└─ README.md

七、开发顺序建议(非常重要)

第 1 周

  • SSDP 发现
  • TV 端显示

第 2 周

  • DLNA 播放本地视频

第 3 周

  • WebRTC 屏幕镜像

第 4 周

  • 投屏调度整合
  • UI & 稳定性

八、一句话总结

一个可用的"局域网投屏 MVP"并不复杂

难点不是技术,而是 克制功能、明确边界、先做调度再做投屏


相关推荐
阿巴~阿巴~17 小时前
从IP到MAC,从内网到公网:解密局域网通信与互联网连接的完整路径
服务器·网络·网络协议·架构·智能路由器·tcp·arp
努力犯错17 小时前
如何在ComfyUI中配置LTX-2:2026年AI视频生成完整指南
大数据·人工智能·计算机视觉·语言模型·开源·音视频
大犀牛牛17 小时前
拆解开放签电子签系统“一核多态”的SaaS产品版本管理实战
开源·数字签名·电子合同·电子签章
无心水17 小时前
【分布式利器:腾讯TSF】3、服务注册发现深度解析:构建动态弹性的微服务网络
网络·分布式·微服务·架构·分布式利器·腾讯tsf·分布式利器:腾讯tsf
早日退休!!!17 小时前
基于开源LLVM构建AI编译器的核心工作与原理解析
人工智能·开源
说私域17 小时前
小程序电商运营中“开源AI智能名片链动2+1模式S2B2C商城小程序”对培养“老铁”用户的重要性研究
人工智能·小程序·开源
玖日大大17 小时前
Wan2.1视频生成模型本地部署完整指南
人工智能·音视频
China_Yanhy17 小时前
金融级企业出口网关架构设计与实施指南Enterprise Egress Gateway Architecture & Implementation Guide
运维·金融·架构
阿巴~阿巴~17 小时前
帧长、MAC与ARP:解密局域网通信的底层逻辑与工程权衡
linux·服务器·网络·网络协议·tcp/ip·架构·以太网帧