JRTPLIB 3.5.2手冊中文版—part4

來源:互聯網
上載者:User

 

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()

-----退出所有的加入的組播組

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.