SkillAgentSearch skills...

Dorisoy.Mediasoup

Dorisoy.Mediasoup 是一个基于 .NET 8 的完整实时音视频通信解决方案,采用 Mediasoup SFU 架构实现高性能的 WebRTC 媒体服务。项目包含 Mediasoup 核心库(C# 实现)、libuv 异步 I/O 绑定、ASP.NET Core 集成中间件、SignalR 信令服务器,以及 WPF 桌面客户端和 Blazor Web 客户端。支持 Open/Pull/Invite 三种服务模式,提供房间管理、音视频采集传输、多端互通等功能。技术栈涵盖 WebRTC、SignalR、SIPSorcery、OpenCvSharp、NAudio 等,适用于在线会议、远程协作、直播互动等场景。

Install / Use

/learn @dorisoy/Dorisoy.Mediasoup

README

Dorisoy.Mediasoup

<div align="center">

.NET 8 WPF mediasoup License

基于 SFU 架构的开源视频会议系统

</div>

Dorisoy.Mediasoup 是一个基于 .NET 8 和 Mediasoup SFU(选择性转发单元)架构的企业级开源视频会议系统。项目采用纯 C# 实现 Mediasoup 核心库,提供 WPF 桌面客户端和 Vue.js Web 客户端,支持低延迟、高并发的实时音视频通信。

系统集成了丰富的协作功能:协同白板实时投票同步转译屏幕截图标注即时聊天等,是构建在线会议、远程协作、在线教育、直播互动等场景的理想选择。

商业版下载地址:https://shop.unitos.cn/item/3


核心优势

| 特性 | 描述 | |------|------| | SFU 架构 | 采用 Mediasoup 选择性转发,服务器仅转发媒体流,客户端承担编解码,大幅降低服务器负载 | | 多编解码器 | 支持 VP8、VP9(默认)、H.264,VP9 可节省 30% 带宽,H.264 支持硬件加速 | | 多端互通 | WPF 桌面端 + Vue.js Web 端无缝互通,统一 SignalR 信令协议 | | 灵活服务模式 | Open(开放)、Pull(按需)、Invite(邀请)三种模式适配不同会议场景 | | 丰富协作工具 | 内置白板、投票、翻译、截图、聊天等协作功能,开箱即用 | | 纯 C# 实现 | Mediasoup 核心库纯 C# 实现,与 .NET 生态无缝集成 |


屏幕截图

<img src="https://github.com/dorisoy/Dorisoy.Mediasoup/blob/main/screen/1.png"/> <img src="https://github.com/dorisoy/Dorisoy.Mediasoup/blob/main/screen/2.png"/> <img src="https://github.com/dorisoy/Dorisoy.Mediasoup/blob/main/screen/3.png"/> <img src="https://github.com/dorisoy/Dorisoy.Mediasoup/blob/main/screen/4.png"/>

功能特性

音视频通信

| 功能 | 描述 | |------|------| | 实时音视频 | 低延迟、高质量的音视频采集、编码、传输和渲染 | | 多编解码器 | VP8、VP9(默认)、H.264 视频编解码,Opus 音频编解码 | | 屏幕共享 | 支持全屏、窗口、区域共享,可共享系统音频 | | 活跃发言者 | 基于音频级别的发言者识别和高亮显示 | | 摄像头切换 | 支持多摄像头切换和分辨率调整 |

协作工具

| 功能 | 描述 | |------|------| | 协同白板 | 支持画笔、矩形、椭圆、文字、橡皮擦、选择等工具,实时同步绘制 | | 实时投票 | 主持人创建投票,参与者实时投票,结果即时统计展示 | | 同步转译 | 语音识别 + 多语言翻译,实时生成字幕,支持保存转录内容 | | 屏幕截图 | 选区截图 + 内置标注工具(画笔、矩形、椭圆、箭头、文字),自动复制到剪贴板 | | 协同编辑器 | 多人实时协同文档编辑 |

即时通讯

| 功能 | 描述 | |------|------| | 群聊/私聊 | 支持房间群聊和一对一私聊 | | 多媒体消息 | 支持文本、图片、文件、表情消息 | | 表情反应 | 会中表情反馈,带音效的表情动画 | | 未读提醒 | 智能未读消息计数和提醒 |

会议管理

| 功能 | 描述 | |------|------| | 房间管理 | 创建/加入/离开房间,完整生命周期管理 | | 成员管理 | 查看在线成员,踢出用户,禁言控制 | | 主持人权限 | 邀请发言、关闭媒体流、发起投票等主持人专属功能 | | JWT 认证 | 安全的用户身份验证和授权机制 |


解决方案架构

Dorisoy.Mediasoup.sln
│
├── src/                                         # 源代码目录
│   │
│   ├── Dorisoy.Mediasoup/                       # [核心库] Mediasoup SFU C# 实现
│   │   ├── Router/                              #   路由器 - 管理 Transport、Producer、Consumer
│   │   ├── Transport/                           #   传输层抽象基类
│   │   ├── WebRtcTransport/                     #   WebRTC 传输实现
│   │   ├── PlainTransport/                      #   Plain RTP 传输(用于 FFmpeg/GStreamer)
│   │   ├── PipeTransport/                       #   管道传输(用于路由器间通信)
│   │   ├── DirectTransport/                     #   直接传输
│   │   ├── Producer/                            #   媒体生产者
│   │   ├── Consumer/                            #   媒体消费者
│   │   ├── DataProducer/                        #   数据通道生产者
│   │   ├── DataConsumer/                        #   数据通道消费者
│   │   ├── Worker/                              #   Worker 进程管理
│   │   ├── Channel/                             #   与原生 worker 的通信通道
│   │   ├── WebRtcServer/                        #   WebRTC 服务器(端口复用)
│   │   ├── RtpObserver/                         #   RTP 观察者基类
│   │   ├── AudioLevelObserver/                  #   音频级别观察者
│   │   ├── ActiveSpeakerObserver/               #   活跃发言者观察者
│   │   ├── Settings/                            #   配置设置类
│   │   ├── ORTC/                                #   ORTC 能力协商
│   │   ├── MediasoupServer.cs                   #   服务器入口类
│   │   └── MediasoupOptions.cs                  #   配置选项
│   │
│   ├── Dorisoy.Libuv/                           # [底层库] libuv 异步 I/O 的 .NET 绑定
│   │   └── src/                                 #   TCP/UDP/Pipe 异步通信实现
│   │
│   ├── Dorisoy.Mediasoup.Common/                # [共享库] 公共模型和工具
│   │   ├── ClientRequest/                       #   客户端请求模型(21个)
│   │   ├── RtpParameters/                       #   RTP 参数定义
│   │   ├── SctpParameters/                      #   SCTP 参数定义
│   │   ├── FBS/                                 #   FlatBuffers 序列化定义(28个子目录)
│   │   ├── EventEmitter/                        #   事件发射器实现
│   │   ├── H264ProfileLevelId/                  #   H.264 配置解析
│   │   ├── ScalabilityMode/                     #   可伸缩模式解析
│   │   └── Constants/                           #   常量定义
│   │
│   ├── Dorisoy.Mediasoup.AspNetCore/            # [集成库] ASP.NET Core 集成中间件
│   │   └── Microsoft/Extensions/                #   DI 扩展方法
│   │
│   ├── Dorisoy.Meeting.Server/                  # [服务端] 会议信令服务器
│   │   ├── SignalR/                             #   SignalR Hub 和服务
│   │   │   ├── MeetingHub.cs                    #     会议 Hub(1400+ 行核心逻辑)
│   │   │   ├── Models/                          #     消息通知模型
│   │   │   └── Services/                        #     Hub 相关服务
│   │   ├── Models/                              #   业务模型(11个)
│   │   ├── Authorization/                       #   JWT 认证和授权
│   │   ├── Settings/                            #   服务器配置
│   │   ├── Exceptions/                          #   自定义异常(6个)
│   │   ├── Room.cs                              #   房间管理(音频观察、成员管理)
│   │   ├── Peer.cs                              #   Peer 管理(Transport/Producer/Consumer)
│   │   ├── Scheduler.cs                         #   调度器(房间创建、成员加入离开)
│   │   └── ServeMode.cs                         #   三种服务模式枚举
│   │
│   ├── Dorisoy.Meeting.Web/                     # [Web后端] ASP.NET Core 应用
│   │   ├── Controllers/                         #   REST API 控制器
│   │   ├── Startup.cs                           #   应用配置(认证、CORS、Mediasoup)
│   │   ├── Program.cs                           #   应用入口
│   │   ├── mediasoupsettings.json               #   Mediasoup 详细配置
│   │   ├── appsettings.json                     #   应用配置
│   │   ├── dtls-cert.pem / dtls-key.pem         #   DTLS 证书
│   │   └── wwwroot/                             #   静态文件
│   │
│   ├── Dorisoy.Meeting.Client/                  # [桌面端] WPF 客户端
│   │   ├── WebRtc/                              #   WebRTC 实现
│   │   │   ├── MediasoupDevice.cs               #     Mediasoup 设备封装
│   │   │   ├── MediasoupTransport.cs            #     传输层实现(55KB 核心)
│   │   │   ├── MediasoupSdpBuilder.cs           #     SDP 构建器
│   │   │   ├── AudioEncoders.cs                 #     音频编码器(Opus/PCMA)
│   │   │   ├── VideoEncoders.cs                 #     视频编码器(VP8/H264)
│   │   │   ├── VideoDecoders.cs                 #     视频解码器
│   │   │   ├── RtpMediaDecoder.cs               #     RTP 媒体解码
│   │   │   └── FFmpegConfig.cs                  #     FFmpeg 配置
│   │   ├── Services/                            #   服务层
│   │   │   ├── SignalRService.cs                #     SignalR 通信服务
│   │   │   └── WebRtcService.cs                 #     WebRTC 服务
│   │   ├── ViewModels/                          #   MVVM 视图模型
│   │   ├── Models/                              #   数据模型
│   │   ├── Views/                               #   视图控件
│   │   ├── Converters/                          #   值转换器
│   │   ├── Helpers/                             #   工具类
│   │   ├── MainWindow.xaml                      #   主窗口(31KB 完整 UI)
│   │   └── App.xaml.cs                          #   应用入口和 DI 配置
│   │
│   ├── Dorisoy.Meeting.Web.Client/              # [Web前端] Vue.js 客户端
│   │   ├── src/
│   │   │   ├── App.vue                          #   主应用组件(40KB 完整实现)
│   │   │   ├── lib/                             #   依赖库
│   │   │   └── assets/                          #   静态资源
│   │   ├── package.json                         #   NPM 依赖配置
│   │   └── vite.config.js                       #   Vite 构建配置
│   │
│   ├── Dorisoy.Utils/                           # [工具库] 通用工具
│   │   ├── Extensions/                          #   扩展方法(21个)
│   │   ├── Cryptography/                        #   加密工具
│   │   ├── Json/                                #   JSON 序列化工具
│   │   └── Models/                              #   通用模型
│   │
│   └── Dorisoy.Mediasoup.Runtimes.Builder/      # [构建工具] 原生运行时构建脚本
│       ├── build_nuget.ps1                      #   Windows 构建脚本
│       └── build_nuget.sh                       #   Linux/macOS 构建脚本
│
└── tools/TokenGenerator/                        # Token 生成工具
    └── Program.cs                               #   JWT Token 生成器

技术栈

后端技术

| 技术 | 版本 | 用途 | |------|------|------| | .NET | 8.0 | 运行时框架 | | ASP.NET Core | 8.0 | Web 框架 | | SignalR | 8.0 | 实时双向通信、信令服务 | | Mediasoup | 3.15.7 | SFU 媒体服务器 | | FlatBuffers | - | 高效序列化 | | Serilog | - | 结构化日志 |

客户端技术

| 技术 | 用途 | |------|------| | WPF + Wpf.Ui | 桌面客户端 UI 框架(Fluent Design) | | SIPSorcery | .NET WebRTC 实现 | | NAudio | 音频采集和处理 | | OpenCvSharp | 视频采集和处理 | | FFmpeg | 视频编解码(VP8/VP9/H264) | | CommunityToolkit.Mvvm | MVVM 框架 | | Vue.js 3 | Web 前端框架 | | mediasoup-client | 浏览器 WebRTC 客户端 |

支持的编解码器

| 类型 | 编解码器 | 说明 | |------|---------|------| | 视频 | VP9(默认) | 高压缩率,节省 30% 带宽 | | 视频 | VP8 | 兼容性好 | | 视频 | H.264 | 硬件加速支持 | | 音频 | Opus (48kHz) | 高质量立体声 |


三种服务模式

系统支持三种不同的会议服务模式,适配不同场景需求:

1. Open 模式(开放模式)

适用场景:自由会议、开放讨论、小型团队协作

| 特点 | 说明 | |------|------| | 自动推流 | 用户进入后立即开始推流 | | 自动消费 | 自动消费房间内其他用户的媒体流 | | 持续推流 | 媒体流即使无人消费也不会自动停止 |

2. Pull 模式(拉取模式)

适用场景:大型会议、按需观看、节省带宽

| 特点 | 说明 | |------|------| | 按需拉取 | 用户主动选择要拉取的媒体流 | | 按需推流 | 触发其他用户推流 | | 自动停流 | 无人消费时自动停止推流,节省带宽 |

3. Invite 模式(邀请模式)

适用场景:正式会议、课堂教学、大型直播

| 特点 | 说明 | |------|------| | 主持人邀请 | 仅主持人可邀请用户推流 | | 申请审批 | 用户可申请推流,需主持人同意 | | 集中管控 | 主持人可关闭任意用户的媒体流 |


系统架构

┌─────────────────────────────────────────────────────────────────────┐
│                         Client Layer                                 │
├─────────────────────────────────┬───────────────────────────────────┤
│      WPF Desktop Client         │        Vue.js Web Client          │
│  ┌───────────────────────────┐  │  ┌───────
View on GitHub
GitHub Stars22
CategoryContent
Updated5d ago
Forks3

Languages

C#

Security Score

95/100

Audited on Mar 19, 2026

No findings