3.2.10 RTPRawPacket
-------------------------------------------------------------------------標頭檔:rtprawpacket.h
類RTPRawPacket被傳輸組件用來儲存收到的RTP和RTCP資料。介面如下:
RTPRawPacket(uint8_t *data, size_t datalen, RTPAddress *address, RTPTime &recvtime, bool rtp)
-----建立一個對象用來儲存長度為datalen的data中的資料,注意:只儲存指向資料的指標而不會複製資料!資料包的發送地址和收到的時間將分別儲存到address和recvtime中。rtp標誌用來區分收到的資料是RTP資料還是RTCP資料。
uint8_t *GetData()
-----返回指向資料包中資料的地址。
size_t GetDataLength() const
-----返回該對象所代表的資料包的長度。
RTPTime GetReceiveTime() const
-----返回收到資料包的時間。
const RTPAddress *GetSenderAddress() const
-----返回資料包中儲存的(發送方)地址。
bool IsRTP() const
-----如果資料是RTP資料返回true,否則返回false代表是RTCP資料。
void ZeroData()
-----將指向資料包中儲存的資料的指標設為0,這將阻止在調用類的解構函式時對實際資料進行的delete調用。該函數在類RTPPacket和RTCPCompoundPacket用來擷取資料包資料而又不需要複製資料時使用,用來確保當RTPRawPacket的解構函式調用時不會刪除資料。
3.2.11 RTPPacket
--------------------------------------------------------------------------標頭檔:rtppacket.h
類RTPPacket用來在RTPRawPacket對象表示一個RTP資料時解析(資料包)。該類也可以用來根據使用者指定的參數產生一個RTP資料包,介面如下:
RTPPacket(RTPRawPacket &rawpacket)
-----基於rawpacket中的資料產生一個RTPPacket對象。
RTPPacket(uint8_t payloadtype, const void *payloaddata, size_t payloadlen, uint16_t seqnr, uint32_t timestamp, uint32_t ssrc, bool gotmaker, uint8_t numcsrcs, const uint32_t *csrcs, bool gotextension, uint16_t extionid, uint16_t
extensionlen_numwords, const void *extensiondata, size_t maxpacksizt=0)
-----為RTP資料包產生一個新的緩衝區,並根據給定的參數填充各個域。如果maxpacksize不等於0,則當總的資料包大小超過maxpacksize時將產生一個錯誤。該建構函式的參數都是自解釋的,需要注意的是擴充頭的大小由一個32位的字指定。
RTPPacket(uint8_t payloadtype, const void *payloaddata, size_t payloadlen, uint16_t seqnr, uint32_t timestamp, uint32_t ssrc, bool gotmaker, uint8_t numcsrcs, const uint32_t *csrcs, bool gotextension, uint16_t extionid, uint16_t
extensionlen_numwords, const void *extensiondata, void *buffer, size_t buffersize)
-----與上一個函數基本一樣的函數,不同點在於資料是儲存在一個由buffer指定的大小為buffersize的緩衝區中。
int GetCreationError() const
-----如果建構函式發生錯誤,該函數返回錯誤碼。
bool HasExtension() const
-----如果RTP資料包有擴充頭則返回true,否則返回false。
bool HasMarker() const
-----如果marker標誌位被置位,返回true,否則返回false。
int GetCSRCCount() const
-----返回資料包中的CSRC數。
uint32_t GetCSRC(int num) const
-----返回指定的CSRC標識符,參數num可以從0到GetCSRCCount()-1。
uint8_t GetPayloadType() const
-----返回資料包的負載類型。
uint32_t GetExtendedSequenceNumber() const
-----返回資料包的擴充序號。當資料包剛剛收到時,只有底16位被設定,高16位隨後填充。
uint16_t GetSequenceNumber() const
-----返回資料包的序號。
void SetExtendedSequenceNumber(uint32_t seq)
-----將資料包的擴充序號設定為seq。
void GetTimestamp() const
-----返回資料包的時間戳記。
uint32_t GetSSRC() const
-----返回資料包中的SSRC標識符。
uint8_t *GetPacketData() const
-----返回指向整個資料包的指標。
uint8_t *GetPayloadData() const
-----返回指向實際負載資料的指標。
size_t GetPacketLength() const
-----返回整個資料包的大小。
size_t GetPayloadLength() const
-----返回整個負載資料的大小。
uint16_t GetExtensionID() const
-----如果有擴充頭,則該函數將返回擴充標識符。
uint8_t *GetExtensionData() const
-----返回指向擴充頭資料的指標。
size_t GetExtensionLength() const
-----返回擴充頭資料的大小。
RTPTime GetReceiveTime() const
-----當一個RTPPacket對象從RTPRawPacket對象中建立時,未經處理資料的接收時間將儲存到RTPPacket對象中,該函數用來擷取這個時間。
3.2.12 RTPCompoundPacket
-------------------------------------------------------------------------標頭檔:rtpcompoundpacket.h
該類描述RTCP複合資料包,介面如下:
RTCPCompoundPacket(RTPRawPacket &rawpack)
-----根據rawpack的資料產生一個RTCPCompoundPacket對象。
int GetCreationError()
-----如果在建構函式中的未經處理資料包無法解析,則該函數將返回出錯原因的錯誤碼。如果包的格式不合法則將返回ERR_RTP_RCTPCOMPOUND_INVALIDPACKET。
uint8_t *GetCompoundPacketData()
-----返回指向整個RTCP複合資料包資料的指標。
size_t GetCompoundPacketLength()
-----返回整個RTCP複合資料包的長度。
void GotoFirstPacket()
-----開始遍曆整個RTCP複合資料包中的單個RTCP資料包。
RTCPPacket *GetNextPacket()
-----返回指向下一個獨立RTCP資料包的指標。注意:返回的RTCPPacket對象可能不調用delete。RTCPPacket類的介紹如下:
RTCPPacket
-----------------------------------------------------------------------------標頭檔:rtppacket.h
類RTCPPacket是具體類型的RTCP資料包的基類。在類中定義的下面的類型指出了不同的具體資料包類型:
enum PacketType{ SR, RR, SDES, BYE, APP, Unknown };
類定義的成員函數有:
bool IsKnownFormat() const
-----如果子類可以解析資料則返回true,否則返回false。
PacketType GetPacketType() const
-----返回子類實現的具體的包類型:
--RTCPPacket::SR:表明是一個RTCPSRPacket對象。
--RTCPPacket::RR:表明是一個RTCPRRPacket對象。
--RTCPPacket::SDES:表明是一個RTCPSDESPacket對象。
--RTCPPacket::BYE:表明是一個RTCPBYEPacket對象。
--RTCPPacket::APP:表明是一個RTCPAPPPacket對象。
--RTCPPacket::Unkown:表明是一個RTCPUnknownPacket對象。
uint8_t *GetPacketData()
-----返回指向RTCP資料包中的資料的指標。
size_t GetPacketLength() const
-----返回RTCP資料包的長度。
RTCPSRPacket
-----------------------------------------------------------------------標頭檔:rtcpsrpacket.h
----------------------------------------------------------------------繼承自:RTCPPacket
類描述了一個RTCP發送方報告資料包,介面如下:
RTCPSRPacket(uint8_t *data, size_t datalen)
-----基於長度為datalen的資料data建立一個RTCPSRPacket資料包對象。因為data指向的資料在類內部被引用(即不複製資料),所以必須確保在該對象存在期間data指標指向的記憶體是有效合法的。
uint32_t GetSenderSSRC() const
-----返回傳送該資料包的(會話)參與者的SSRC。
RTPNTPTime GetNTPTimestamp() const
-----返回傳送發報告中的NTP時間戳記。
uint32_t GetRTPTimestamp() const
-----返回傳送方報告中的RTP時間戳記。
uint32_t GetSenderPacketCount() const
-----返回在發送方報告中的發送方資料包計數。
uint32_t GetSenderOctetCount() const
-----返回在發送方報告中的發送方位元組計數。
int GetReceptionReportCount() const
-----返回資料包中的接收報告塊的個數。(譯註:not sure。原文:Return the number of report blocks present in this packet.)
uint32_t GetSSRC(int index) const
-----返回由index指定的接收報告塊的SSRC,index的取值範圍從0到GetReceptionReportCount()-1。注意:(函數)並不檢查index範圍的合法性。
uint8_t GetFractionLost(int index) const
-----返回index指定的接收報告中的丟包率屬性(or欄位?)。index的取值範圍與上面一樣,同樣不檢查index的範圍的合法性。
int32_t GetLostPacketCount(int index) const
-----返回由index指出的接受報告中的丟失的資料包的個數。關於index的描述與上面相同。
uint32_t GetExtendedHighestSequenceNumber(int index) const
-----返回由index指出的接收報告中的擴充的最高序號(??),index同上。
uint32_t GetJitter(int index) const
-----返回index指出的接收報告中的抖動屬性,index同上。
uint32_t GetLSR(int index) const
-----返回index指出的接受報告中的LSR屬性,index同上。
uint32_t GetDLSR(int index) const
-----返回index指出的接受報告中的DLSR屬性,index同上。
【to be continued!】