# TouchPoint Medical **Repository Path**: mrfox_wang/touch-point-medical ## Basic Information - **Project Name**: TouchPoint Medical - **Description**: 推车系统,推车端和医技端,会议、视频、语音,操纵摄像头 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-14 - **Last Updated**: 2025-12-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README TouchPointMedical 远程问诊系统 ## 系统概述 TouchPointMedical 是一个基于局域网的实时音视频问诊系统,专为医生和患者之间的远程医疗咨询设计。系统采用 **C# WinForms + WebView2 + 纯 WebRTC** 架构,实现了低延迟、高质量的音视频通信。 ## 核心特性 - ✅ **无浏览器权限弹窗**:WebView2 自动授予摄像头和麦克风权限,无需用户点击 - ✅ **纯 WebRTC 传输**:使用浏览器原生 getUserMedia 采集,WebRTC P2P 传输 - ✅ **HTML 弹窗确认**:医生端使用 HTML 弹窗审核患者申请,响应迅速 - ✅ **同机测试友好**:医生端默认静音,支持同一台电脑测试 - ✅ **超低延迟**:端到端延迟 ≤100ms - ✅ **申请审核机制**:患者申请 → 医生审核 → 建立连接 - ✅ **单 exe 部署**:开箱即用,无需安装 FFmpeg ## 系统架构 ### 最新架构(纯 WebRTC) ``` [医生端 TouchPointMedical_Doctor.exe] ├─ 启动 TCP 信令服务器(端口 8500,绑定 127.0.0.1) ├─ 自动获取并显示本机局域网 IP └─ WebView2 加载本地 HTML: ├─ 通过 WebRTC 接收患者的音视频流(video + audio) ├─ 默认静音播放音频(避免回音) └─ 点击"解除静音"按钮可听到患者声音 [患者端 TouchPointMedical_Patient.exe] ├─ UI 输入医生 IP(4个数字输入框,避免中文输入问题) └─ WebView2 加载本地 HTML: ├─ 自动获取摄像头和麦克风权限(无需用户点击) ├─ 使用 getUserMedia 采集摄像头 + 麦克风 ├─ 通过 WebRTC P2P 直接传输给医生端 └─ 可接收医生端的音频流(医生麦克风,未实现) ``` ### 关键技术改进 1. **不再使用 FFmpeg 采集**:改用浏览器原生 `getUserMedia()` API 2. **不再使用 RTP 传输**:改用 WebRTC 的 SRTP 加密传输 3. **不再需要管理员权限**:使用高位端口 8500 + TCP Socket 4. **自动授权权限**:WebView2 的 `PermissionRequested` 事件自动允许摄像头/麦克风 ## 通信协议 | 通道 | 协议 | 端口 | 方向 | 内容 | |------|------|------|------|------| | 信令 | TCP Socket | 8500 | 双向 | SDP offer/answer, ICE candidates | | 音视频 | WebRTC (SRTP/UDP) | 动态协商 | 双向 | 患者视频+音频,医生音频 | ## 使用流程 ### 医生端操作 1. 双击运行 `TouchPointMedical_Doctor.exe` 2. 程序自动启动,显示本机 IP 地址 3. 等待患者连接申请 4. 收到患者申请时**在网页中弹出 HTML 对话框**,显示患者信息 5. 点击【接受】或【拒绝】按钮(无需等待,响应迅速) 6. 接受后自动建立 WebRTC 连接,显示患者的视频 7. 音频默认静音,点击【解除静音】按钮可听到患者声音 ### 患者端操作 1. 双击运行 `TouchPointMedical_Patient.exe` 2. 输入医生的 IP 地址(4个数字输入框,例如 `127.0.0.1`) 3. 点击【连接医生】 4. 填写患者信息表单(姓名/年龄/性别/症状/病史/电话) 5. 点击【发送申请】 6. 等待医生确认 7. 医生接受后,**浏览器自动获取摄像头和麦克风权限**(无需点击确认) 8. WebRTC 连接建立,开始问诊 ## 技术栈 - **后端**:C# .NET 8.0 - **UI**:WinForms + WebView2 - **前端**:HTML5 + JavaScript + WebRTC - **音视频采集**:浏览器原生 getUserMedia API - **网络通信**:TCP Socket 信令 + WebRTC P2P 传输 ## 依赖项 1. **WebView2 Runtime**:Windows 11 自带,Windows 10 需要安装 2. **.NET 8.0 Runtime**:运行时依赖 3. **~~FFmpeg~~**:不再需要! ## 部署说明 ### 文件结构 ``` TouchPointMedical/ ├── TouchPointMedical_Doctor.exe ├── TouchPointMedical_Patient.exe ├── webView/ │ ├── dist/ │ │ ├── doctor.html │ │ └── patient.html └── CommonLibrary.dll # 公共库 ``` ### 防火墙配置 需要开放以下端口: - **8500**:TCP 信令服务器 - **动态 UDP 端口**:WebRTC 会自动协商使用的 UDP 端口 ### 首次运行 **无需手动授权!**WebView2 会自动授予摄像头和麦克风权限。 ## 开发环境 - Visual Studio 2022 或更高版本 - .NET 8.0 SDK - WebView2 Runtime - ~~FFmpeg 开发包~~(不再需要) ## 项目结构 ``` TouchPointMedical/ ├── CommonLibrary/ # 公共库 │ ├── Models/ # 数据模型 │ ├── Signaling/ # 信令服务 │ ├── Media/ # 媒体处理 │ └── Utilities/ # 工具类 ├── TouchPointMedical_Doctor/ # 医生端 └── TouchPointMedical_Patient/ # 患者端 ``` ## 编译说明 ```bash # 编译整个解决方案 dotnet build # 编译 Release 版本 dotnet build --configuration Release ``` ## 注意事项 1. 确保两台电脑在同一局域网内(或同一台电脑测试) 2. **不再需要管理员权限**:普通用户即可运行 3. 患者端输入的 IP 必须是医生端的实际 IP(同机测试用 `127.0.0.1`) 4. **同一台电脑测试**:医生端音频默认静音,需要时点击"解除静音" 5. WebRTC 会自动选择最优的网络路径和编解码器 ## 常见问题 ### 无法连接医生 - 检查医生 IP 地址是否正确 - 检查防火墙是否阻止了端口 8500 - 确认医生端是否正常运行 - 同机测试请使用 `127.0.0.1` ### 没有音视频 - 检查摄像头和麦克风是否正常工作 - 查看浏览器控制台是否有错误信息 - 确认 WebRTC 连接状态是否为 'connected' - 医生端音频默认静音,需点击"解除静音" ### 医生点击确认后要等很久 - ⚠️ 这个问题已经解决!现在使用 HTML 弹窗,响应迅速 - 旧版本使用 WinForms MessageBox 会阻塞 UI 线程 ### 延迟过高 - 检查网络连接质量 - WebRTC 会自动选择最优的编解码器 - 理论延迟应在 50-100ms 左右 ## 许可证 本项目仅供学习和研究使用,不得用于商业用途。