【音视频通话系统】架构详解

复制代码
欢迎多多交流:18665385110

1. 系统概述

本系统是一个基于 WebRTC 的实时音视频通话平台,采用客户端-服务器架构,支持点对点(P2P)视频通话、NAT 穿透、多人在线管理等功能。系统由以下核心组件构成:

复制代码
┌─────────────────────────────────────────────────────────────────────────────────┐
│                              系统整体架构                                         │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│    ┌──────────────────┐         ┌──────────────────┐                           │
│    │   Android 客户端 A  │         │   Android 客户端 B  │                           │
│    │                  │         │                  │                           │
│    │  ┌────────────┐  │         │  ┌────────────┐  │                           │
│    │  │ WebRTC     │  │         │  │ WebRTC     │  │                           │
│    │  │ 音视频引擎  │  │         │  │ 音视频引擎  │  │                           │
│    │  └────────────┘  │         │  └────────────┘  │                           │
│    │  ┌────────────┐  │         │  ┌────────────┐  │                           │
│    │  │ TCP 信令   │  │         │  │ TCP 信令   │  │                           │
│    │  └────────────┘  │         │  └────────────┘  │                           │
│    └────────┬─────────┘         └────────┬─────────┘                           │
│             │                            │                                      │
│             │      TCP 信令通道          │                                      │
│             │      (注册/呼叫/SDP/ICE)    │                                      │
│             │                            │                                      │
│             └────────────┬───────────────┘                                      │
│                          │                                                      │
│                          ▼                                                      │
│             ┌────────────────────────┐                                          │
│             │    TCP 信令服务器       │                                          │
│             │    (端口: 3480)        │                                          │
│             │                        │                                          │
│             │  - 用户注册管理         │                                          │
│             │  - 消息转发             │                                          │
│             │  - 在线状态管理         │                                          │
│             │  - 心跳检测             │                                          │
│             └────────────────────────┘                                          │
│                          │                                                      │
│                          ▼                                                      │
│             ┌────────────────────────┐                                          │
│             │   STUN/TURN 服务器      │                                          │
│             │   (端口: 3478/3479)    │                                          │
│             │                        │                                          │
│             │  - NAT 穿透            │                                          │
│             │  - ICE 候选者收集       │                                          │
│             │  - 中继转发(TURN)     │                                          │
│             └────────────────────────┘                                          │
│                                                                                 │
│             ════════════════════════════════════════════════════════            │
│                          P2P 音视频数据通道                                      │
│             ════════════════════════════════════════════════════════            │
│                                                                                 │
│    ┌──────────────────┐                       ┌──────────────────┐              │
│    │   客户端 A        │ ◄───────────────────► │   客户端 B        │              │
│    │                  │    音视频数据流         │                  │              │
│    └──────────────────┘                       └──────────────────┘              │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

2. 技术栈

2.1 服务端技术栈

组件 技术选型 说明
信令服务器 Go 1.18+ TCP 长连接管理、消息转发
STUN/TURN coturn NAT 穿透服务
数据库 MySQL 5.7+ 用户数据存储
Web 服务器 Apache/Nginx HTTPS 反向代理
进程管理 PM2 服务监控和自动重启

2.2 客户端技术栈

组件 技术选型 说明
开发语言 Kotlin Android 原生开发
音视频引擎 Google WebRTC 实时音视频处理
网络通信 Socket (TCP) 信令传输
异步处理 Coroutines Kotlin 协程
UI 框架 Android SDK 原生界面

3. 核心模块详解

3.1 服务端架构

