哪有深圳网站页面设计,游戏推广渠道有哪些,网站设计技术文章,大连金州旅游景点有哪些RTPProxy 2.2 用户手册 马克西姆索博列夫#xff08;Maksym Sobolyev#xff09; 目录 简介 什么是 RTPProxy发展背景功能特性工作原理软件包内容 RTPProxy 的安装 预编译版本安装源码编译安装 快速入门配置 命令行参数配置文件启动脚本日志配置控制套接字配置#xff08;使…RTPProxy 2.2 用户手册马克西姆·索博列夫Maksym Sobolyev目录简介什么是 RTPProxy发展背景功能特性工作原理软件包内容RTPProxy 的安装预编译版本安装源码编译安装快速入门配置命令行参数配置文件启动脚本日志配置控制套接字配置使用 systemd第 1 章 简介什么是 RTPProxyRTPProxy 是一款高性能的 RTP 流软件代理可与 Sippy B2BUA、Kamailio、OpenSIPs 及 SERSIP 快速路由器协同工作。注当前最新稳定版本为 RTPProxy 2.2。发展背景RTPProxy 最初由马克西姆·索博列夫Maxim Sobolyev于 2003 年开发旨在解决位于 NAT网络地址转换或防火墙后的 SIP 用户代理User Agents之间的 VoIP 通话连通问题。当时许多场景下 NAT 后的用户无法直接进行端到端通信RTPProxy 与 SIP 代理配合通过充当 RTP 流的中间节点来克服这些障碍。此后RTPProxy 被 VoIP 服务提供商广泛采用用于优化网络流量。随着发展其应用场景不断拓展可与信令元素SIP 代理或 SIP B2BUA配合构建复杂 VoIP 网络、优化流量、收集语音质量信息等。目前RTPProxy 由 Sippy Software, Inc. 积极开发和维护源码托管于 Sippy Labs 的 GitHub 仓库https://github.com/sippy/rtpproxy。多年来众多个人和组织包括 Vonage、SipPulse、Voicenter、RateTel 等通过直接贡献代码或赞助开发的方式为该项目添加功能和修复漏洞。功能特性核心功能处理 NAT 场景下的通信同时可作为通用媒体中继、IPv4 与 IPv6 网络间的 RTP 会话网关。附加功能支持通话录制、预录通知播放、实时流复制、RTP 负载重构。高级特性提供远程控制模式支持构建可扩展的分布式 SIP VoIP 网络通过 RTP Cluster 中间件实现高容量集群与负载均衡支持 MOH音乐保持/预录提示注入、视频中继以及将 RTP 会话录制到本地文件或远程 UDP 监听器。兼容性SER现衍生为 OpenSIPS 和 Kamailio的 nathelper 模块及 Sippy B2BUA 支持多台远程机器上运行的 RTPProxy 实例实现容错和负载均衡。工作原理SIP 代理收到 INVITE 请求后提取其中的 call-id 并通过 Unix 域套接字传递给 RTPProxyRTPProxy 检查是否存在相同 call-id 的会话存在则返回对应 UDP 端口不存在则创建新会话并绑定到启动时指定端口范围内的首个空闲端口再将端口号返回给 SIP 代理SIP 代理Sippy B2BUA/OpenSIPS/Kamailio收到回复后修改 SDP 体中的媒体 IP:端口指向 RTPProxy随后正常转发请求当收到带 SDP 体的非否定 SIP 回复时SIP 代理再次提取 call-id 传递给 RTPProxyRTPProxy 仅查询现有会话并返回端口号或“无此会话”错误码SIP 代理修改 SDP 体中的媒体地址后转发回复会话创建后RTPProxy 监听已分配端口等待双方各发送至少一个 UDP 数据包并用数据包的源 IP:端口填充会话关联的两个地址结构两个地址结构均填充完成后RTPProxy 开始在通话双方之间中继 UDP 数据包。重要提示RTPProxy 会跟踪每个会话的空闲时间无数据包中继的时长当空闲时间超过命令行指定值默认 60 秒时将自动清理该会话。软件包内容默认情况下RTPProxy 软件包包含以下组件rtpproxy主 RTP 代理服务器二进制文件生产环境版本rtpproxy_debug主 RTP 代理服务器二进制文件调试和性能分析版本makeann预编码提示音和通知的工具生产环境版本makeann_debug预编码提示音和通知的工具调试和性能分析版本extractaudio将录制的会话转换为纯音频文件的工具生产环境版本extractaudio_debug将录制的会话转换为纯音频文件的工具调试和性能分析版本第 2 章 RTPProxy 的安装预编译版本安装若使用预编译的 RTPProxy 软件包可通过系统包管理器安装Debian 系系统含 Ubuntu.deb 包用 dpkg 安装仓库源安装用 apt-get / aptitudeCentOS.rpm 包用 rpm 安装FreeBSD仓库源或软件包安装用 pkg。源码编译安装安装依赖项RTPProxy 有多个可选依赖项在配置阶段会自动检测并启用相应功能各依赖项及影响如下bcg729为多个工具启用 G.729 支持影响二进制文件extractaudio、makeann源码地址https://linphone.org/releases/sources/bcg729/libsndfile支持将解码音频保存为多种流行格式而非仅 RAW 16 位线性签名格式影响extractaudio源码地址http://www.mega-nerd.com/libsndfile/files/libg722为多个工具启用 G.722 支持影响extractaudio、makeann源码地址https://github.com/sippy/libg722libsrtp支持解码 SRTP 流录制文件影响extractaudio源码地址https://github.com/cisco/libsrtp.gitlibsystemd-dev支持更紧密的 systemd 集成[1]影响rtpproxy源码地址libsystemdgithublibelperiodic自动化测试框架所需内部工具的依赖需安装共享库和 Python 模块否则 make check 失败源码地址https://github.com/sobomax/libelperiodic.gittcpdump测试框架捕获流量和验证 PCAP 解码功能否则 make check 失败源码地址http://www.tcpdump.org/release/sudo测试框架以高权限运行 tcpdump否则 make check 失败源码地址http://www.sudo.ws/。重要提示编译需满足编译器要求——GCC 5.0 及以上版本或 Clang 6.0 及以上版本。[1] 需添加 --enable-systemd 配置参数启用详见“启用 systemd 支持”章节。源码编译步骤拉取最新稳定版源码通常存储在 /usr/src/ 目录cd/usr/srcgitclone -b master https://github.com/sippy/rtpproxy.git拉取 git 子模块git-C rtpproxy submodule update --init --recursive编译二进制文件普通用户编译流程cdrtpproxy ./configuremakeclean allmakeinstall开发者含测试步骤编译流程需先安装 libelperiodic、sudo 和 tcpdumpcdrtpproxy ./configuremakeclean allmakecheckmakeinstall验证安装编译成功后二进制文件存储在 /usr/local/bin/ 目录可通过以下命令检查版本/usr/local/bin/rtpproxy -V同时生成调试和性能分析版本二进制文件/usr/local/bin/rtpproxy_debug。第 3 章 快速入门推荐使用服务管理器如 systemd启动和管理 RTPProxysystemd 是目前大多数类 UNIX 系统中主流的服务管理器Ubuntu 15.04 及以上默认使用Debian 8Jessie及以上默认使用Red Hat 系发行版Red Hat 7、CentOS 7、Fedora 15 及以上默认使用其他支持的发行版OpenSUSE、Mint、Mageia 等。若系统不支持 systemd可使用其他服务管理器如 Debian 8 以下版本的 init.d 启动脚本脚本链接待补充。systemd 的优势支持在独立环境文件中定义选项并在启动行 ExecStart 中作为变量使用可通过 OnFailure 参数响应应用故障如发送通知支持 ExecStartPre 定义启动前操作如创建 /var/run/rtproxy 目录并设置用户/组权限支持 ExecStopPost 定义停止后操作如删除 /var/run/rtpproxy 目录可设置异常停止非手动停止时的策略如 Restartalways 始终重启支持通过 RestartSec5 设置重启延迟时间灵活配置日志如 SyslogIdentifier 设置日志标识StandardOutput/StandardError 设置日志级别可指定运行应用的用户/组其他丰富功能。systemd 配置步骤下载 systemd 服务文件实例链接待补充并调整 OPTIONS 参数监听 IP 地址-l 0.0.0.0默认监听所有地址可自定义文件描述符上限-L 4096建议根据并发会话数合理设置每个已建立会话需 4 个文件描述符两个 RTP 端点 两个 RTCP 端点UDP 端口范围-m 最小端口 -M 最大端口示例-m 10000 -M 40000日志级别-d INFO:LOG_LOCAL_NUMBER示例-d INFO:LOG_LOCAL5 或 -d DBUG:LOG_LOCAL5。将服务文件复制到 /lib/systemd/system/ 目录重新加载 systemd 配置sudosystemctl daemon-reload启用服务sudosystemctlenablertpproxy.servicesystemd 服务管理命令启动服务sudosystemctl start rtpproxy.service停止服务sudosystemctl stop rtpproxy.service重启服务sudosystemctl restart rtpproxy.service查看服务状态sudosystemctl status rtpproxy.service查看服务配置sudosystemctl show rtpproxy.service查看日志输出sudojournalctl -xe -u rtpproxy.service若需配置独立日志文件详见“配置”章节的“日志配置”部分重要提示SIP 代理服务器与 RTPProxy 的交互通过以下套接字实现rtpproxy.sockRTPProxy 创建的控制套接字rtpproxy_timeout.sockSIP 代理创建的超时通知套接字。第 4 章 配置概述历史上RTPProxy 主要通过命令行参数配置从 2.2 版本开始部分高级参数尤其是可加载模块配置已迁移至配置文件。命令行参数语法格式rtpproxy[-?][-2][-f][-v][-V][-R][-l addr1[/addr2]][-6 addr1[/addr2]][-s ctrl_socket][-t tos][-p pidfile][-T max_ttl][-r rdir[-S sdir]][-L nofile_limit][-A advaddr1[/advaddr2]][-m min_port][-M max_port][-u uname[:gname]][-w sock_mode][-F][-i][-n timeout_socket][-P][-a][-d log_level[:log_facility]][-W setup_ttl][--force_asymmetric]参数说明-?显示参数摘要-2在使用低码率编解码器的会话中将每个小于 128 字节的 RTP 数据包发送两次可改善丢包链路的音频质量-f前台运行模式-V显示程序版本-v显示支持的 rtpp 命令协议版本-l addr1[/addr2]IPv4 监听 IP 地址可指定 1 个或 2 个两个地址时工作在桥接模式-6 addr1[/addr2]IPv6 监听 IP 地址可指定 1 个或 2 个两个地址时工作在桥接模式-s ctrl_socket配置控制套接字用于呼叫控制器创建/修改/删除 RTP 会话、获取统计信息格式为 类型:套接字支持类型udpUDP 控制套接字示例-s udp:127.0.0.1:9000IP 为 * 时监听所有接口缺省端口 22222udp6IPv6 UDP 控制套接字示例-s udp6:::1:9000tcpIPv4 TCP 控制套接字示例-s tcp:192.168.0.1:9001tcp6IPv6 TCP 控制套接字示例-s tcp6:::1:9002unixUnix 域套接字数据报模式同一主机运行处理完命令后关闭连接示例-s unix:/var/run/rtpproxy.sockcunixUnix 域套接字保持连接同一主机运行支持多命令示例-s cunix:/var/run/rtpproxy.sock缺省值unix:/var/run/rtpproxy.sock-t tos设置出站 IP 头的 ToS服务类型缺省值 0xB8设为 -1 时使用系统默认值-p pidfile指定存储进程 PID 的文件缺省值 /var/run/rtpproxy.pid-T max_ttlRTP 非活动超时时间缺省 60 秒超时后删除会话-r rec_dirRTP 会话录制文件存储目录-S spool_dirRTP 流录制的临时目录会话停止后文件将移动至 -r 指定的 rec_dir-R录制 RTP 时禁止录制 RTCP默认录制 RTCP-L nofile_limit设置进程最大打开文件描述符数缺省由系统决定-A advaddr1[/advaddr2]指定 RTPProxy 的对外宣告地址适用于 NAT 后的场景如 Amazon EC2-m min_portUDP 端口范围下限用于 RTP/RTCP 会话缺省 35000-M max_portUDP 端口范围上限用于 RTP/RTCP 会话缺省 65000-u uname[:gname]运行后切换至指定用户可选组-w sock_mode设置 Unix 控制套接字的访问权限仅当通过 -u 指定不同组时生效-F取消超级用户UID 0运行检查默认本地控制模式下警告、远程控制模式下拒绝运行-i启用独立 RTP 活动超时模式默认需所有端口无数据包才超时启用后单个端口无数据包即超时需谨慎使用-n timeout_socket指定允许的超时通知套接字格式 类型:套接字需其他应用先创建支持多实例多次指定 -n支持类型unixUnix 域套接字同一主机示例-n unix:/var/run/rtpproxy_timeout.socktcpTCP 连接远程主机格式 主机:端口示例-n tcp:10.20.30:12345缺省无未指定时不发送通知-P使用 libpcap 格式录制会话而非自定义格式兼容 tcpdump/Wireshark 等工具IPv4 数据包额外增加 12 字节开销-a无条件录制所有会话默认需 SIP 控制器按会话启用录制-d log_level[:log_facility]配置日志详细级别和系统日志设备log_level 优先级从高到低DBUG、INFO、WARN、ERR、CRIT缺省前台模式 DBUG、后台模式 WARN日志设备 LOG_DAEMON示例-d WARN:LOG_LOCAL5--force_asymmetric强制所有 RTP/RTCP 会话为“非对称”模式即无条件禁用 NAT 穿透功能。配置文件待补充。启动脚本RTPProxy 集成到系统启动序列的方式因操作系统版本而异预编译包通常已包含启动脚本建议直接使用自定义配置包维护者或系统构建者以下为 systemd 系统的启动脚本示例。systemd 启动脚本示例[Unit] DescriptionRTPProxy media server Afternetwork.target Requiresnetwork.target [Service] Typesimple PIDFile/var/run/rtpproxy/rtpproxy.pid EnvironmentOPTIONS -f -L 4096 -l 0.0.0.0 -m 10000 -M 20000 -d INFO:LOG_LOCAL5 Restartalways RestartSec5 ExecStartPre-/bin/mkdir /var/run/rtpproxy ExecStartPre-/bin/chown rtpproxy:rtpproxy /var/run/rtpproxy ExecStart/usr/local/bin/rtpproxy -p /var/run/rtpproxy/rtpproxy.pid -s unix:/var/run/rtpproxy/rtpproxy.sock \ -u rtpproxy rtpproxy -n unix:/var/run/rtpproxy/rtpproxy_timeout.sock $OPTIONS ExecStop/usr/bin/pkill -F /var/run/rtpproxy/rtpproxy.pid ExecStopPost-/bin/rm -R /var/run/rtpproxy StandardOutputsyslog StandardErrorsyslog SyslogIdentifierrtpproxy SyslogFacilitylocal5 TimeoutStartSec10 TimeoutStopSec10 [Install] WantedBymulti-user.target日志配置日志配置是 RTPProxy 运行的重要环节需考虑存储容量、问题上报周期、日志详细程度、合规要求如数据保护法、执法要求等因素。配置独立日志文件创建日志文件并设置权限touch/var/log/rtpproxy.logchownrtpproxy:rtpproxy /var/log/rtpproxy.log配置 rsyslog在 /etc/rsyslog.d/50-default.conf 末尾添加并重启 rsyslogecholocal5.* /var/log/rtpproxy.log/etc/rsyslog.d/50-default.conf systemctl restart rsyslog.service配置日志轮转创建 /etc/logrotate.d/rtpproxy/var/log/rtpproxy.log { missingok compress delaycompress notifempty copytruncate rotate 5 daily }在 RTPProxy 启动参数中添加日志级别示例-d INFO:LOG_LOCAL5重新加载 systemd 配置并重启 RTPProxysystemctl daemon-reload systemctl restart rtpproxy.service控制套接字配置使用 systemd通过 systemd 管理控制套接字可避免 RTPProxy 下线时 SIP 代理如 OpenSIPS/Kamailio丢失连接systemd 会缓存控制命令待 RTPProxy 重启后重新发送。配置步骤安装依赖包libsystemd-dev编译 RTPProxy 时启用 systemd 支持./configure --enable-systemd创建 systemd 套接字单元文件建议路径/lib/systemd/system/sockets.target.wants/rtpproxy.socket需创建符号链接[Socket] ListenStream/var/run/rtpproxy/rtpproxy.sock SocketUserrtpproxy SocketGrouprtpproxy SocketMode755 ExecStartPost-/bin/chown rtpproxy:rtpproxy /var/run/rtpproxy [Install] WantedBysockets.target在 rtpproxy.service 启动参数中设置套接字类型无需指定套接字路径ExecStart/usr/local/bin/rtpproxy -p /var/run/rtpproxy/rtpproxy.pid -s systemd: -u rtpproxy:rtpproxy -n unix:/var/run/rtpproxy/rtpproxy_timeout.sock -f -l0.0.0.0 -m10000-M20000-d INFO:LOG_DAEMON重新加载 systemd 配置并启用套接字单元sudosystemctl daemon-reloadsudosystemctlenablertpproxy.socket启动套接字和服务sudosystemctl start rtpproxy.socketsudosystemctl start rtpproxy.service参考文章systemd 套接字单元文件配置详解http://0pointer.de/blog/projects/socket-activation.html?fbclidIwAR2aIYwttyFOc_7rXarlYaz0SexTxMverWF42Xpg5yX96eytkmhFhtsI49M