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()
-----退出所有的加入的组播组