您的位置:首页 > 理论基础 > 计算机网络

基于TCP连接的RTSP协议分析

2013-10-15 18:56 501 查看

RTSP 概述

RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,控制实时数据的传送。RTSP提供了一个可扩展框架,使实时数据,如音频与视频的受控、点播成为可能。数据源包括现场数据与存储在剪辑中数据。该协议目的在于控制多个数据发送连接,为选择发送通道,如UDP、组播UDP与TCP,提供途径,并为选择基于RTP
(RFC1889)上传送机制提供方法。RTSP和HTTP类似,属于应用层协议,通过socket rtsp命令来进行通讯。RTSP协议的默认端口是554。

常用控制命令执行顺序常用的是5个命令:

1,OPTIONS,//询问server,那些命令可用

2,DESCRIBE,//请求rtsp路径的媒体描述信息

3,SETUP,//设置会话的属性,以及传输模式,建立会话

GET_PARAMETER,//取得流控制参数,可能某些服务器不支持

SET_PARAMETER,//设置流控制参数,可能某些服务器不支持

4,PLAY,//开始播放流媒体数据

5,TEARDOWN //关闭对话

实例分析RTSP、RTP协议

(一)
RTSP建立过程

1.
三次握手建立RTSP连接

2.
C->S ,Client发送DESCRIBE命令,请求资源的描述。

服务器端回应:



3.
C->S,Client发送SETUP命令,建立RTP和RTCP连接。



服务端回应:



4.
C->S,Client发送PLAY命令,开始数据的发送。



服务器回应:



(二)
RTP数据连接分析

由于此实例是基于TCP连接发送数据的,因此当服务器(192.168.1.82)回应Client的请求后,就在此连接上发送媒体数据。



1.
IP包头:

450005dc 9693 4000 4006 1ada
c0a8 0152

c0a8 010c

如上图绿线标记,其中长度为20字节,上图红色框标记IP头长指示,单位为4字节。IP包长为0x05de=1500字节。源IP为:c0a8
0152 目的IP为c0a8 010c

2.
TCP包头:

022af13a ee36 8e7f 106c 3f17

8010 00d7 897d 0000 0101 080a 0267 1c66

3d60 25c0

如上图黄线标记,其中源端口为0x022a=554,目的端口0xf13a=61754。其中头长度为32字节,上图红色框标记IP头长指示,单位为4字节。

3.
RTP同步标记:

24000530

其中0x24=36为$的ASCII码,为RTP同步定位标记。0x00为streamChannelId。0x0530=1328,为RTP报文的长度。

int RTP_ReadHandler(int socketNum,struct ResultData* data)

{

unsigned char c;

unsigned char streamChannelId;

unsigned short size;

unsigned fNextTCPReadSize;

int result = 0;

do

{

do

{

result = recv(socketNum, &c, 1, 0);

if (result <=0)

{

fprintf(stderr,"error reading TCP socket\n");

return 0;

}

} while (c != '$');

if (recv(socketNum, &streamChannelId, 1, 0)!= 1) break;

if (recv(socketNum, (unsigned char*)&size, 2,0) != 2) break;

fNextTCPReadSize = ntohs(size);

return networkReadHandler(socketNum,&fNextTCPReadSize,data);

} while (0);

return -1;

}


4.
RTP包头:

8021 41ba 6f77 9bc8

5d52 cb82

如上图紫色标记,RTP包头12字节

0x802141ba =
1000 00000010 0001 0100 0001 1011 1010

版本号(V)2bit: 00000001
= 2

填充位(P)1bit: 0

扩展位(X)1bit: 0

CSRC计数器(CC)4bit:
0

标记位(M)1bit: 0

载荷类型(PT)7bit:
00100001 = 33 对应为MP2T Video/Audio

序列号(SN)4Bity: 0x41ba

时间戳: 0x6f779bc8

同步源标识符(SSRC)4bit:0x5d52cb82

5.
媒体数据:

4740 1110 0000 01e0 0000 84c0

133d 49df c05d 1d49 df79 fbff ffff ffff

ffff ffff 0000 01b3 7804 3834 2a3c af42

1020 2044 2044 6868 6868 6868 9880 98a4

a4a4 9898 9898 a4a4 a4bc bcbc f8f8 f8bc

bcbc a4a4 bcbc e0e0 f8f9 1d29 1d05 04f9

0529 2941 4141 a1a1 8989 ffff ffff ffff

1016 161c 1c1c 2222 2222 2828 2828 282e

2e2e 2e2e 2e34 3434 3434 3434 3a3a 3a3a

3a3a 3a3a 4040 4046 4040 4046 4c4c 4c4c

4652 5252 5252 5858 5858 6464 646a 6a76

0000 01b5 1442 0001 0000 0000 01b5 201e

4700 1111 0221 c000 0000 01b8 9eea 8580

0000 0100 008c 0c08 0000 0001 b58f fff7

9800 0000 01b5 7000 0800 0400 0200 0100

0000 01b2 4741 3934 0354 fffd 8080 fc80

80fa 0000 fa00 00fa 0000 fa00 00fa 0000

fa00 00fa 0000 fa00 00fa 0000 fa00 00fa

………………

每个TS包由188字节组成,包头第一个字节固定为0x47。媒体数据是188为单位组成的连续流。

IP报文由如下组成:

IP报文 = IP包头 + TCP包头 + Payload;

Payload= RTP同步标记+ RTP包头+ 7*188 + RTP同步标记+…..+7*188+…

由此看见,RTP传送T流S数据时数据结构如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: