下面给你最精简、最标准、可用于考试/开发/调试 的:
两台 H.323 终端点对点直连通信完整步骤
无网守(Gatekeeper)、纯终端对终端,一步不落。
一、前提条件
- 终端A:主叫(比如 192.168.1.10)
- 终端B:被叫(比如 192.168.1.20)
- 网络互通,TCP 1720 及动态 UDP 端口可通
- 双方都支持 H.225、H.245、RTP/RTCP
二、点对点 H.323 呼叫完整步骤(10 步)
1. 主叫发起呼叫(H.225 Call Signaling)
- 终端A 主动连接 终端B 的 TCP 1720
- 发送 Setup 消息
携带:呼叫ID、呼叫能力、A 的 H.245 地址(IP+端口)
2. 被叫回应呼叫建立
- 终端B 返回:
- Call Proceeding(呼叫处理中)
- Alerting(振铃)
3. 被叫接听
- 终端B 发送 Connect 消息
携带:B 的 H.245 地址(IP+端口) - 至此 H.225 呼叫通道建立完成
4. 建立 H.245 控制通道
- 终端A 根据 Connect 中的信息,连接 终端B 的 H.245 TCP 端口
- 双向 TCP 连接建立,用于后续媒体协商
5. 终端能力交换(最关键)
双方互相发送:
- TerminalCapabilitySet
内容包括: - 支持的视频编码:H.261/H.263/H.264
- 分辨率、帧率、码率
- 音频编码:G.711/G.722/G.729
- 数据能力(T.120 等)
6. 主从节点判定(Master/Slave)
- H.245 必须协商出一个 Master、一个 Slave
- 用于解决端口冲突、控制冲突
- 不影响音视频,只是协议要求
7. 打开逻辑通道(Open Logical Channel)
双方分别为音频、视频各打开通道:
- 终端A 发送:
OpenLogicalChannel- 媒体类型:视频/音频
- 编码格式
- 本地 RTP 端口(UDP)
- 终端B 回复:
OpenLogicalChannelAck
确认接收端口
然后反向再做一次:B→A 也打开音视频通道。
8. 开始传输音视频(RTP 实时流)
- 视频:H.264/H.263 → RTP → UDP
- 音频:G.711 → RTP → UDP
- RTCP(端口=RTP+1)用于丢包、时延统计
此时双方已经能看到画面、听到声音。
9. 通话中实时控制(可选)
- 流量控制
- 视频快速更新请求(Video Fast Update)
- 码率调整
- 静音、关闭视频等
10. 结束通话
任意一方发起:
- Release Complete (H.225)
依次关闭:
- 所有 RTP 媒体通道
- H.245 控制通道
- H.225 呼叫通道
通话结束
三、极简总结(背这个就行)
- H.225(1720 TCP) 拨号、接听
- H.245(TCP) 协商音视频格式
- 打开RTP通道(UDP)
- 直接传RTP音视频流
- H.225 挂断
四、协议与端口速记
- 呼叫信令:H.225.0 / TCP 1720
- 媒体控制:H.245 / 动态TCP
- 视频音频:RTP / 动态UDP
- 媒体监控:RTCP / RTP端口+1
如果你需要,我可以再给你:
- 一张文字版时序图
- 或者 Wireshark 抓包对应哪一步
- 或者 点对点H.323抓包示例