【视频投屏】最小可用(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"并不复杂

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


相关推荐
nashane5 小时前
HarmonyOS Video组件预览图片优化实践:告别黑屏,提升视频播放体验
华为·音视频·harmonyos·harmonyos 5
wapicn995 小时前
微服务架构下的数据核验设计,API接入最佳实践
微服务·云原生·架构
科研前沿5 小时前
2026 数字孪生前沿科技:全景迭代报告 —— 镜像视界生成式孪生(Generative DT)技术白皮书
大数据·人工智能·科技·算法·音视频·空间计算
Ghost Face...5 小时前
龙芯2K1000 SoC启动全流程与架构解析
架构
侠客工坊6 小时前
移动端 RPA 的架构重构:基于侠客工坊多模态视觉大模型的自动化调度系统压测复盘
人工智能·智能手机·重构·架构·rpa·数字员工·侠客工坊
勇气要爆发7 小时前
科技爱好者周刊(第 4 期):开源模型的“双响炮“:一周两款国产大模型开源
科技·开源
liang_jy7 小时前
Android 架构中的统一分发与策略路由
android·架构
hsjcjh7 小时前
深度技术拆解:2026年Gemini 3.1 Pro镜像官网架构与推理能力全面解析(附国内实测方案)
架构
若兰幽竹7 小时前
【从零开始编写数据库系统:架构设计与实现】第5章:查询执行引擎与火山模型
数据库·架构·数据库内核·toydb
EasyDSS7 小时前
私有化视频会议系统/视频高清直播点播EasyDSS一体化视频平台赋能各行业数字化高效协同
音视频