这是JRTPLIB@Conference系列的第三编《JRTPLIB的几个重要类说明》,本系列的主要工作是实现一个基于JRTPLIB的,建立在RTP组播基础上的多媒体视频会议系统。这只是一个实验系统,用于学习JRTPLIB、RTP、和多媒体相关的编程,不是一个完善的软件工程。而且,我只会在业余的时间出于兴趣写一写。有志同道合的朋友可以通过tinnal@136.com这个邮箱或博客回复(推荐)和我交流。
上一部《JRTPLIB@Conference DIY视频会议系统 二、基本例程分析 》
这一部的主要内容是要研究一个JRTPLIB常用的几个非常重要的类,在进行JRTPLIB或RTP编程时会经常和这个几类打交道,或都从这些类中继承。
这是续上一编《JRTPLIB@Conference DIY视频会议系统 三、JRTPLIB的几个重要类说明 》的,上一编中,我们研究了JRTPLIB中的一个重要的类RTPSesseion,我们现在来讲一下另外一个类RTPPacket。
二、 RTPPacket
RTPPacket 类用于处理属于RTP类型的RTPRawPacket,这个类可以用根据用户设定的参数创建一个新的RTP数据包。这个类的接口如下:
• RTPPacket(RTPRawPacket &rawpack)
这个构造函数根据rawpack数据包构造RTPPacket对像
• RTPPacket(uint8 t payloadtype, const void *payloaddata, size t payloadlen,
uint16 t seqnr, uint32_t timestamp, uint32_t ssrc, bool gotmarker,
uint8 t numcsrcs, const uint32_t *csrcs, bool gotextension, uint16_t
extensionid, uint16 t extensionlen numwords, const void *extensiondata,
size t maxpacksize = 0)
为RTP新建一个缓冲区,并且根据指定的参数填充数据包。如果maxpacksize 不等于0,则如果数据包大于此值会返回错误。参数请根据RFC3550规定填写,header extension 是以32位计的。
• RTPPacket(uint8 t payloadtype, const void *payloaddata, size t payloadlen,
uint16 t seqnr, uint32 t timestamp, uint32 t ssrc, bool gotmarker,
uint8 t numcsrcs, const uint32 t *csrcs, bool gotextension, uint16 t
extensionid, uint16 t extensionlen numwords, const void *extensiondata,
void *buffer, size t buffersize)
和上一个函数很像,只是它把数据存在buffersize大小的外部Buffer当中。
• int GetCreationError() const
如果任何一个构造函数有错,这个函数会返回错误码。
• bool HasExtension() const
如果有RTP扩展头部,这个函数会返回真。
• bool HasMarker() const
如果RTP头部设置了Make标志,这个函数会返回真。
• int GetCSRCCount() const
返回这个RTP包的CSRC值的数量。
• uint32 t GetCSRC(int num) const
返回这个RTP流的特定作用流标识。num从0 到GetCSRCCount()-1有效
• uint8 t GetPayloadType() const
返回这个RTP流的类型
• uint32 t GetExtendedSequenceNumber() const
返加这个包的扩展序列号(extended sequence number ),如果这个包刚收到,只有低16位才有效,高16位销后才会填充。
• uint16 t GetSequenceNumber() const
返回RTP数据包中的序列号字段
• void SetExtendedSequenceNumber(uint32 t seq)
设置这个包的扩展序列号
• uint32 t GetTimestamp() const
返回这个RTP包的时间戳
• uint32 t GetSSRC() const
返回这个RTP包的SSRC值。ps:这个非常重要,通过这个SSRC值,我们可以用RTPSourceData *GetSourceInfo(uint32 t ssrc)获取这个RTP流相关的信息!
• uint8 t *GetPacketData() const
返回这个RTP包的地址。
• uint8 t *GetPayloadData() const
返回这个RTP包有效负载的地址。ps:这是我们最常用的函数
• size t GetPacketLength() const
返回RTP数据包的长度
• size t GetPayloadLength() const
返回RTP有效负载的长度。
• uint16 t GetExtensionID() const
如果有扩展头部,返回扩展头部的ID。
• uint8 t *GetExtensionData() const
返回扩展头部的内容
• size t GetExtensionLength() const
返回扩展头部的长度
• RTPTime GetReceiveTime() const
当一个数据包接收进来,构造成为RTPPacket时,数据包的接收时间就会储存在RTPPacket内部,这个函数读取这个时间。