3.2.16 RTPPacketBuilder
-------------------------------------------------------------------------头文件:rtppacketbuilder.h
该类可以用来构建RTP数据包,比RTPPacket类高级一点:可以产生SSRC标识符,跟踪时间戳,序列号等。接口如下:
int Init(size_t maxpacksize)
-----初始化构建器使得允许的包大小小于maxpack。
void Destroy()
-----清理构建器。
uint32_t GetPacketCount()
-----返回与当前SSRC标识符一块创建的包的数量。
uint32_t GetPayloadOctetCount()
-----返回由该SSRC标识符产生的负载字节数。
int SetMaximumPacketSize(size_t maxpacksize)
-----将最大允许包大小设置为maxpacksize。
int AddCSRC(uint32_t csrc)
-----在RTP包要保存的CSRC链表中加入一个SSRC。
int DeleteCSRC(uint32_t csrc)
-----从要保存入RTP包的CSRC表中删除一个SSRC。
void ClearCSRCList()
-----清除CSRC链表。
int BuildPacket(const void *data, size_t len)
-----构建一个负载为data长度为len的数据包,负载类型,标识,时间戳增量等使用后面的SetDefault函数设置的值。
int BuildPacket(const void *data, size_t len, uint8_t pt, bool mark, uint32_t timestampinc)
-----构建一个负载为data长度为len的数据包,负载类型为pt,标识位为mark,包构建成功之后时间戳增量为temstamp。
int BuildPacketEx(const void *data, size_t len, uint16_t hdrextID, const void *hdrextdata, size_t numhdrextwords)
-----构建一个负载为data长度为len的数据包,负载类型,标识,时间戳增量等使用后面的SetDefault函数设置的值。该数据包还将包含一个标识符为hdrextID数据为hdrextdata的RTP扩展头,扩展数据头的长度由一个32位的字numhdrextwords给出。
int BuildPacketEx(const void *data, size_t len, uint8_t pt, bool mark, uint32_t timestampinc, uint16_t hdrextID, const void *hdrextdata, size_t numhdrextwords)
-----构建一个负载为data长度为len的数据包,负载类型为pt,标识位为mark,包构建成功之后时间戳增量为temstamp。该数据包还将包含一个标识符为hdrextID数据为hdrextdata的RTP扩展头,扩展数据头的长度由一个32位的字numhdrextwords给出。
uint8_t *GetPacket()
-----返回指向上次构建的RTP数据包数据的指针。
size_t GetPacketLength()
-----返回上次构建的RTP数据包的长度。
int SetDefaultPayloadType(uint8_t pt)
-----设置默认负载类型为pt。
int SetDefaultMark(bool m)
-----设置默认标志位为m。
int SetDefaultTimestampIncrement(uint32_t timestampinc)
-----设置默认时间戳增量为timestampinc。
int IncrementTimestamp(uint32_t inc)
-----函数以给定的inc来增加时间戳。该函数有时候是有用的,例如:当数据包只包含静默而不发送时,该函数应该被调用以按照合适的量来增加时间戳,这样才可以使得其他主机可以在正确的时间播放下一个数据包。
int IncrementTimestampDefault()
-----函数使用由SetDefaultTimestampIncrement指定的量来增加时间戳。该函数是有用的,例如:当数据包只包含静默而不发送时,该函数应该被调用以按照合适的量来增加时间戳,这样才可以使得其他主机可以在正确的时间播放下一个数据包。
uint32_t CreateNewSSRC()
-----在产生的数据包中创建一个新的SSRC,这将产生一个新的时间戳以及序列号增量。
uint32_t CreateNewSSRC(RTPSources & sources)
-----产生的数据包中创建一个新的SSRC,这将产生一个新的时间戳以及序列号增量。源表sources用来确保选择的SSRC不会被其他的参与者使用。
uint32_t GetSSRC()
-----返回当前的SSRC标识符。
uint32_t GetTimestamp()
-----返回当前的RTP时间戳。
uint16_t GetSequenceNumber()
-----返回当前的序列号。
RTPTime GetPacketTime()
-----返回数据包的生成时间。这不必是上一个RTP包生成的时间,如果时间戳增量为0,则时间将不会更新。
uint32_t GetPacketTimestamp()
-----返回对应于上一个函数返回的时间的RTP时间戳。
3.2.17 RTCPPacketBuilder
-----------------------------------------------------------------------头文件:rtcppacketbuilder.h
类RTCPPacketBuilder可以用来构建RTCP复合数据包。该函数比类RTCPCompoundPacketBuilder高级一点:它使用RTPPacketBuilder对象和RTPSources对象的信息来自动产生下一个需要发送的复合数据包,而且类还提供函数用来决定是SDES项而不是CNAME项应该被发送。类的接口如下:
RTCPPacketBuilder(RTPSources &sources,RTPPacketBuilder &rtppackbuilder)
-----创建一个RTCPPacketBuilder对象,使用源表sources和RTP数据包构建器rtppacketbuiler决定的下一个RTCP复合数据包中包含的信息。
int Init(size_t maxpacksize, double timestampunit, const void *cname, size_t cnamelen)
-----使用最大允许包大小maxpacksize,时间戳单位timestampunit以及由长度为cnamelen的cname给出的SDES CNAME项来初始化构建器。时间戳单位定义为:一段时间内采样数除以该段时间长度,对于8000Hz的音频来说就是1.0/8000.0。
void Destroy()
-----清除构建器。
int SetTimestampUnit(double tsunit)
-----设置时间戳单位为tsunit,时间戳单位定义为:一段时间内采样数除以该段时间长度,对于8000Hz的音频来说就是1.0/8000.0。
int SetMaximumPacketSize(size_t maxpacksize)
-----设置最大允许的RTCP复合数据包大小为maxpacksize。
int SetPreTransmissionDelay(const RTPTime &delay)
-----函数允许你通知RTCP数据包构建器第一个采样包到发送包之间的延迟时间,当用于交互式多媒体的同步时,将会考虑进延迟来计算RTP时间戳和时钟时间之间的关系。
int BuildNextPacket(RTCPCompoundPacket **pack)
-----构建下一个保存在pack中的要发送的RTCP复合数据包。
int BuildBYEPacket(RTCPCompoundPacket **pack, const void *reason, size_t reasonlength, bool useSRifpossible = true)
-----构建一个由长度为reasonlength的reason给出离开原因的BYE数据包。如果useSRifpossible设为true,如果允许则RTCP复合数据包将以发送者报告开始,否则将以接受者报告开始。
void SetNameInterval(int count)
-----当源表中所有的源都已处理完之后,类会检查是否需要发送其他的SDES项,如果count为0或者负,则不会发生什么,如果为正,则在源表中的源被处理完count次之后将在后面加入一条SDES name项。
void SetEMailInterval(int count)
-----当源表中所有的源都已处理完之后,类会检查是否需要发送其他的SDES项,如果count为0或者负,则不会发生什么,如果为正,则在源表中的源被处理完count次之后将在后面加入一条SDES e-mail项。
void SetLocationInterval(int count)
-----当源表中所有的源都已处理完之后,类会检查是否需要发送其他的SDES项,如果count为0或者负,则不会发生什么,如果为正,则在源表中的源被处理完count次之后将在后面加入一条SDES location项。
void SetPhoneInterval(int count)
-----当源表中所有的源都已处理完之后,类会检查是否需要发送其他的SDES项,如果count为0或者负,则不会发生什么,如果为正,则在源表中的源被处理完count次之后将在后面加入一条SDES phone项。
void SetToolInterval(int count)
-----当源表中所有的源都已处理完之后,类会检查是否需要发送其他的SDES项,如果count为0或者负,则不会发生什么,如果为正,则在源表中的源被处理完count次之后将在后面加入一条SDES tool项。
void SetNoteInterval(int count)
-----当源表中所有的源都已处理完之后,类会检查是否需要发送其他的SDES项,如果count为0或者负,则不会发生什么,如果为正,则在源表中的源被处理完count次之后将在后面加入一条SDES note项。
int SetLocalName(const void *s, size t len)
-----将本地参与者的SDES name项设置为长度为len,值为value。
int SetLocalEMail(const void *s, size t len)
-----将本地参与者的SDES E-mai项设置为长度为len,值为value。
int SetLocalLocation(const void *s, size t len)
-----将本地参与者的SDES location项设置为长度为len,值为value。
int SetLocalPhone(const void *s, size t len)
-----将本地参与者的SDES phone项设置为长度为len,值为value。
int SetLocalTool(const void *s, size t len)
-----将本地参与者的SDES tool项设置为长度为len,值为value。
int SetLocalNote(const void *s, size t len)
-----将本地参与者的SDES note项设置为长度为len,值为value。
【to be continued!】