3.2.6 RTPTransmitter
----------------------------------------------------------------------標頭檔:rtptransmitter.h
抽象類別RTPTransmitter指出了實際用於傳輸的組件的介面。當前實現了三種,分別是:基於IPv4的UDP發送器;基於IPv6的UDP發送器【譯註:另一種??】。TransmissionProtocol類型用於指出是哪種發送器:
enum TransmissionProtocol{IPv4UDPProto, IPv6UDPProto, UserDefinedProto };
當使用RTPSession類時,使用UserDefinedProto可用來選擇你自己的傳輸組件,這是你需要自己實現NewUserDefinedTransmitter()函數,這個函數應該返回一個你自己的RTPTransmitter的繼承類的指標。
可以使用ReceiveMode類型來指定3種接收模式:
Enum ReceiveMode{ AcceptAll, AcceptSome, IgnoreSome};
根據模式的設定,到達的資料將會進行不同的處理:
AcceptAll
-----不論從哪裡發送的,所有資料都將接收。
AcceptSome
-----只有指定源發送的資料才會被接收。
IgnoreSome
-----除了指定源的不接收,其他的全部接收。
由RTPTransmission類定義的介面如下:
int Init(bool threadsafe)
-----必須在使用transmission組件之調用該函數,組件是否是安全執行緒的將由參數threadsafe指定。
int Create(size_t maxpacketsize, const RTPTransmissionParams *transparams)
-----為組件的使用做準備,參數maxpacketsize指出了一個包的最大值,如果包大小大於該值,則將不會發送。參數transparams是一個指向RTPTranmissionParams對象的指標。RTPTranmissionParams也是個抽象類別,實際使用時根據不同組件,通過繼承RTPTranmissionParams類來定義自身的參數。如果參數為null,那麼將使用該組件傳輸參數的預設值。
int Destroy()
-----調用該函數之後,將清理儲存區,並且該組件也不能再使用。只有當重新調用Create函數之後該組件才可以繼續使用。
RTPTransmissionInfo *GetTransmissonInfo()
-----函數將返回一個指向RTPTransmissionInfo對象的指標,從該對象中可以獲得關於傳輸器的更多資訊(例如:本地IP地址的列表)。當前(版本中)根據使用的傳輸器的種類既可以返回RTPUDPv4TransmissionInfo也可以返回RTPUDPv6TransmissionInfo。當對象不再使用時,使用者需要(手動)刪除該對象。
int GetLocalHostName(uint8_t *buffer, size_t *bufferlength)
-----基於本地主機地址的內部資訊查詢主機名稱,該函數可能會花費比較長的時間用於DNS查詢。bufferlength應該被初始化為buffer中可能會儲存的位元組個數,如果函數函數成功,則bufferlength中就是buffer中儲存的位元組數。需要注意的是在buffer中儲存的並非是以NULL結尾的資料。如果分配的儲存空間不夠的話,函數將失敗並且返回ERR_RTP_TRANS_BUFFERLENGTHTOOSMALL,並將需要的位元組數存入bufferlength中。
bool ComesFromThisTransmitter(const RTPAddress *addr)
-----如果由addr指出的地址是傳輸器的一個地址則返回true。
size_t GetHeaderOverhead()
-----返回將要由網路的底層(不包括鏈路層)加入到RTP包中的位元組數。I
int Poll()
-----檢查到達的資料並儲存。
bool NewDataAvailable()
-----當可以使用函數GetNextPacket擷取資料包時返回true。
RTPRawPacket *GetNextPacket()
-----(在Poll函數中)返回在RTPRawPacket對象中收到的RTP資料包的未經處理資料。
int WaitForIncomingData(const RTPTime &dalay, bool *dataavailable =0)
-----等待最多由delay指出的時間直到接收到資料。如果dataavailable不是NULL,那麼如要要讀取資料的話應該設為true,否則設為false(譯註:不確定,原文:If dataavailable is not NULL, it should be set true if data was actually read and to false otherwise)。
int AbortWait()
-----如果上一個函數被調用了,本函數將中止等待。
int SendRTPData(const void *data, size_t len)
-----向所有當前目的地址清單中的RTP地址發送長度為len的data資料。
int SendRTCPData(const void *data, size_t len)
-----向所有當前目的地址清單中的RTCP地址發送長度為len的data資料。
void ResetPacketCount()
-----傳輸器會跟蹤所有發送的RTP和RTCP資料包的個數,該函數複位這些計數。
uint32_t GetNumRTPPacketsSent()
-----返回已發送的RTP包的個數。
uint32_t GetNumRTCPPacketsSent()
-----返回已發送的RTCP包的個數。
int AddDestination(const RTPAddress &addr)
-----將參數addr指定的地址加入到目的地址清單中。
int DeleteDestination(const RTPAddress &addr)
-----將參數addr指定的地址從目的地址清單中刪除。
void ClearDestination()
-----清空目的地址清單。
bool SupportMulticasting()
-----如果傳輸組件支援組播則返回true。
int JoinMulticastGroup(const RTPAddress &addr)
-----加入由參數addr指定的組播組。
int LeaveMulticastGroup(const RTPAddress &addr)
-----退出由參數addr指定的組播組。
void LeaveAllMulticastGroups()
-----退出所有的加入的組播組