posts - 34, comments - 90, trackbacks - 0, articles - 0

      这是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内部,这个函数读取这个时间。

只有注册用户登录后才能发表评论。