0303 sip rtp sound noise 抓包
0222 sip rtp osip sound noise (2006-6-10)
http://www.yippeesoft.com/blog/p/0222siprtposipsoundnoise.php
0303 sip rtp sound noise 协议
http://www.yippeesoft.com/blog/p/0303siprtpsoundnoiseprotocol.php
看上去时间戳、序号增长不错的样子
No. Time Source Destination Protocol Info
1186 33.094566 www.yippeesoft.com www.yippeesoft.com RTP Payload type=ITU-T G.711 PCMA, SSRC=271620609, Seq=152, Time=7310341
Frame 1186 (282 bytes on wire, 282 bytes captured)
Ethernet II, Src: www.yippeesoft.com (00:d0:f8:00:55:f9), Dst: www.yippeesoft.com (00:d0:c9:98:75:3a)
Internet Protocol, Src: www.yippeesoft.com ( www.yippeesoft.com ), Dst: www.yippeesoft.com ( www.yippeesoft.com )
User Datagram Protocol, Src Port: 5024 (5024), Dst Port: 12580 (12580)
Real-Time Transport Protocol
Stream setup by SDP (frame 11)
10.. …. = Version: RFC 1889 Version (2)
..0. …. = Padding: False
…0 …. = Extension: False
…. 0000 = Contributing source identifiers count: 0
0… …. = Marker: False
Payload type: ITU-T G.711 PCMA (8)
Sequence number: 152
Timestamp: 7310341
Synchronization Source identifier: 271620609
Payload: 18170F222A361E3229366027BC33B3A5A3BCD39DBEA2B59E…
No. Time Source Destination Protocol Info
1194 33.255379 www.yippeesoft.com www.yippeesoft.com RTP Payload type=ITU-T G.711 PCMA, SSRC=271620609, Seq=153, Time=7310501
Frame 1194 (282 bytes on wire, 282 bytes captured)
Ethernet II, Src: www.yippeesoft.com (00:d0:f8:00:55:f9), Dst: www.yippeesoft.com (00:d0:c9:98:75:3a)
Internet Protocol, Src: www.yippeesoft.com ( www.yippeesoft.com ), Dst: www.yippeesoft.com ( www.yippeesoft.com )
User Datagram Protocol, Src Port: 5024 (5024), Dst Port: 12580 (12580)
Real-Time Transport Protocol
Stream setup by SDP (frame 11)
10.. …. = Version: RFC 1889 Version (2)
..0. …. = Padding: False
…0 …. = Extension: False
…. 0000 = Contributing source identifiers count: 0
0… …. = Marker: False
Payload type: ITU-T G.711 PCMA (8)
Sequence number: 153
Timestamp: 7310501
Synchronization Source identifier: 271620609
Payload: CDB1AFA4A6ABB6AEB6CD482F2421262C35263C38231A1A13…
0303 sip rtp sound noise 协议
0222 sip rtp osip sound noise (2006-6-10)
http://www.yippeesoft.com/blog/p/0222siprtposipsoundnoise.php
基于人家的SDK开发,提供了SIP和RTP协议栈,可是都是噪声。
根据协议,RTP应该比较简单 By xxj & faxiao
RTP 协议(Real Time Protocol)提供具有实时特征的、端到端的数据传送服务,可用来传送声音和运动图像数据。在这项数据传送服务中包含了装载数据的标识符、序列计数、时戳和传送监视。通常RTP 的协议元是用UDP 协议元来装载的,并利用UDP 的复用和校验和来实现RTP 的复用。
必须注意的是,RTP 没有提供任何确保按时传送数据的机制,也没有提供任何质量保证的机制,因而要实现服务质量必须由下层网络来提供保证。同样必须
注意的是,RTP 不保证数据包按序号传送,即使在下层网络能使保证可靠传送的条件下,也不保证数据包按序号传送。包含在RTP 中的序号可供接收方用于重构数据包序列,也可用于包的定位。
在RTP 会话中,复用是由目的传送地址(网络地址和端口号)来提供的,一个传送地址定义了一个RTP 会话。例如,在一个会议中,音频码流和视频码
流是分别用不同的RTP 会话(一般是同一个目的网络地址和不同的端口号)来传送,而不是用PT(载荷类别)或SSRC 作区分来实现单个RTP 会话中的复用
传送。
固定报头的RTP 报文结构如图3-1 所示:
RTP 报头中各字段的含义如下:
版本(V):2 个比特,表示RTP 的版本号。
填充(P):1 个比特,置“1”表示用户数据最后加有填充位,用户数据中
最后一个字节是填充位计数,它表示一共加了多少个填充位。在两种情况下可能
需要填充,一是某些加密算法要求数据块大小固定;二是在一个低层协议数据包
中装载多个RTP 分组。
扩展(X):1 个比特,置“1”表示RTP 报头后紧随一个扩展报头。
CSRC 计数(CC):4 个比特,表示在定长的RTP 报头后的CSRC 标识符的
数量。
标记(M):1 个比特,其具体解释由应用文档来定义。例如,对于视频流,
它表示一帧的结束,而对于音频,则表示一次谈话的开始。
载荷类别(PT):7 个比特,它指示在用户数据字段中承载数据的载荷类别。
序号(SN):2 个字节,每发送一个RTP 数据包该序号增加1。该序号在接
收方可用来发现丢失的数据包和对到来的数据包进行排序。
时间戳(TS):4 个字节,它用来表示RTP 包中用户数据段的第一个字节的采样时刻。时间戳的时间表示应为线性单调递增的,以便完成同步实现和抖动的
计算。
同步源标识符(SSRC):4 个字节,用来标识一个同步源。此标识符是随机选择的,但要保证同一RTP 会话中的任意两个SSRC 各不相同,RTP 必须检测
并解决冲突。
提供源标识符(CSRC):它可有0~15 项标识符,每一项长度为32 比特,其项数由CC 字段来确定。如果提供源多于15 个,则只有15 个被标识。
为了能满足各种应用的需要,RTP 报头可进一步扩充,其时X 比特将置“1”,扩充的RTP 报头部分则紧随在SCRC 清单之内。
如果扩展位被置为1,意味着RTP 固定头后紧跟着一个头扩展,其格式如图
3-2 所示。前16 位的内容由轮廓文件决定,主要用来标识不同的头扩展类型。这
种扩展方式主要用来传递独立于具体格式的载荷(payload-format-independent)
的应用信息。
0222 sip rtp osip sound noise
赶鸭子上架,该死的项目变来变去,弄得我开始人格分裂了,不管了,还是基于开源的自己试一试~~~
看示例程序:
else if (je->type==EXOSIP_CALL_ANSWERED)
&leftsign;
printf( "<- (%i %i) [%i %s ANSWERED] %s",
je->cid, je->did,
je->status_code,
je->reason_phrase,
je->remote_uri);
josua_printf(buf);
call.build(je);
&rightsign;
if (ca->remote_sdp_audio_ip[0]==\’\\0\’)
&leftsign;
osip_strncpy(ca->remote_sdp_audio_ip, je->remote_sdp_audio_ip, 49);
ca->remote_sdp_audio_port = je->remote_sdp_audio_port;
ca->payload = je->payload;
osip_strncpy(ca->payload_name, je->payload_name, 49);
&rightsign;
根据我浅薄的理解,SIP协商语音能力之后,然后用RTP进行传输,那么现在就已经看到了 远程IP和远程端口
那么我就简单的用RTP进行传输一个强行转发为PCMU/PCMA的WAVE文件应该可以正常吧,结果全部是噪音。
FILE *source=fopen("c://12pcmu.wav","rb");
if ( source == NULL )
&leftsign;
cout<<"can\’t access the file"<<endl;
&rightsign;
//#ifdef win32
//#endif
size_t bufRead = 0;
bool Mark=true;
#define bufsize 1024
BYTE buffer[bufsize];
int t;
RTPSession sess;
t=sess.Create(5800);
if(t!=0)cout<<"can\’t create"<<endl;
bool sen;
if(t==0)&leftsign;sen=true;&rightsign;
int nPT ;
int nTSTAMP;
sess.SetMulticastTTL(1); //砞﹚multicastTTL
sess.AddDestination(ntohl(inet_addr("111.168.13.190")),portt); //﹚肚癳ヘ狠
//sess.AddDestination(ntohl(inet_addr("192.168.25.79")),6900);
if(t!=0) cout<<"can\’t add destination"<<endl;
for (int jj=0;j<1000;j++)
&leftsign;
(void) fseek( source, 0, SEEK_SET );
while(!feof(source))
&leftsign;
bufRead = fread(buffer, sizeof(BYTE), bufsize, source );
nPT=rand()%64+1;
nTSTAMP=rand()%1000+1;
t=sess.SendPacket(buffer,bufsize,nPT,Mark,nTSTAMP);
if(t!=0)cout<<"can\’t sending"<<endl;
Sleep(10);
Mark=false;
&rightsign;
&rightsign;
(void) fflush( source );
(void) fclose( source );
cout<<("send success")<<endl;
WSACleanup();