一、RTP发送和接收的过程
发送程序流程(服务端)
1.获得接收端的IP地址和端口号
2.创建RTP会话
3.指定RTP数据接收端
4.设置RTP会话、默认参数
5.发送流媒体数据
接收程序流程(客户端)
1.获得用户指定的端口号
2.创建RTP 会话
3.设置接收模式
4.接受RTP 数据
5.检索RTP 数据源
6.获取RTP 数据报
7.删除RTP 数据报
二、过程中代码注释及原理
⑴创建RTP会话及初始化操作
创建会话
MyRTPSession sess;
初始化操作
重点是设置时间戳和本地端口,然后调用 Create() 方法来对其进行初始化操作。时间戳音频通常为1.0/8000.0,视频通常为1.0/90000。(时间戳是32位的整型值,这其实是设置一个时间戳单位,例如音频采样频率是8000hz的话,设置了sessparams.SetOwnTimestampUnit(1.0/50.0);,那么时间戳增量应该为160)
RTPUDPv4TransmissionParams transparams;
RTPSessionParams sessparams;
uint16_t portbase; //本机端口号,为(1025~65535一个未使用的端口号)
transparams.SetPortbase(portbase);
/*设置时间戳,1/8000表示1秒钟采样8000次,即录音时的8KHz*/
sessparams.SetOwnTimestampUnit(1.0/8000.0);//其实这个是时间戳单位不是时间戳,也有sess.SetTimestampUnit(1.0 / 8000.0)这种设置方式)
//设置是不是接收自定义的数据包
sessparams.SetAcceptOwnPackets(true);
status = sess.Create (sessparams,&transparams);
//检查创建是否成功
checkerror(status);
⑵设置接收IP地址
RTP会话成功建立起来后,需要设置好数据发送的目标地址,RTP协议允许同一会话存在多个目标地址,这可以通过调用RTPSession类的AddDestination()、DeleteDestination()和ClearDestinations()方法来完成。