亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rtpsources.cpp

?? 利用rtp庫實現實時語音傳送
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/*  This file is a part of JRTPLIB  Copyright (c) 1999-2004 Jori Liesenborgs  Contact: jori@lumumba.luc.ac.be  This library (JRTPLIB) was partially developed for my thesis at the  School for Knowledge Technology (Belgium/The Netherlands)  Permission is hereby granted, free of charge, to any person obtaining a  copy of this software and associated documentation files (the "Software"),  to deal in the Software without restriction, including without limitation  the rights to use, copy, modify, merge, publish, distribute, sublicense,  and/or sell copies of the Software, and to permit persons to whom the  Software is furnished to do so, subject to the following conditions:  The above copyright notice and this permission notice shall be included  in all copies or substantial portions of the Software.  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS  IN THE SOFTWARE.*/#include "rtpsources.h"#include "rtpsourcedata.h"#include "rtppacket.h"#include "rtpcontributingsources.h"#include "rtptimeutil.h"#include "rtphandlers.h"#include "rtpconnection.h"#include <string.h>RTPSources::RTPSources(){	int i;	for (i = 0 ; i < RTP_SOURCETABLE_HASHSIZE ; i++)		sourcetable[i] = NULL;	numsources = 0;	numsenders = 0;	handlers = NULL;	contribsources = NULL;	initialized = false;}RTPSources::~RTPSources(){	Clear();}void RTPSources::Clear(){	int i;	RTPSourceData *tmp,*tmp2;	for (i = 0 ; i < RTP_SOURCETABLE_HASHSIZE ; i++)	{		tmp = sourcetable[i];		while (tmp != NULL)		{			tmp2 = tmp->next;			delete tmp;			tmp = tmp2;		}		sourcetable[i] = NULL;	}}RTPSourceData *RTPSources::Retrieve(unsigned long src){	int index;	bool found;	RTPSourceData *tmp;	index = (int)(src%(unsigned long)RTP_SOURCETABLE_HASHSIZE);	if ((tmp = sourcetable[index]) == NULL)		return NULL;	found = false;	while (!found && tmp != NULL)	{		if (tmp->ssrc < src)			tmp = tmp->next;		else			found = true;	}	if (!found)		return NULL;	if (tmp->ssrc != src)		return NULL;	return tmp;}int RTPSources::ProcessPacket(RTPPacket *packet,unsigned long ip,int port,double localtsunit){	RTPSourceData *tmp;	bool created,collis;	int status;	if (!initialized)		return ERR_RTP_SOURCESNOTINITALIZED;	cursource = NULL;	curtablepos = RTP_SOURCETABLE_HASHSIZE;		tmp = RetrieveOrCreate(packet->syncsource,localtsunit,&created);	if (tmp == NULL)		return ERR_RTP_OUTOFMEM;	if (created)	{		tmp->ip = ip;		tmp->rtpport = port;		if (contribsources->DoesCSRCExist(tmp->ssrc))			tmp->isaCSRC = true;		if (handlers->handlers[RTP_EXCEPTION_NEWSOURCE].handler != NULL)			CallNewSourceHandler(tmp->ssrc);	}	else // src entry already existed	{		collis	= false;		if (tmp->ip != ip)			collis = true;		else		{			if (tmp->rtpport < 0) // first rtp packet from source				tmp->rtpport = port;			else if (tmp->rtpport != port)				collis = true;		}		if (collis)		{			// ssrc collision, ignore this packet			if (handlers->handlers[RTP_EXCEPTION_SSRCCOLLISION].handler != NULL)				CallSSRCCollisionHandler(tmp->ssrc,ip,true,port);			return ERR_RTP_COLLISIONBETWEENSSRCS;		}	}		status = tmp->AddPacket(packet);	if (status < 0)		return status;	if (!tmp->hassentnewdata)	{		tmp->hassentnewdata = true;		if (!tmp->isaCSRC)			numsenders++;	}	return 0;}int RTPSources::ProcessSRInfo(RTPuint32 src,RTPuint32 ntplsw,RTPuint32 ntpmsw,RTPuint32 rtptimestamp,RTPuint32 packetcount,RTPuint32 bytecount,unsigned long ip,int port,double localtsunit){	RTPSourceData *tmp;	bool created,collis;	if (!initialized)		return ERR_RTP_SOURCESNOTINITALIZED;		cursource = NULL;	curtablepos = RTP_SOURCETABLE_HASHSIZE;	tmp = RetrieveOrCreate(src,localtsunit,&created);	if (tmp == NULL)		return ERR_RTP_OUTOFMEM;	if (created)	{		tmp->ip = ip;		tmp->rtcpport = port;		if (contribsources->DoesCSRCExist(tmp->ssrc))			tmp->isaCSRC = true;		if (handlers->handlers[RTP_EXCEPTION_NEWSOURCE].handler != NULL)			CallNewSourceHandler(tmp->ssrc);	}	else // src entry already existed	{		collis = false;		if (tmp->ip != ip)			collis = true;		else		{			if (tmp->rtcpport < 0)	// first rtcppacket from source				tmp->rtcpport = port;			else  if (tmp->rtcpport != port)				collis = true;		}		if (collis)		{			// ssrc collision, ignore this packet			if (handlers->handlers[RTP_EXCEPTION_SSRCCOLLISION].handler != NULL)				CallSSRCCollisionHandler(tmp->ssrc,ip,false,port);			return 0;		}	}	tmp->sr.bytecount = bytecount;	tmp->sr.ntplsw = ntplsw;	tmp->sr.ntpmsw = ntpmsw;	tmp->sr.packetcount = packetcount;	tmp->sr.rtptimestamp = rtptimestamp;	tmp->sr.srreceived = true;	tmp->sr.srtime = rtpconn->GetRTCPReceiveTime();	tmp->stats.lastmsgtime = tmp->sr.srtime.tv_sec;	return 0;}int RTPSources::ProcessSDESInfo(RTPuint32 src,int sdestype,unsigned char *sdesdata,int len,unsigned long ip,int port,double localtsunit){	RTPSourceData *tmp;	bool created,matching,collis;	int status,index,oldlen;	if (!initialized)		return ERR_RTP_SOURCESNOTINITALIZED;		cursource = NULL;	curtablepos = RTP_SOURCETABLE_HASHSIZE;	tmp = RetrieveOrCreate(src,localtsunit,&created);	if (tmp == NULL)		return ERR_RTP_OUTOFMEM;	if (created)	{		tmp->ip = ip;		tmp->rtcpport = port;		if (contribsources->DoesCSRCExist(tmp->ssrc))			tmp->isaCSRC = true;		if (handlers->handlers[RTP_EXCEPTION_NEWSOURCE].handler != NULL)			CallNewSourceHandler(tmp->ssrc);	}	else // src entry already existed	{		collis = false;		if (tmp->ip != ip)			collis = true;		else		{			if (tmp->rtcpport < 0)	// first rtcppacket from source				tmp->rtcpport = port;			else  if (tmp->rtcpport != port)				collis = true;		}		if (collis)		{			// ssrc collision, ignore this packet			if (handlers->handlers[RTP_EXCEPTION_SSRCCOLLISION].handler != NULL)				CallSSRCCollisionHandler(tmp->ssrc,ip,false,port);			return 0;		}	}	index = sdestype-1;	if (index >= 0 && index < RTP_NUM_SDES_INDICES)	{		if (index == TYPE_SDES_CNAME-1 && tmp->sdes.cnameset)		{			// already a cname set, check if the old one and the new one are the same			matching = false;			oldlen = tmp->sdes.sdesinfolen[index];			if (len == oldlen)			{				if (oldlen == 0)					matching = true;				else				{					if (memcmp(tmp->sdes.sdesinfo[index],sdesdata,len) == 0)						matching = true;				}			}			if (!matching) // this means that there is a ssrc collision			{				if (handlers->handlers[RTP_EXCEPTION_SSRCCOLLISION].handler != NULL)					CallSSRCCollisionHandler(tmp->ssrc,ip,false,port);				return 0;			}		}		else		{			status = tmp->sdes.SetSDES(index,(char *)sdesdata,len);			if (status < 0)				return status;		}	}	else // invalid sdestype	{		if (handlers->handlers[RTP_EXCEPTION_INVALIDSDESTYPE].handler != NULL)			CallInvalidSDESTypeHandler(tmp->ssrc,sdestype,sdesdata,len);	}	tmp->stats.lastmsgtime = time(NULL);	return 0;}int RTPSources::ProcessBYEMessage(RTPuint32 src,unsigned long ip,int port){	int index;	bool found,collis;	RTPSourceData *tmp,*tmpprev;	cursource = NULL;	curtablepos = RTP_SOURCETABLE_HASHSIZE;	tmpprev = NULL;	index = (int)(src%(unsigned long)RTP_SOURCETABLE_HASHSIZE);	if ((tmp = sourcetable[index]) == NULL) // not found		found = false;	else	{		found = false;		while (!found && tmp != NULL)		{			if (tmp->ssrc < src)			{				tmpprev = tmp;				tmp = tmp->next;			}			else				found = true;		}		if (found)		{			if (tmp->ssrc != src)				found = false;		}	}		if (found)	{		collis = false;		if (tmp->ip != ip)			collis = true;		else if (tmp->rtcpport >= 0 && tmp->rtcpport != port)			collis = true;		if (!collis)		{			if (handlers->handlers[RTP_EXCEPTION_SSRCDEPARTURE].handler != NULL)				CallSSRCDepartureHandler(tmp->ssrc);			if (tmpprev == NULL)				sourcetable[index] = tmp->next;			else				tmpprev->next = tmp->next;			if (tmp->hassentnewdata && !tmp->isaCSRC)				numsenders--;			numsources--;			delete tmp;		}	}	return 0;}int RTPSources::ProcessRRInfo(RTPuint32 src,unsigned char fraclost,long packetslost,RTPuint32 exthighseqnum,RTPuint32 jitter,RTPuint32 lsr,RTPuint32 dlsr,unsigned long ip,int port,double localtsunit){	RTPSourceData *tmp;	bool created,collis;	unsigned long msw,lsw,ntp32;	unsigned long delay;			if (!initialized)		return ERR_RTP_SOURCESNOTINITALIZED;		cursource = NULL;	curtablepos = RTP_SOURCETABLE_HASHSIZE;	tmp = RetrieveOrCreate(src,localtsunit,&created);	if (tmp == NULL)		return ERR_RTP_OUTOFMEM;	if (created)	{		tmp->ip = ip;		tmp->rtcpport = port;		if (contribsources->DoesCSRCExist(tmp->ssrc))			tmp->isaCSRC = true;		if (handlers->handlers[RTP_EXCEPTION_NEWSOURCE].handler != NULL)			CallNewSourceHandler(tmp->ssrc);	}	else // src entry already existed	{		collis = false;		if (tmp->ip != ip)			collis = true;		else		{			if (tmp->rtcpport < 0)	// first rtcppacket from source				tmp->rtcpport = port;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人国产一区二区三区精品| 91成人免费网站| 99久久免费视频.com| 欧美日韩久久一区二区| 日本一区二区三区四区| 亚洲国产欧美一区二区三区丁香婷| 免费欧美高清视频| 在线观看欧美日本| 国产三级一区二区| 麻豆精品国产91久久久久久| 91蜜桃视频在线| 国产欧美精品区一区二区三区| 性做久久久久久久免费看| 国产91清纯白嫩初高中在线观看| 9191成人精品久久| 亚洲一区二区三区四区在线免费观看 | 91精品国产色综合久久不卡电影 | 久久综合色婷婷| 日韩不卡免费视频| 欧美在线观看18| 亚洲精品欧美激情| 91在线观看成人| 国产精品久久久久久久久晋中 | caoporen国产精品视频| 欧美成人猛片aaaaaaa| 视频一区视频二区在线观看| 欧美亚洲免费在线一区| 亚洲香肠在线观看| 欧美视频在线一区| 亚洲第一av色| 欧美精品高清视频| 日韩精品一二三区| 欧美一级久久久久久久大片| 无吗不卡中文字幕| 91精品国产综合久久蜜臀| 午夜精品一区二区三区三上悠亚| 欧美亚洲国产一区二区三区va| 亚洲一区二区四区蜜桃| 欧美性xxxxxxxx| 天堂资源在线中文精品| 欧美日韩二区三区| 欧美96一区二区免费视频| 欧美精品一区二区在线播放| 国产一区二区不卡| 欧美国产欧美综合| 99r精品视频| 亚洲午夜精品网| 日韩午夜中文字幕| 国产在线视频一区二区| 国产精品欧美极品| 欧美系列日韩一区| 青青草原综合久久大伊人精品优势| 欧美变态口味重另类| 成人一级视频在线观看| 亚洲激情成人在线| 日韩一级片在线观看| 粉嫩av一区二区三区| 亚洲电影在线免费观看| 精品国产凹凸成av人导航| 高清视频一区二区| 亚洲午夜电影在线| 国产亚洲一区二区三区四区 | 自拍偷拍国产精品| 欧美三级中文字幕| 韩国成人福利片在线播放| 亚洲三级电影网站| 69堂精品视频| 91丝袜美腿高跟国产极品老师| 亚洲一区二区三区四区在线观看 | 日本伊人色综合网| 国产欧美一区二区在线| 欧美无人高清视频在线观看| 国产精品中文字幕一区二区三区| 成人免费在线视频| 日韩欧美中文字幕公布| 成人国产精品免费观看动漫| 日韩精彩视频在线观看| 国产精品家庭影院| 日韩欧美电影在线| 在线欧美日韩国产| 国产一区不卡在线| 视频一区二区国产| 亚洲三级电影网站| 国产亚洲短视频| 日韩一区二区三区三四区视频在线观看| 成人国产精品免费| 韩国在线一区二区| 亚洲二区在线视频| 亚洲男人的天堂在线aⅴ视频| 精品国产乱码久久久久久夜甘婷婷 | 欧美色倩网站大全免费| 国产成人亚洲综合色影视| 香蕉成人啪国产精品视频综合网| 国产精品免费久久久久| 日韩欧美国产wwwww| 欧美精品日韩综合在线| 色欧美乱欧美15图片| 国产成人在线看| 精品一区二区三区影院在线午夜 | 久久99热99| 午夜日韩在线观看| 一个色综合网站| 亚洲欧美电影院| 自拍偷拍亚洲综合| 中文字幕中文字幕在线一区| 久久久久久免费毛片精品| 日韩一区二区精品在线观看| 欧美精品第一页| 欧美日精品一区视频| 欧美午夜电影网| 欧美日韩在线综合| 欧美日韩国产大片| 欧美日韩精品免费| 欧美日韩一区二区在线观看视频| 欧美午夜影院一区| 欧美日韩中字一区| 制服.丝袜.亚洲.中文.综合| 欧美日韩激情在线| 7777精品伊人久久久大香线蕉的 | 欧美激情在线一区二区| 中文成人av在线| 国产精品国产a级| 亚洲精品ww久久久久久p站 | 国产精品美女一区二区三区| 国产婷婷一区二区| 中文字幕不卡三区| 一区二区三区在线免费观看| 亚洲国产日产av| 免费日本视频一区| 国产精品66部| 成人aaaa免费全部观看| 9l国产精品久久久久麻豆| 91一区二区在线观看| 欧美性做爰猛烈叫床潮| 欧美日韩在线播放三区四区| 日韩欧美黄色影院| 欧美韩日一区二区三区| 亚洲精品网站在线观看| 午夜精品久久久久影视| 精品无码三级在线观看视频| 国产一区二区三区在线观看精品| 成人精品视频一区二区三区| 在线亚洲精品福利网址导航| 欧美巨大另类极品videosbest | 中文字幕亚洲不卡| 亚洲一区自拍偷拍| 韩国欧美国产1区| 91论坛在线播放| 日韩欧美一二区| 中文字幕一区二区三| 亚洲18色成人| 国产a视频精品免费观看| 在线观看亚洲一区| 精品国内片67194| 亚洲乱码日产精品bd| 美女www一区二区| 91免费精品国自产拍在线不卡| 在线播放欧美女士性生活| 久久久久久毛片| 午夜一区二区三区在线观看| 国产精品99精品久久免费| 欧美唯美清纯偷拍| 亚洲国产激情av| 日韩影院免费视频| 93久久精品日日躁夜夜躁欧美| 欧美一区二区三区日韩视频| 国产精品夫妻自拍| 精品一二三四在线| 欧美日韩一本到| 国产精品久久夜| 免费人成网站在线观看欧美高清| 91免费在线看| 国产欧美精品一区aⅴ影院| 日本不卡高清视频| 欧美在线观看你懂的| 国产精品成人免费| 懂色一区二区三区免费观看| 欧美一区二区三区在线电影| 亚洲精品国产视频| 成人午夜免费av| 2020国产精品久久精品美国| 午夜成人在线视频| 欧美色爱综合网| 国产精品久久久久久久久久久免费看 | 国产原创一区二区三区| 欧美群妇大交群中文字幕| 国产精品乱码人人做人人爱| 精品一二三四在线| 欧美一区二区三区在线电影| 偷拍自拍另类欧美| 欧美日韩视频在线观看一区二区三区| 国产精品网站在线| 国产白丝网站精品污在线入口| 欧美美女直播网站| 亚洲6080在线| 91精品国产aⅴ一区二区| 亚洲国产综合色| 欧美日本一区二区| 视频在线在亚洲| 欧美精品第1页|