复制代码
┌─────────────────────────────────────────────────────────────────────────────────┐
│                              服务端架构                                          │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                           main.go (入口)                                  │   │
│  │  - 加载配置                                                               │   │
│  │  - 初始化日志                                                             │   │
│  │  - 启动信令服务器                                                         │   │
│  │  - 启动 STUN/TURN 服务器                                                  │   │
│  │  - 启动健康检查服务                                                      │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                      │                                          │
│          ┌───────────────────────────┼───────────────────────────┐             │
│          │                           │                           │             │
│          ▼                           ▼                           ▼             │
│  ┌───────────────┐          ┌───────────────┐          ┌───────────────┐      │
│  │ protocol.go   │          │ client.go     │          │ message.go    │      │
│  │               │          │               │          │               │      │
│  │ - 消息类型定义 │          │ - 客户端管理   │          │ - 消息处理     │      │
│  │ - 协议常量     │          │ - 注册处理     │          │ - 心跳处理     │      │
│  │ - Client 结构 │          │ - 连接统计     │          │ - SDP 转发     │      │
│  └───────────────┘          │ - 资源清理     │          │ - ICE 转发     │      │
│                             └───────────────┘          └───────────────┘      │
│                                                                                 │
│  ┌───────────────┐          ┌───────────────┐          ┌───────────────┐      │
│  │ config.go     │          │ worker_pool.go│          │ stun_turn.go  │      │
│  │               │          │               │          │               │      │
│  │ - 配置加载     │          │ - 工作池管理   │          │ - STUN 服务    │      │
│  │ - 参数验证     │          │ - 任务分发     │          │ - TURN 服务    │      │
│  └───────────────┘          └───────────────┘          └───────────────┘      │
│                                                                                 │
│  ┌───────────────┐          ┌───────────────┐                                   │
│  │ logger.go     │          │ health_check.go│                                   │
│  │               │          │               │                                   │
│  │ - 日志输出     │          │ - 健康检查     │                                   │
│  │ - 文件轮转     │          │ - 状态监控     │                                   │
│  └───────────────┘          └───────────────┘                                   │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘
3.1.1 消息协议

服务端采用长度前缀 + JSON 的消息格式:

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    消息格式                                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  长度前缀 (4 字节, Big Endian)                        │   │
│  │  表示后续 JSON 数据的字节长度                          │   │
│  └─────────────────────────────────────────────────────┘   │
│                          │                                  │
│                          ▼                                  │
│  ┌─────────────────────────────────────────────────────┐   │
│  │  JSON 数据                                           │   │
│  │  {                                                   │   │
│  │    "type": "消息类型",                                │   │
│  │    "sender_id": "发送方ID",                          │   │
│  │    "receiver_id": "接收方ID",                        │   │
│  │    "data": "消息内容"                                 │   │
│  │  }                                                   │   │
│  └─────────────────────────────────────────────────────┘   │
│                                                             │
└─────────────────────────────────────────────────────────────┘
3.1.2 支持的消息类型
消息类型 方向 说明
register 客户端→服务器 用户注册
register_response 服务器→客户端 注册响应
heartbeat 客户端→服务器 心跳保持
heartbeat_response 服务器→客户端 心跳响应
query_online_users 客户端→服务器 查询在线用户
query_online_users_response 服务器→客户端 在线用户列表
get_stun_turn_config 客户端→服务器 获取 STUN/TURN 配置
get_stun_turn_config_response 服务器→客户端 STUN/TURN 配置
call_request 客户端→客户端 呼叫请求
call_stop 客户端→客户端 挂断通知
webrtc_sdp 客户端→客户端 SDP 交换
webrtc_ice_candidate 客户端→客户端 ICE 候选者交换
3.1.3 连接统计

服务端对每个连接进行详细统计:

go 复制代码
type ClientStats struct {
    ConnectTime           time.Time  // 连接建立时间
    MessagesSent          int64      // 发送消息数
    MessagesReceived      int64      // 接收消息数
    BytesSent             int64      // 发送字节数
    BytesReceived         int64      // 接收字节数
    HeartbeatSent         int64      // 发送心跳数
    HeartbeatReceived     int64      // 接收心跳数
    CallRequestSent       int64      // 发起呼叫数
    CallRequestReceived   int64      // 接收呼叫数
    CallStopSent          int64      // 发起挂断数
    CallStopReceived      int64      // 接收挂断数
    WebRTCSdpSent         int64      // SDP 发送数
    WebRTCSdpReceived     int64      // SDP 接收数
    WebRTCIceCandidateSent   int64   // ICE 发送数
    WebRTCIceCandidateReceived int64 // ICE 接收数
    Errors                int64      // 错误数
}

3.2 客户端架构

复制代码
┌─────────────────────────────────────────────────────────────────────────────────┐
│                              客户端架构                                          │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                              UI 层                                        │   │
│  │  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐    │   │
│  │  │LoginActivity│  │MainActivity │  │UserList     │  │VideoCall    │    │   │
│  │  │             │  │             │  │Fragment     │  │Activity     │    │   │
│  │  │ - 用户登录   │  │ - 导航管理   │  │ - 用户列表   │  │ - 视频通话   │    │   │
│  │  │ - 账号注册   │  │ - TCP 管理   │  │ - 呼叫发起   │  │ - WebRTC    │    │   │
│  │  └─────────────┘  └─────────────┘  └─────────────┘  └─────────────┘    │   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                      │                                          │
│                                      ▼                                          │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                            信令层                                         │   │
│  │  ┌─────────────────────────────────────────────────────────────────┐    │   │
│  │  │                    TcpSignalingClient                            │    │   │
│  │  │  - TCP 连接管理                                                  │    │   │
│  │  │  - 消息发送/接收                                                  │    │   │
│  │  │  - 心跳保持                                                       │    │   │
│  │  │  - 断线重连                                                       │    │   │
│  │  └─────────────────────────────────────────────────────────────────┘    │   │
│  │                                      │                                   │   │
│  │          ┌───────────────────────────┼───────────────────────────┐      │   │
│  │          │                           │                           │      │   │
│  │          ▼                           ▼                           ▼      │   │
│  │  ┌───────────────┐          ┌───────────────┐          ┌───────────────┐│   │
│  │  │MessageHandler │          │HeartbeatManager│          │TcpProtocol    ││   │
│  │  │               │          │               │          │               ││   │
│  │  │ - 消息解析     │          │ - 心跳发送     │          │ - 编码/解码   ││   │
│  │  │ - 回调分发     │          │ - 超时检测     │          │ - 长度前缀   ││   │
│  │  └───────────────┘          └───────────────┘          └───────────────┘│   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                      │                                          │
│                                      ▼                                          │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                           WebRTC 层                                       │   │
│  │  ┌─────────────────────────────────────────────────────────────────┐    │   │
│  │  │                      WebRTCClient                                │    │   │
│  │  │  - PeerConnection 管理                                           │    │   │
│  │  │  - 媒体流管理                                                     │    │   │
│  │  │  - SDP 协商                                                       │    │   │
│  │  │  - ICE 候选者管理                                                 │    │   │
│  │  └─────────────────────────────────────────────────────────────────┘    │   │
│  │          ┌───────────────────────────┼───────────────────────────┐      │   │
│  │          │                           │                           │      │   │
│  │          ▼                           ▼                           ▼      │   │
│  │  ┌───────────────┐          ┌───────────────┐          ┌───────────────┐│   │
│  │  │PeerConnection │          │SdpManager     │          │IceCandidate   ││   │
│  │  │Manager        │          │               │          │Manager        ││   │
│  │  │               │          │               │          │               ││   │
│  │  │ - 连接创建     │          │ - SDP 缓存    │          │ - ICE 缓存   ││   │
│  │  │ - 状态监控     │          │ - 时序管理    │          │ - 时序管理   ││   │
│  │  │ - 媒体协商     │          │               │          │               ││   │
│  │  └───────────────┘          └───────────────┘          └───────────────┘│   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                      │                                          │
│                                      ▼                                          │
│  ┌─────────────────────────────────────────────────────────────────────────┐   │
│  │                            网络层                                         │   │
│  │  ┌───────────────┐          ┌───────────────┐          ┌───────────────┐│   │
│  │  │DnsCache       │          │NetworkMonitor │          │AppConfig      ││   │
│  │  │               │          │               │          │               ││   │
│  │  │ - DNS 缓存     │          │ - 网络状态    │          │ - 配置管理   ││   │
│  │  │ - 解析优化     │          │ - 连接检测    │          │ - 参数存储   ││   │
│  │  └───────────────┘          └───────────────┘          └───────────────┘│   │
│  └─────────────────────────────────────────────────────────────────────────┘   │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘
3.2.1 目录结构
复制代码
android_client/app/src/main/java/com/example/videocall/
├── di/                          # 依赖注入
│   └── ServiceLocator.kt
├── model/                       # 数据模型
│   ├── CallState.kt            # 通话状态
│   ├── Message.kt              # 消息结构
│   ├── MessageType.kt          # 消息类型
│   ├── NatType.kt              # NAT 类型
│   └── User.kt                 # 用户模型
├── network/                     # 网络模块
│   ├── DnsCache.kt             # DNS 缓存
│   └── NetworkMonitor.kt       # 网络监控
├── signaling/                   # 信令模块
│   ├── HeartbeatManager.kt     # 心跳管理
│   ├── MessageHandler.kt       # 消息处理
│   ├── TcpProtocol.kt          # TCP 协议
│   └── TcpSignalingClient.kt   # TCP 客户端
├── util/                        # 工具类
│   ├── AppConfig.kt            # 应用配置
│   ├── Logger.kt               # 日志工具
│   └── PermissionHelper.kt     # 权限管理
├── webrtc/                      # WebRTC 模块
│   ├── IceCandidateManager.kt  # ICE 管理
│   ├── NatTypeDetector.kt      # NAT 检测
│   ├── PeerConnectionManager.kt# 连接管理
│   ├── SdpManager.kt           # SDP 管理
│   └── WebRTCClient.kt         # WebRTC 客户端
├── ui/                          # UI 层
│   ├── call/
│   │   └── VideoCallActivity.kt
│   ├── login/
│   │   └── LoginActivity.kt
│   └── main/
│       ├── MainActivity.kt
│       └── UserListFragment.kt
└── WebRTCPreInitializer.kt     # WebRTC 预初始化

4. 核心流程

4.1 用户注册流程

复制代码
┌─────────────────────────────────────────────────────────────────────────────────┐
│                              用户注册流程                                        │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│    Android 客户端                                    TCP 服务器                  │
│         │                                                │                      │
│         │  1. 用户输入用户名和密码                        │                      │
│         │  ────────────────────>                         │                      │
│         │                                                │                      │
│         │  2. HTTP 登录请求                               │                      │
│         │  POST /api/login                               │                      │
│         │ ───────────────────────────────────────────────>│                      │
│         │                                                │                      │
│         │  3. 登录成功,返回用户信息                       │                      │
│         │ <───────────────────────────────────────────────│                      │
│         │                                                │                      │
│         │  4. 启动 TcpSignalingClient                    │                      │
│         │     - DNS 解析                                  │                      │
│         │     - 建立 TCP 连接                             │                      │
│         │                                                │                      │
│         │  5. 发送 register 消息                          │                      │
│         │  {"type":"register","sender_id":"user_a"}      │                      │
│         │ ───────────────────────────────────────────────>│                      │
│         │                                                │                      │
│         │                                                │  6. 记录用户连接      │
│         │                                                │     - 存储 client_id │
│         │                                                │     - 更新在线状态    │
│         │                                                │                      │
│         │  7. 返回 register_response                     │                      │
│         │  {"type":"register_response","data":"成功"}     │                      │
│         │ <───────────────────────────────────────────────│                      │
│         │                                                │                      │
│         │  8. 启动心跳管理器                              │                      │
│         │     - 每 90 秒发送心跳                          │                      │
│         │                                                │                      │
│         │  9. 查询在线用户                                │                      │
│         │  {"type":"query_online_users"}                 │                      │
│         │ ───────────────────────────────────────────────>│                      │
│         │                                                │                      │
│         │  10. 返回在线用户列表                           │                      │
│         │ <───────────────────────────────────────────────│                      │
│         │                                                │                      │
│         ▼                                                ▼                      │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

4.2 视频通话建立流程

复制代码
┌─────────────────────────────────────────────────────────────────────────────────┐
│                           视频通话建立流程                                       │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│    客户端 A (主叫)              TCP 服务器              客户端 B (被叫)            │
│         │                           │                        │                  │
│         │  1. 用户点击呼叫 B         │                        │                  │
│         │  ────────────────>        │                        │                  │
│         │                           │                        │                  │
│         │  2. call_request          │                        │                  │
│         │ ─────────────────────────>│                        │                  │
│         │                           │                        │                  │
│         │                           │  3. 转发 call_request  │                  │
│         │                           │ ──────────────────────>│                  │
│         │                           │                        │                  │
│         │                           │                        │  4. 手机响铃      │
│         │                           │                        │  用户点击接听     │
│         │                           │                        │                  │
│         │  5. 获取 STUN/TURN 配置    │                        │                  │
│         │ ─────────────────────────>│                        │                  │
│         │ <─────────────────────────│                        │                  │
│         │                           │                        │                  │
│         │  6. 创建 PeerConnection   │                        │                  │
│         │     创建本地媒体流         │                        │                  │
│         │     创建 Offer            │                        │                  │
│         │                           │                        │                  │
│         │  7. webrtc_sdp (offer)    │                        │                  │
│         │ ─────────────────────────>│                        │                  │
│         │                           │  8. 转发 offer         │                  │
│         │                           │ ──────────────────────>│                  │
│         │                           │                        │                  │
│         │                           │                        │  9. 设置远程描述   │
│         │                           │                        │  创建 Answer      │
│         │                           │                        │                  │
│         │                           │  10. webrtc_sdp (answer)│                  │
│         │                           │ <──────────────────────│                  │
│         │  11. 转发 answer          │                        │                  │
│         │ <─────────────────────────│                        │                  │
│         │                           │                        │                  │
│         │  12. 设置远程描述          │                        │                  │
│         │                           │                        │                  │
│         │  ════════════════════════════════════════════════════════════════     │
│         │                                                                     │
│         │  13. ICE Candidate 交换 (双向)                                       │
│         │     - 收集本地候选者                                                  │
│         │     - 发送给对方                                                     │
│         │     - 添加远程候选者                                                 │
│         │                                                                     │
│         │  ════════════════════════════════════════════════════════════════     │
│         │                           │                        │                  │
│         │  14. ICE 连接建立成功      │                        │                  │
│         │     IceConnectionState = CONNECTED                  │                  │
│         │                           │                        │                  │
│         │  <═════════════════════════ P2P 音视频数据流 ═════════════════════>   │
│         │                           │                        │                  │
│         ▼                           ▼                        ▼                  │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

4.3 挂断流程

复制代码
┌─────────────────────────────────────────────────────────────────────────────────┐
│                              挂断流程                                            │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│    客户端 A (挂断方)            TCP 服务器              客户端 B (被叫方)          │
│         │                           │                        │                  │
│         │  1. 用户点击挂断          │                        │                  │
│         │  ────────────────>        │                        │                  │
│         │                           │                        │                  │
│         │  2. call_stop             │                        │                  │
│         │  {"type":"call_stop",     │                        │                  │
│         │   "sender_id":"A",        │                        │                  │
│         │   "receiver_id":"B"}      │                        │                  │
│         │ ─────────────────────────>│                        │                  │
│         │                           │                        │                  │
│         │                           │  3. 转发 call_stop     │                  │
│         │                           │ ──────────────────────>│                  │
│         │                           │                        │                  │
│         │  4. 清理资源              │                        │  5. 清理资源      │
│         │     - 关闭 PeerConnection │                        │     - 关闭连接   │
│         │     - 释放媒体流          │                        │     - 释放资源   │
│         │     - 清空回调            │                        │     - 返回主界面 │
│         │     - 返回主界面          │                        │                  │
│         │                           │                        │                  │
│         ▼                           ▼                        ▼                  │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

5. 部署架构

5.1 生产环境部署

复制代码
┌─────────────────────────────────────────────────────────────────────────────────┐
│                           生产环境部署架构                                       │
├─────────────────────────────────────────────────────────────────────────────────┤
│                                                                                 │
│                           ┌─────────────────┐                                   │
│                           │   域名/SSL证书   │                                   │
│                           │ videocall.itgcs │                                   │
│                           │    .tech        │                                   │
│                           └────────┬────────┘                                   │
│                                    │                                            │
│                                    ▼                                            │
│                           ┌─────────────────┐                                   │
│                           │  Nginx/Apache   │                                   │
│                           │  反向代理       │                                   │
│                           │  HTTPS 443      │                                   │
│                           └────────┬────────┘                                   │
│                                    │                                            │
│          ┌─────────────────────────┼─────────────────────────┐                  │
│          │                         │                         │                  │
│          ▼                         ▼                         ▼                  │
│  ┌───────────────┐        ┌───────────────┐        ┌───────────────┐           │
│  │ TCP 信令服务器 │        │ STUN/TURN 服务│        │ 管理系统      │           │
│  │               │        │               │        │               │           │
│  │ 端口: 3480    │        │ STUN: 3478    │        │ 端口: 8080    │           │
│  │ PM2 管理      │        │ TURN: 3479    │        │ PM2 管理      │           │
│  │               │        │ coturn        │        │               │           │
│  │ - 消息转发    │        │               │        │ - 用户管理    │           │
│  │ - 在线管理    │        │ - NAT 穿透    │        │ - 设备管理    │           │
│  │ - 心跳检测    │        │ - 中继转发    │        │ - API 服务    │           │
│  └───────────────┘        └───────────────┘        └───────────────┘           │
│          │                                                   │                  │
│          │                                                   │                  │
│          └───────────────────────┬───────────────────────────┘                  │
│                                  │                                              │
│                                  ▼                                              │
│                          ┌───────────────┐                                      │
│                          │    MySQL      │                                      │
│                          │   数据库      │                                      │
│                          │               │                                      │
│                          │ - 用户数据    │                                      │
│                          │ - 设备数据    │                                      │
│                          │ - 通话记录    │                                      │
│                          └───────────────┘                                      │
│                                                                                 │
└─────────────────────────────────────────────────────────────────────────────────┘

5.2 服务器配置

5.2.1 系统参数优化
bash 复制代码
# /etc/sysctl.conf
# 文件描述符限制
fs.file-max = 1000000

# TCP 连接优化
net.ipv4.tcp_max_syn_backlog = 65535
net.core.somaxconn = 65535
net.ipv4.tcp_max_tw_buckets = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30

# 网络缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# 应用配置
net.ipv4.ip_local_port_range = 1024 65535
5.2.2 应用配置
json 复制代码
{
  "server": {
    "name": "tcp 服务器",
    "port": 3480,
    "max_connections": 1000000,
    "worker_pool_size": 100
  },
  "client": {
    "heartbeat_interval_seconds": 90,
    "inactive_timeout_seconds": 300
  },
  "stun": {
    "name": "stun服务器",
    "enabled": true,
    "server": "47.106.189.19",
    "port": 3478
  },
  "turn": {
    "name": "turn服务器",
    "enabled": true,
    "server": "47.106.189.19",
    "port": 3479,
    "username": "videocall",
    "password": "turn123456"
  }
}

5.3 部署步骤

5.3.1 服务端部署
bash 复制代码
# 1. 编译服务端
cd server
go build -o server main.go

# 2. 上传到服务器
scp server config.json user@server:~/videocall/

# 3. 启动服务
pm2 start server --name videocall-server

# 4. 查看状态
pm2 status
pm2 logs videocall-server

# 5. 设置开机自启
pm2 startup
pm2 save
5.3.2 STUN/TURN 部署
bash 复制代码
# 1. 安装 coturn
sudo apt install coturn

# 2. 配置 /etc/turnserver.conf
listening-port=3478
tls-listening-port=5349
relay-ip=47.106.189.19
external-ip=47.106.189.19
realm=videocall.itgcs.tech
user=videocall:turn123456
lt-cred-mech
min-port=49152
max-port=65535

# 3. 启动服务
sudo systemctl start coturn
sudo systemctl enable coturn
5.3.3 Android 客户端打包
bash 复制代码
# 1. 编译 APK
cd android_client
./gradlew assembleRelease

# 2. APK 位置
# app/build/outputs/apk/release/app-release.apk

# 3. 签名验证
jarsigner -verify app-release.apk

6. 性能指标

6.1 服务器性能

指标 数值 说明
最大并发连接 1,000,000 可配置
消息处理延迟 < 10ms Worker Pool 模式
心跳间隔 90 秒 可配置
连接超时 300 秒 无活动断开
内存占用 ~50MB 空载状态

6.2 客户端性能

指标 数值 说明
视频分辨率 640x480 默认
帧率 30 fps 可配置
音频编码 Opus WebRTC 默认
视频编码 VP8/H.264 WebRTC 默认
首帧时间 < 2s 正常网络

7. 安全措施

7.1 传输安全

  • HTTPS: 所有 HTTP 请求使用 HTTPS 加密
  • WSS: WebSocket 使用安全连接
  • TURN 认证: TURN 服务器使用用户名密码认证

7.2 数据安全

  • 密码加密: 用户密码使用 bcrypt 加密存储
  • SQL 注入防护: 使用参数化查询
  • XSS 防护: 输入输出转义

7.3 访问控制

  • 防火墙: 只开放必要端口
  • 限流: 防止 DDoS 攻击
  • 日志审计: 记录关键操作

8. 监控与运维

8.1 健康检查

复制代码
GET /health
Response: {"status": "ok", "connections": 1234, "uptime": 86400}

8.2 日志管理

bash 复制代码
# 查看服务日志
pm2 logs videocall-server

# 查看系统日志
tail -f /var/log/videocall/server.log

# 日志轮转配置
/var/log/videocall/*.log {
    daily
    rotate 30
    compress
    missingok
    notifempty
}

8.3 监控指标

  • CPU 使用率
  • 内存使用率
  • 网络流量
  • 连接数
  • 消息处理量
  • 错误率

9. 故障排查

9.1 常见问题

问题 可能原因 解决方案
无法连接服务器 防火墙/端口问题 检查防火墙规则
视频无法显示 WebRTC 初始化失败 检查权限和编解码器
频繁断线 心跳超时 检查网络稳定性
单向音频 ICE 协商失败 检查 NAT 配置

9.2 调试命令

bash 复制代码
# 检查端口占用
netstat -tlnp | grep 3480

# 检查进程状态
ps aux | grep server

# 检查连接数
ss -s

# 测试端口连通性
telnet videocall.itgcs.tech 3480

相关推荐
va学弟1 天前
Java 网络通信编程(6):视频通话
java·服务器·网络·音视频
chy000011 天前
视频播放器无法连接网络问题排查与解决总结
网络·音视频
做cv的小昊1 天前
【Video Agent】(Arxiv2601,Meta)Agentic Very Long Video Understanding
论文阅读·计算机视觉·语言模型·音视频·openai·论文笔记·视频理解
纤纡.1 天前
OpenCV 实战:从视频处理到图像轮廓检测的全维度解析
人工智能·opencv·音视频
非凡ghost1 天前
1by1(轻量级音乐播放器)
windows·学习·音视频·软件需求·teamviewer
Eanve1 天前
python搭建webrtc音视频服务端客户端
python·音视频·webrtc
铁蛋AI编程实战2 天前
最新版 Kimi K2.5 进阶实战全攻略:从开源部署到 Agent 集群搭建(视频理解 + 多模态开发 + 高并发调优)
人工智能·python·开源·音视频
我说的工具是好用的2 天前
抖音视频下载方法汇总:5款工具实测体验
学习·测试工具·音视频
yingjuxia.com2 天前
B站(哔哩哔哩)视频免费下载方式
音视频