VOIP:RTP分析和AC490调试记录

本文介绍了VOIP技术中AudioCodes公司的AC490处理器,详细解析了RTP包的头格式,包括RTP头的各个字段和payload格式,特别讨论了G.729和G.711A两种编码格式。同时,分享了在AC490上进行RTP包调试遇到的问题和经验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

最近在研究VOIP,媒体网关底层使用ac490进行语音信号IP(驱动不由我写),碰见一些,总结如下。

.ac490 介绍:

ac490AudioCodes公司的VoIP处理器,可以运行8/12通道LBRC,包括G.723/G.729/iLBC/AMR/GSM FR。支持24通道的G.711算法或12通道的G.711/G.723算法的语音编码;G.168-2002回波消除;T.38传真;支持RTP/RTCP的打包/解包。

.RTP包格式

详细定义请见rfc3550 (RTP格式的描述) rfc3551 (RTP携带的媒体信息格式的描述).

2.1RTP头格式

12个字节在每一个RTP packet中都存在,而一系列的CSRC标记只有存在Mixer时才有。
   version (V): 2 bits
      
标明RTP版本号。协议初始版本为0RFC3550中规定的版本号为2
   padding (P): 1 bit
      
如果该位被设置,则在该packet末尾包含了额外的附加信息,附加信息的最后一个字节表示额外附加信息的长度(包含该字节本身)。该字段之所以存在是因为一些加密机制需要固定长度的数据块,或者为了在一个底层协议数据单元中传输多个RTP packets
   extension (X): 1 bit
      
如果该位被设置,则在固定的头部后存在一个扩展头部,格式定义在R

继续编译报这些错误,你看看是不是要包含什么头文件: packages/apps/zorro/neteq/test1.cpp:77:17: error: use of undeclared identifier 'LS_WARNING' RTC_LOG(LS_WARNING) << "Failed to insert packet: " << error; ^ packages/apps/zorro/neteq/test1.cpp:90:17: error: use of undeclared identifier 'LS_ERROR' RTC_LOG(LS_ERROR) << "Failed to get audio: " << error; ^ packages/apps/zorro/neteq/test1.cpp:101:12: error: call to deleted constructor of 'webrtc::AudioFrame' return audio_frame; ^~~~~~~~~~~ packages/apps/zorro/neteq/include/api/audio/audio_frame.h:60:3: note: 'AudioFrame' has been explicitly marked deleted here AudioFrame(const AudioFrame&) = delete; ^ packages/apps/zorro/neteq/test1.cpp:116:5: error: unknown type name 'RtpReceiver' RtpReceiver rtp_receiver(1234); // <BC><E0><CC><FD> 1234 <B6>˿<DA> ^ packages/apps/zorro/neteq/test1.cpp:132:13: error: use of undeclared identifier 'PlayAudio' PlayAudio(audio.data(), ^ packages/apps/zorro/neteq/test1.cpp:139:9: error: use of undeclared identifier 'SleepMs' SleepMs(10); ^ packages/apps/zorro/neteq/test1.cpp:177:26: error: no member named 'Socket' in namespace 'rtc' std::unique_ptr<rtc::Socket> socket_; ~~~~~^ packages/apps/zorro/neteq/test1.cpp:148:24: error: no member named 'Socket' in namespace 'rtc' socket_ = rtc::Socket::Create(rtc::SocketAddress(), rtc::Socket::Type::SOCK_DGRAM); ~~~~~^ packages/apps/zorro/neteq/test1.cpp:148:66: error: no member named 'Socket' in namespace 'rtc' socket_ = rtc::Socket::Create(rtc::SocketAddress(), rtc::Socket::Type::SOCK_DGRAM); ~~~~~^ packages/apps/zorro/neteq/test1.cpp:148:44: error: no member named 'SocketAddress' in namespace 'rtc' socket_ = rtc::Socket::Create(rtc::SocketAddress(), rtc::Socket::Type::SOCK_DGRAM); ~~~~~^ packages/apps/zorro/neteq/test1.cpp:151:27: error: expected ';' after expression rtc::SocketAddress local_address("0.0.0.0", port_); ^ ; packages/apps/zorro/neteq/test1.cpp:151:14: error: no member named 'SocketAddress' in namespace 'rtc' rtc::SocketAddress local_address("0.0.0.0", port_); ~~~~~^ packages/apps/zorro/neteq/test1.cpp:151:28: error: use of undeclared identifier 'local_address' rtc::SocketAddress local_address("0.0.0.0", port_); ^ packages/apps/zorro/neteq/test1.cpp:152:36: error: use of undeclared identifier 'local_address' int result = socket_->Bind(local_address); ^ packages/apps/zorro/neteq/test1.cpp:158:14: error: no type named 'SocketAddress' in namespace 'rtc' rtc::SocketAddress remote_address; ~~~~~^ packages/apps/zorro/neteq/test1.cpp:177:34: warning: private field 'socket_' is not used [-Wunused-private-field] std::unique_ptr<rtc::Socket> socket_; ^ 15 warnings and 15 errors generated.
最新发布
08-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值