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

复制代码
欢迎多多交流: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

相关推荐
linux_cfan2 小时前
打造智慧校园视听新基建:高校与在线教育平台 Web 视频播放器选型指南 (2026版)
前端·学习·音视频·教育电商
YZ0991 天前
Sora2 AI视频去水印接口
人工智能·音视频·api·ai编程
硅谷秋水1 天前
mimic-video:机器人控制的可泛化视频-动作模型,超越VLA模型
人工智能·机器学习·计算机视觉·机器人·音视频
源代码•宸1 天前
简版抖音项目——项目需求、项目整体设计、Gin 框架使用、视频模块方案设计、用户与鉴权模块方案设计、JWT
经验分享·后端·golang·音视频·gin·jwt·gorm
REDcker1 天前
RTP、RTCP 与 SRTP 协议详解
网络·音视频·webrtc·实时音视频·rtp·rtcp
雪碧聊技术1 天前
什么是Seedance 2.0?字节自研多模态AI视频生成引擎全解析
人工智能·音视频·seedance2.0
咚咚王者1 天前
人工智能之视觉领域 计算机视觉 第十三章 视频背景减除
人工智能·计算机视觉·音视频
奔跑吧 android2 天前
【车载Audio】【AudioHal 08】【高通音频架构】【SA8295P 音频资源管理器 (ResourceManager) 决策逻辑深度解析 】
音视频·sa8295p·audiohal·高通音频架构·音频资源管理器
linux_cfan2 天前
拒绝“黑屏”与“哑剧”:Web视频播放器UX体验与自动播放选型指南 (2026版)
前端·javascript·音视频·html5·ux