⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtpfaketransmitter.cpp

📁 mpeg4 video codec mpeg4 video codec
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	}	destinations.GotoFirstElement();    // send to each destination	while (destinations.HasCurrentElement())	{        (*params->GetPacketReadyCB())((uint8_t*)data, len,        destinations.GetCurrentElement().GetIP_NBO(),        destinations.GetCurrentElement().GetRTCPPort_NBO(),         0);		destinations.GotoNextElement();	}		rtcppackcount++;	MAINMUTEX_UNLOCK	return 0;}void RTPFakeTransmitter::ResetPacketCount(){	if (!init)		return;	MAINMUTEX_LOCK	if (created)	{		rtppackcount = 0;		rtcppackcount = 0;		}	MAINMUTEX_UNLOCK	}uint32_t RTPFakeTransmitter::GetNumRTPPacketsSent(){	if (!init)		return 0;	MAINMUTEX_LOCK		uint32_t num;	if (!created)		num = 0;	else		num = rtppackcount;	MAINMUTEX_UNLOCK	return num;}uint32_t RTPFakeTransmitter::GetNumRTCPPacketsSent(){	if (!init)		return 0;		MAINMUTEX_LOCK		uint32_t num;	if (!created)		num = 0;	else		num = rtcppackcount;	MAINMUTEX_UNLOCK	return num;}	int RTPFakeTransmitter::AddDestination(const RTPAddress &addr){	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;		MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv4Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_INVALIDADDRESSTYPE;	}		RTPIPv4Address &address = (RTPIPv4Address &)addr;	RTPIPv4Destination dest(address.GetIP(),address.GetPort());	int status = destinations.AddElement(dest);	MAINMUTEX_UNLOCK	return status;}int RTPFakeTransmitter::DeleteDestination(const RTPAddress &addr){	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;		MAINMUTEX_LOCK		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv4Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_INVALIDADDRESSTYPE;	}		RTPIPv4Address &address = (RTPIPv4Address &)addr;		RTPIPv4Destination dest(address.GetIP(),address.GetPort());	int status = destinations.DeleteElement(dest);		MAINMUTEX_UNLOCK	return status;}void RTPFakeTransmitter::ClearDestinations(){	if (!init)		return;		MAINMUTEX_LOCK	if (created)		destinations.Clear();	MAINMUTEX_UNLOCK}bool RTPFakeTransmitter::SupportsMulticasting(){	if (!init)		return false;		MAINMUTEX_LOCK		bool v;			if (!created)		v = false;	else		v = supportsmulticasting;	MAINMUTEX_UNLOCK	return v;}#ifdef RTP_SUPPORT_IPV4MULTICASTint RTPFakeTransmitter::JoinMulticastGroup(const RTPAddress &addr){// hrrm wonder how will manage to get multicast info thru to the UDPSINK/*	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;	MAINMUTEX_LOCK		int status;		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv4Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_INVALIDADDRESSTYPE;	}		const RTPIPv4Address &address = (const RTPIPv4Address &)addr;	uint32_t mcastIP = address.GetIP();		if (!RTPFakeTRANS_IS_MCASTADDR(mcastIP))	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTAMULTICASTADDRESS;	}		status = multicastgroups.AddElement(mcastIP);	if (status >= 0)	{		RTPFakeTRANS_MCASTMEMBERSHIP(rtpsock,IP_ADD_MEMBERSHIP,mcastIP,status);		if (status != 0)		{			multicastgroups.DeleteElement(mcastIP);			MAINMUTEX_UNLOCK			return ERR_RTP_FAKETRANS_COULDNTJOINMULTICASTGROUP;		}		RTPFakeTRANS_MCASTMEMBERSHIP(rtcpsock,IP_ADD_MEMBERSHIP,mcastIP,status);		if (status != 0)		{			RTPFakeTRANS_MCASTMEMBERSHIP(rtpsock,IP_DROP_MEMBERSHIP,mcastIP,status);			multicastgroups.DeleteElement(mcastIP);			MAINMUTEX_UNLOCK			return ERR_RTP_FAKETRANS_COULDNTJOINMULTICASTGROUP;		}	}	MAINMUTEX_UNLOCK		return status;*/	return ERR_RTP_FAKETRANS_NOMULTICASTSUPPORT;}int RTPFakeTransmitter::LeaveMulticastGroup(const RTPAddress &addr){    /*	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;	MAINMUTEX_LOCK		int status;		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv4Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_INVALIDADDRESSTYPE;	}		const RTPIPv4Address &address = (const RTPIPv4Address &)addr;	uint32_t mcastIP = address.GetIP();		if (!RTPFakeTRANS_IS_MCASTADDR(mcastIP))	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTAMULTICASTADDRESS;	}		status = multicastgroups.DeleteElement(mcastIP);	if (status >= 0)	{			RTPFakeTRANS_MCASTMEMBERSHIP(rtpsock,IP_DROP_MEMBERSHIP,mcastIP,status);		RTPFakeTRANS_MCASTMEMBERSHIP(rtcpsock,IP_DROP_MEMBERSHIP,mcastIP,status);		status = 0;	}		MAINMUTEX_UNLOCK	return status;    */	return ERR_RTP_FAKETRANS_NOMULTICASTSUPPORT;}void RTPFakeTransmitter::LeaveAllMulticastGroups(){/*	if (!init)		return;		MAINMUTEX_LOCK	if (created)	{		multicastgroups.GotoFirstElement();		while (multicastgroups.HasCurrentElement())		{			uint32_t mcastIP;			int status = 0;			mcastIP = multicastgroups.GetCurrentElement();			RTPFakeTRANS_MCASTMEMBERSHIP(rtpsock,IP_DROP_MEMBERSHIP,mcastIP,status);			RTPFakeTRANS_MCASTMEMBERSHIP(rtcpsock,IP_DROP_MEMBERSHIP,mcastIP,status);			multicastgroups.GotoNextElement();		}		multicastgroups.Clear();	}	MAINMUTEX_UNLOCK*/}#else // no multicast supportint RTPFakeTransmitter::JoinMulticastGroup(const RTPAddress &addr){	return ERR_RTP_FAKETRANS_NOMULTICASTSUPPORT;}int RTPFakeTransmitter::LeaveMulticastGroup(const RTPAddress &addr){	return ERR_RTP_FAKETRANS_NOMULTICASTSUPPORT;}void RTPFakeTransmitter::LeaveAllMulticastGroups(){}#endif // RTP_SUPPORT_IPV4MULTICASTint RTPFakeTransmitter::SetReceiveMode(RTPTransmitter::ReceiveMode m){	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;		MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	if (m != receivemode)	{		receivemode = m;		acceptignoreinfo.Clear();	}	MAINMUTEX_UNLOCK	return 0;}int RTPFakeTransmitter::AddToIgnoreList(const RTPAddress &addr){	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;	MAINMUTEX_LOCK		int status;	if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv4Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_INVALIDADDRESSTYPE;	}	if (receivemode != RTPTransmitter::IgnoreSome)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_DIFFERENTRECEIVEMODE;	}		const RTPIPv4Address &address = (const RTPIPv4Address &)addr;	status = ProcessAddAcceptIgnoreEntry(address.GetIP(),address.GetPort());		MAINMUTEX_UNLOCK	return status;}int RTPFakeTransmitter::DeleteFromIgnoreList(const RTPAddress &addr){	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;		MAINMUTEX_LOCK		int status;		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv4Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_INVALIDADDRESSTYPE;	}	if (receivemode != RTPTransmitter::IgnoreSome)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_DIFFERENTRECEIVEMODE;	}		const RTPIPv4Address &address = (const RTPIPv4Address &)addr;		status = ProcessDeleteAcceptIgnoreEntry(address.GetIP(),address.GetPort());	MAINMUTEX_UNLOCK	return status;}void RTPFakeTransmitter::ClearIgnoreList(){	if (!init)		return;		MAINMUTEX_LOCK	if (created && receivemode == RTPTransmitter::IgnoreSome)		ClearAcceptIgnoreInfo();	MAINMUTEX_UNLOCK}int RTPFakeTransmitter::AddToAcceptList(const RTPAddress &addr){	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;		MAINMUTEX_LOCK		int status;		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv4Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_INVALIDADDRESSTYPE;	}	if (receivemode != RTPTransmitter::AcceptSome)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_DIFFERENTRECEIVEMODE;	}		const RTPIPv4Address &address = (const RTPIPv4Address &)addr;	status = ProcessAddAcceptIgnoreEntry(address.GetIP(),address.GetPort());	MAINMUTEX_UNLOCK	return status;}int RTPFakeTransmitter::DeleteFromAcceptList(const RTPAddress &addr){	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;		MAINMUTEX_LOCK		int status;		if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	if (addr.GetAddressType() != RTPAddress::IPv4Address)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_INVALIDADDRESSTYPE;	}	if (receivemode != RTPTransmitter::AcceptSome)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_DIFFERENTRECEIVEMODE;	}		const RTPIPv4Address &address = (const RTPIPv4Address &)addr;	status = ProcessDeleteAcceptIgnoreEntry(address.GetIP(),address.GetPort());	MAINMUTEX_UNLOCK	return status;}void RTPFakeTransmitter::ClearAcceptList(){	if (!init)		return;		MAINMUTEX_LOCK	if (created && receivemode == RTPTransmitter::AcceptSome)		ClearAcceptIgnoreInfo();	MAINMUTEX_UNLOCK}int RTPFakeTransmitter::SetMaximumPacketSize(size_t s)	{	if (!init)		return ERR_RTP_FAKETRANS_NOTINIT;		MAINMUTEX_LOCK	if (!created)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_NOTCREATED;	}	if (s > RTPFAKETRANS_MAXPACKSIZE)	{		MAINMUTEX_UNLOCK		return ERR_RTP_FAKETRANS_SPECIFIEDSIZETOOBIG;	}	maxpacksize = s;	MAINMUTEX_UNLOCK	return 0;}bool RTPFakeTransmitter::NewDataAvailable(){	if (!init)		return false;		MAINMUTEX_LOCK		bool v;			if (!created)		v = false;	else	{		if (rawpacketlist.empty())			v = false;		else			v = true;	}		MAINMUTEX_UNLOCK	return v;}RTPRawPacket *RTPFakeTransmitter::GetNextPacket(){	if (!init)		return 0;		MAINMUTEX_LOCK		RTPRawPacket *p;		if (!created)	{		MAINMUTEX_UNLOCK		return 0;	}	if (rawpacketlist.empty())	{		MAINMUTEX_UNLOCK		return 0;	}	p = *(rawpacketlist.begin());	rawpacketlist.pop_front();	MAINMUTEX_UNLOCK	return p;}// Here the private functions start...#ifdef RTP_SUPPORT_IPV4MULTICASTbool RTPFakeTransmitter::SetMulticastTTL(uint8_t ttl){/*	int ttl2,status;	ttl2 = (int)ttl;	status = setsockopt(rtpsock,IPPROTO_IP,IP_MULTICAST_TTL,(const char *)&ttl2,sizeof(int));	if (status != 0)		return false;	status = setsockopt(rtcpsock,IPPROTO_IP,IP_MULTICAST_TTL,(const char *)&ttl2,sizeof(int));	if (status != 0)		return false;	return true;*/}#endif // RTP_SUPPORT_IPV4MULTICASTvoid RTPFakeTransmitter::FlushPackets(){	std::list<RTPRawPacket*>::const_iterator it;	for (it = rawpacketlist.begin() ; it != rawpacketlist.end() ; ++it)		delete (*it);	rawpacketlist.clear();}int RTPFakeTransmitter::FakePoll(){    uint8_t *data = NULL;    int data_len = 0;    uint32_t sourceaddr;    uint16_t sourceport;    bool rtp;    bool acceptdata;    RTPTime curtime = RTPTime::CurrentTime();    data = params->GetCurrentData();    data_len = params->GetCurrentDataLen();    rtp = params->GetCurrentDataType();    sourceaddr = params->GetCurrentDataAddr();    sourceport = params->GetCurrentDataPort();    // lets make sure we got something    if (data == NULL || data_len <= 0)    {        return 0;    }    // let's make a RTPIPv4Address    RTPIPv4Address *addr = new RTPIPv4Address(sourceaddr, sourceport);    if (addr == 0)    {        return ERR_RTP_OUTOFMEM;    }    // ok we got the src addr, now this should be the actual packet    uint8_t *datacopy;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -