news 2026/4/18 7:42:48

RTPProxy 命令协议

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RTPProxy 命令协议

这是一个基于GitHub RTPProxy Wiki文档(RTPProxy Command Protocol)的中文翻译和详解。

由于 Wiki 页面可能会更新,以下内容涵盖了该文档中定义的核心协议标准。RTPProxy 主要是配合 OpenSIPS、Kamailio 或 Sippy B2BUA 使用的媒体代理服务器。


RTPProxy 命令协议 (RTPProxy Command Protocol)

RTPProxy 控制协议使用文本格式(ASCII)。虽然它主要是为通过 UDP 数据报发送而设计的,但也支持 Unix 域套接字(Unix domain sockets)和 TCP 套接字。

1. 一般消息格式

请求格式 (Request)

请求的语法通常如下:

[Cookie] <Command> [Command_Args] <Call-ID> [Command_Args]
  • Cookie: (可选) 一个任意的字符串,用于标识事务。如果请求中包含 Cookie,RTPProxy 会在响应中原样返回它。这有助于发送方将请求与响应进行匹配(类似于异步编程中的 Correlation ID)。
  • Command: 单个字符,表示要执行的操作(例如U,L,D,P,R,S,V,I等)。
  • Call-ID: SIP 消息中的 Call-ID,用于唯一标识一个会话。
  • Command_Args: 命令特定的参数。

响应格式 (Response)

响应的语法通常如下:

[Cookie] <Result> [Result_Args]
  • Cookie: 如果请求中有,这里也会有。
  • Result: 通常是端口号,或者是0(表示错误/忽略)。
  • Result_Args: 附加信息(例如 IP 地址)。

2. 核心命令详解

以下是协议中最常用的命令:

U命令 (Update / 更新)

这是最常用的命令,用于在 RTPProxy 中创建更新一个会话。通常在处理 SIP 的INVITE200 OK时调用。

语法:

U[Flags] [Callback_Socket] [Callback_Tag] <Call-ID> <Remote_IP> <Remote_Port> <From_Tag> [To_Tag]

参数:

  • Flags: 控制 RTPProxy 行为的选项(见下文“常用标志”)。
  • Callback_Socket/Tag: (可选) 用于通知超时或其他事件的回调地址。
  • Call-ID: SIP Call-ID。
  • Remote_IP: 对端(用户代理 UA)的 IP 地址(从 SDP 中获取)。
  • Remote_Port: 对端(UA)的 RTP 端口(从 SDP 中获取)。
  • From_Tag: 调用者的 Tag(用于区分 Caller 和 Callee)。
  • To_Tag: (可选) 被叫者的 Tag。

响应:
返回 RTPProxy 分配的端口号。如果请求中指定了外部 IP(非桥接模式),它可能只返回端口;如果涉及双网卡桥接,可能会返回端口 IP

U命令常用标志 (Flags):
  • a: 即使会话已存在,也记录地址信息(用于更新媒体地址)。
  • e: 外部接口(External)。指示 RTPProxy 在“外部”网络接口上分配端口。
  • i: 内部接口(Internal)。指示 RTPProxy 在“内部”网络接口上分配端口。
    • 注:ei常配合使用以实现双网卡 NAT 穿越/桥接。
  • 6: 使用 IPv6。
  • c: 更改呼叫 ID(较少用)。
  • l: 强制使用特定地址(Lookup)。
  • z: 比较 SSRC(用于检测流变化)。
  • R:Trust address (Latch)。不信任 SDP 中的 IP,而是等待并锁定第一个接收到的 RTP 数据包的源 IP/端口作为目标地址。这对于处理 NAT 后面的客户端至关重要。

L命令 (Lookup / 查找)

用于查找现有会话。通常用于检查会话是否处于活动状态,或者在不更新参数的情况下获取端口。

语法:

L [Call-ID] [Remote_IP] [Remote_Port] [From_Tag] [To_Tag]

响应:
返回现有的端口号;如果会话不存在,返回0


D命令 (Delete / 删除)

用于销毁/关闭会话。通常在处理 SIPBYECANCEL时调用。

语法:

D <Call-ID> <From_Tag> [To_Tag]

响应:
如果不带 Cookie,通常无响应或返回简单的确认。带 Cookie 时返回统计信息。


P命令 (Play / 播放)

用于将预先录制的音频文件注入到 RTP 流中(例如播放“等待音乐”或提示音)。

语法:

P[Flags] <Call-ID> <Rec_File> <Codec> <From_Tag> [To_Tag]

参数:

  • Rec_File: 服务器上的文件名。
  • Codec: 编解码器(如 g711a, g711u, g729 等)。

R命令 (Record / 录音)

用于开始或停止会话录音。RTPProxy 会将媒体流转储到文件中(通常是 pcap 格式)。

语法:

R[Flags] <Call-ID> <From_Tag> [To_Tag]

标志 (Flags):

  • P: 暂停录音。
  • S: 开始/恢复录音。

C命令 (Copy / 复制)

