本文共 2360 字,大约阅读时间需要 7 分钟。
前言:作为一个计算机专业的老人,一直在逛CSDN、pudn等各种相关的论坛,却很少发表东西,决定从今天开始记录一下自己的日常工作,以便温故而知新并欢迎大家指正与大家共勉。
概念1:每个TCP socket在内核中都有发送缓冲区和接收缓冲区,接收缓冲区把数据写入内核,应用程序没有读取的话,此数据会一直缓存在相应的socket接收缓存里面。
概念2:滑动窗口:概括为TCP发送和接收双方把一整条数据链分为已发送数据、已确认数据、未确认数据、不能接受数据,而沿着数据链边滑动、边确认、边接收的概念。
概念3:对于TCP,如果应用进程一直没有读取,buffer满了之后会通知对端TCP窗口关闭,而UDP会直接丢弃。
根据国标GB28181概念,PS包经RTP打包后,在RTP包头加上两个字节的RTP分包长度即可发送;
所以大致算法思路是:检测PS包头“00 00 01 BA”,提取一个完整的PS包,以TCP_MAX_SIZE==1400字节为限,如果小于TCP_MAX_SIZE,则直接加12个字节RTP包头和2个字节长度信息的发送;如果大于TCP_MAX_SIZE,则FU_A分片发送。
如下为RTP包头结构:
/******************************************************************RTP_FIXED_HEADER0 1 2 30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|V=2|P|X| CC |M| PT | sequence number |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| timestamp |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+| synchronization source (SSRC) identifier |+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+| contributing source (CSRC) identifiers || .... |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+******************************************************************/typedef struct{ /* byte 0 */ unsigned char csrc_len : 4; /* CC expect 0 */ unsigned char extension : 1;/* X expect 1, see RTP_OP below */ unsigned char padding : 1; /* P expect 0 */ unsigned char version : 2; /* V expect 2 */ /* byte 1 */ unsigned char payload : 7; /* PT RTP_PAYLOAD_RTSP */ unsigned char marker : 1; /* M expect 1 */ /* byte 2,3 */ unsigned short seq_no; /*sequence number*/ /* byte 4-7 */ unsigned long timestamp; /* byte 8-11 */ unsigned long ssrc; /* stream number is used here. */} RTP_FIXED_HEADER;/*12 bytes*/
网络字节与主机字节转换的主要函数:
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t netshort);h:host; n:net; l:unsigned long; s:unsigned short;
所谓网络字节顺序(大尾顺序)就是指一个数在内存中存储的时候“高对低,低对高”(即一个数的高位字节存放于低地址单元,低位字节存放在高地址单元中)。但是计算机的内存存储数据时有可能是大尾顺序或者小尾顺序。
转载地址:http://gxwni.baihongyu.com/