# MediaCast
**Repository Path**: yqsphp/MediaCast
## Basic Information
- **Project Name**: MediaCast
- **Description**: MediaCast(多媒体投屏 v1.4.0) 是一款基于 C# / WinForms(.NET Framework 4.7.2) 开发的本地媒体投屏工具, 支持将电脑上的音视频文件通过 DLNA/UPnP 协议 投屏到智能电视、投影仪、音响等局域网设备,无需双端安装客户端。
- **Primary Language**: Python
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://www.yqsphp.top/home
- **GVP Project**: No
## Statistics
- **Stars**: 46
- **Forks**: 14
- **Created**: 2026-01-12
- **Last Updated**: 2026-08-14
## Categories & Tags
**Categories**: multimedia
**Tags**: 投屏, window应用程序, Cpp
## README
# 媒体投屏器 (MediaCast)
## 程序由来
本来想着在网上找个能在 Windows 客户运行的媒体投屏软件来把电脑上的媒体投屏到投影仪上,
但找了多款都是必须要双端安装,还需要验证码等,点对点投屏,无语。安卓端却有一堆投屏软件。
然后自己通过 AI 辅助摸索着写了这个程序。自己也足够用了!
## 声明
该项目本着学习目的开源。请勿用于非法用途,请勿用于货币交易。一切后果由使用者承担。转载请注明,欢迎 fork、issues。
## 简介
**MediaCast(多媒体投屏 v1.4.0)** 是一款基于 **C# / WinForms(.NET Framework 4.7.2)** 开发的本地媒体投屏工具,
支持将电脑上的音视频文件通过 **DLNA/UPnP 协议** 投屏到智能电视、投影仪、音响等局域网设备,无需双端安装客户端。
### 主要特点
- 🎯 **一键投屏**:选择文件 → 选择设备 → 开始投屏,三步完成
- 📱 **设备自动发现**:基于 SSDP 协议智能扫描局域网内的 DLNA 投屏设备,每 15 秒自动刷新
- ⚡ **高性能传输**:内置 HTTP 文件服务器流式传输媒体,支持断点续传(HTTP Range)
- 🎨 **原生自绘 UI**:纯 GDI+ 自绘深色主题界面,圆角按钮、无第三方 UI 依赖
## 功能特性
### 核心功能
| 功能 | 描述 |
|------|------|
| 设备发现 | SSDP 自动扫描局域网内 DLNA/UPnP 媒体渲染设备,可手动刷新 |
| 文件浏览 | 支持单文件浏览与文件夹批量加载(记忆上次目录,启动自动恢复) |
| 投屏控制 | 开始投屏、暂停/恢复、结束投屏 |
| 播放速度 | 支持 0.5x ~ 8x 多档倍速(通过 DLNA SetSpeed) |
| 音量控制 | 音量滑块调节、一键静音切换(SOAP SetVolume/SetMute) |
| 多格式支持 | 内置 80+ 常见音视频扩展名过滤器(mp4/avi/mkv/mp3/flac 等) |
### 支持的媒体格式(部分)
视频:mp4、avi、mkv、mov、wmv、flv、webm、mpeg、m4v、ts、m2ts、vob、rmvb 等
音频:mp3、wav、flac、m4a、aac、ogg、wma、ape、opus、midi 等
### 系统要求
- **操作系统**:Windows 7 SP1 / 10 / 11
- **运行环境**:.NET Framework 4.7.2 或更高版本
- **网络要求**:电脑与投屏设备需处于同一局域网
## 使用说明
1. 点击 **浏览文件** 或 **浏览文件夹** 选择要投屏的媒体(文件夹模式支持启动时自动恢复上次目录)
2. 等待左侧 **设备列表** 自动发现设备,或点击 **刷新设备** 手动扫描
3. 选中目标设备,点击 **开始投屏**
4. 通过下方控制区进行 **暂停 / 结束投屏、倍速、音量** 调节
> 提示:程序内置 HTTP 文件服务器,默认端口 `19735`,如被占用会自动尝试后续端口(最多 10 次)。
## 技术架构
### 使用技术
| 技术 | 用途 |
|------|------|
| C# / WinForms | 桌面 UI 框架 |
| .NET Framework 4.7.2 | 目标框架 |
| DLNA / UPnP | 设备发现与控制协议 |
| SSDP(UDP 组播) | 局域网设备自动发现 |
| SOAP(XML) | 向设备发送 AVTransport 控制指令 |
| HTTP / TCP (TcpListener) | 内置文件服务器,媒体流式传输 |
| GDI+ 自绘 | 深色主题、圆角控件、OwnerDraw 列表 |
### 项目结构
```
MediaCast/
├── MediaCast.sln # 解决方案
└── MediaCast/
├── MainForm.cs # 主窗体(UI 布局、交互逻辑)
├── Program.cs # 程序入口(HTTP 连接池全局配置)
├── Core/
│ ├── DLNAController.cs # DLNA 控制:SetURI/Play/Pause/Stop/音量
│ ├── DeviceDiscovery.cs # SSDP 搜索与设备描述解析
│ ├── DeviceDiscoveryManager.cs# 设备发现调度(15s 自动扫描、防重入)
│ ├── DeviceList.cs # 设备列表缓存
│ ├── HTTPFileServer.cs # 内置 HTTP 文件服务器(Range 支持)
│ ├── NetworkHelper.cs # 局域网 IP 获取
│ └── AppLogger.cs # 日志输出
└── UI/
├── ThemeColors.cs # 主题色板
├── DrawingHelper.cs # GDI+ 绘制辅助(圆角路径等)
├── StyledButton.cs # 自绘按钮
├── StyledComboBox.cs # 自绘下拉框
└── DeviceListItem.cs # 设备列表项模型
```
## 构建与运行
```bash
# 克隆仓库
git clone https://gitee.com/yqsphp/MediaCast.git
cd MediaCast
# 使用 Visual Studio 2017+ 打开 MediaCast.sln,选择 Release 编译
# 或命令行构建
dotnet build MediaCast/MediaCast.csproj -c Release
```
编译产物位于 `MediaCast/bin/Release/`,直接运行 `MediaCast.exe` 即可。