用于流复制(Forking)。通常用于合法监听(LI)或监控,将 RTP 流复制一份发往指定的 IP:Port。

语法:

C <Call-ID> <Dst_IP> <Dst_Port> <From_Tag> [To_Tag]

S命令 (Query / 统计)

检索 RTPProxy 的运行统计信息。

语法:

S

响应示例:

blocks=1000/2000 sent=50000 recv=50000 ...

返回关于数据包收发数量、会话持续时间等统计信息。


V命令 (Version / 版本)

查询支持的协议版本。

语法:

V

响应:
例如20040107(表示协议版本号)。


I命令 (Info / 信息)

返回简要的服务器信息,通常用于健康检查。


X命令 (Delete All / 删除所有)

危险命令。删除当前 RTPProxy 管理的所有活动会话。通常只在关机或重启脚本中使用。


Q命令 (Query Session / 查询会话)

用于获取特定会话的详细统计信息(如 TTL、统计计数器)。

语法:

Q <Call-ID> <From_Tag> [To_Tag]

3. 实际交互示例

假设:

  • SIP Call-ID:50140df0-1
  • Caller Tag:tag-1
  • Cookie:1234
  • Client SDP IP:192.168.1.50, Port:10000

示例 1: 建立会话 (Update)

OpenSIPS/Kamailio 发送请求:

1234 U 50140df0-1 192.168.1.50 10000 tag-1

解释: 带有 cookie “1234”,更新会话,Call-ID 为 “50140df0-1”,客户端媒体地址 192.168.1.50:10000,来自 tag-1。

RTPProxy 响应:

1234 35002 1.2.3.4

解释: 带有 cookie “1234”,分配的 RTPProxy 端口为 35002,RTPProxy 的 IP 为 1.2.3.4。

示例 2: 删除会话 (Delete)

请求:

1235 D 50140df0-1 tag-1

响应:

1235

(或者可能包含该会话的最终统计数据)

4. 总结

RTPProxy 协议是一个简单的请求-响应协议。它的核心在于U命令,通过不同的标志位(Flags)来处理复杂的网络环境(如 IPv4/IPv6 转换、NAT 穿越、内外网桥接)。对于使用 Kamailio/OpenSIPS 的rtpproxy模块的用户来说,这些命令通常被封装在模块函数(如rtpproxy_manage(),force_rtp_proxy())中自动处理,但在调试抓包时,理解上述原始协议非常有帮助。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 12:13:25

RMBG-2.0在影视制作中的应用:绿幕后期处理

RMBG-2.0在影视制作中的应用&#xff1a;绿幕后期处理 1. 影视后期的新选择&#xff1a;为什么绿幕不再非得靠传统方式 拍完一场戏&#xff0c;演员站在绿布前演得投入&#xff0c;灯光打得精准&#xff0c;摄影机稳稳记录——可到了后期&#xff0c;问题才真正开始。抠像不干…

作者头像 李华
网站建设 2026/4/18 5:24:35

智能会议系统开发:结合语音识别与TranslateGemma的实时字幕翻译

智能会议系统开发&#xff1a;结合语音识别与TranslateGemma的实时字幕翻译 1. 一场会议的实时翻译体验有多真实&#xff1f; 上周参加一个跨国技术研讨会时&#xff0c;我坐在会议室角落&#xff0c;看着投影屏上滚动的中英双语字幕&#xff0c;心里有点惊讶——这已经不是过…

作者头像 李华
网站建设 2026/4/17 20:09:07

小白必看!ERNIE-4.5-0.3B快速入门教程:从部署到调用

小白必看&#xff01;ERNIE-4.5-0.3B快速入门教程&#xff1a;从部署到调用 你是不是也遇到过这些情况&#xff1f;想试试大模型&#xff0c;但被复杂的环境配置劝退&#xff1b;听说ERNIE系列很强大&#xff0c;却卡在第一步——连模型都跑不起来&#xff1b;看到别人用AI写文…

作者头像 李华
网站建设 2026/4/18 5:43:32

零基础玩转AI头像生成器:手把手教你设计古风角色形象

零基础玩转AI头像生成器&#xff1a;手把手教你设计古风角色形象 1. 为什么古风头像正在成为新潮流&#xff1f; 你有没有刷到过这样的朋友圈头像&#xff1a;青衫磊落、墨发如瀑&#xff0c;背景是烟雨江南的粉墙黛瓦&#xff1b;或是红衣飒爽、执剑而立&#xff0c;身后一轮…

作者头像 李华
网站建设 2026/4/10 7:17:23

Fish Speech 1.5实战:手把手教你制作个性化语音助手

Fish Speech 1.5实战&#xff1a;手把手教你制作个性化语音助手 你有没有想过&#xff0c;只用一段文字、几秒钟录音&#xff0c;就能让AI模仿你的声音说话&#xff1f;不是机械复读&#xff0c;而是有语气、有停顿、有呼吸感的真实语音——现在&#xff0c;这已经不是科幻电影…

作者头像 李华