亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
亚洲影视在线播放| 国产精品美女www爽爽爽| |精品福利一区二区三区| 狠狠v欧美v日韩v亚洲ⅴ| 3751色影院一区二区三区| 中文字幕av资源一区| 蜜桃久久久久久| 91精品国产综合久久久久久 | 91精品国产欧美日韩| 夜夜夜精品看看| 777亚洲妇女| 日本中文一区二区三区| 91在线小视频| 亚洲在线免费播放| 国产精品资源网站| 国产精品你懂的在线| 九九视频精品免费| 久久久一区二区| 成人app在线观看| 热久久免费视频| www国产成人| 一本一道久久a久久精品 | 久久色.com| 欧美日韩国产综合视频在线观看| 日韩高清国产一区在线| 精品毛片乱码1区2区3区| 91视频国产观看| 精品一区二区免费在线观看| 国产精品第五页| www成人在线观看| 日韩三级av在线播放| 欧亚一区二区三区| 国产高清亚洲一区| 另类小说色综合网站| 亚洲一区电影777| 亚洲福利视频导航| 亚洲电影第三页| 亚洲色图欧美在线| 国产欧美精品一区aⅴ影院| 在线观看91精品国产入口| 国产一区二区三区免费在线观看 | 日韩三区在线观看| 欧美日本乱大交xxxxx| 国产一区二区三区国产| 免费成人在线播放| 日本女优在线视频一区二区| 午夜精品久久一牛影视| 日韩精品免费视频人成| 亚洲国产精品久久久久婷婷884| 精品免费一区二区三区| 久久久久久久久一| 国产清纯美女被跳蛋高潮一区二区久久w | 亚洲在线中文字幕| 激情综合五月天| 国产成a人无v码亚洲福利| 国产黄人亚洲片| 一本大道久久精品懂色aⅴ| 91啪亚洲精品| 久久人人超碰精品| 一区二区三区四区在线播放| 亚洲乱码一区二区三区在线观看| 亚洲一区二区三区激情| 亚洲精品美腿丝袜| 亚洲国产视频网站| 亚洲视频一二三区| 久久精品国产精品亚洲综合| 大白屁股一区二区视频| 91尤物视频在线观看| 91福利视频久久久久| 欧美日韩在线不卡| 日本一区二区在线不卡| 亚洲成人免费视频| 波波电影院一区二区三区| 欧美高清一级片在线| 国产精品丝袜黑色高跟| 日韩av电影免费观看高清完整版| 99精品视频在线观看| 精品成人一区二区| 日韩中文字幕亚洲一区二区va在线 | 成人国产电影网| 久久久久久亚洲综合| 国产精品一二三在| 精品国产乱码久久久久久免费| 亚洲色图都市小说| 91黄色激情网站| 国产精品欧美经典| 成人黄色a**站在线观看| 国产日韩精品视频一区| 最新日韩在线视频| 亚洲人亚洲人成电影网站色| 91香蕉视频黄| 日日欢夜夜爽一区| 久久嫩草精品久久久久| 国产一区亚洲一区| 中文字幕免费不卡在线| 色香色香欲天天天影视综合网| 国产精品美女一区二区| 欧美怡红院视频| 人禽交欧美网站| 国产精品欧美一级免费| 色国产精品一区在线观看| 日韩专区欧美专区| 欧美成人三级在线| 在线亚洲人成电影网站色www| 亚洲一二三区在线观看| 日韩一区二区三区在线观看| 免费人成在线不卡| 亚洲精品视频在线看| 日韩亚洲欧美在线观看| 国产一区二区成人久久免费影院| 精品在线观看免费| 亚洲成人激情社区| 欧美国产视频在线| 欧美日韩一区二区在线观看 | 粉嫩aⅴ一区二区三区四区 | 中文字幕一区日韩精品欧美| 精品久久一二三区| 欧美一区二区美女| 7777精品伊人久久久大香线蕉最新版| 亚洲图片欧美一区| 日韩一区中文字幕| 亚洲人成精品久久久久| 精品成人私密视频| 欧美精选一区二区| 在线视频一区二区免费| 91国产免费看| 国产精品三级av在线播放| 久久久99久久| 欧美丰满高潮xxxx喷水动漫| 日本丶国产丶欧美色综合| 91色在线porny| 91年精品国产| aaa欧美色吧激情视频| eeuss国产一区二区三区| 99re这里只有精品首页| 欧美天天综合网| 日韩欧美中文字幕制服| 精品国产精品网麻豆系列 | 黄色资源网久久资源365| 久久99热国产| 99久精品国产| 欧美一级高清片| 国产精品乱子久久久久| 亚瑟在线精品视频| 国内外精品视频| 成人免费视频一区| 欧美在线啊v一区| 日韩欧美中文字幕公布| 国产免费成人在线视频| 樱桃视频在线观看一区| 亚洲成人精品在线观看| 韩国一区二区视频| 国产精品一区二区在线观看不卡 | 91精品国产全国免费观看| 久久婷婷国产综合国色天香| 夜夜嗨av一区二区三区四季av | 国产精品伦一区| 国产精品一区免费视频| 91精品国产全国免费观看| 亚洲永久精品大片| 欧美在线观看你懂的| 国产精品三级久久久久三级| 亚洲国产视频a| 欧美精品v日韩精品v韩国精品v| 17c精品麻豆一区二区免费| 成人国产免费视频| 日本一区二区不卡视频| 国产高清精品久久久久| 久久亚洲精精品中文字幕早川悠里| 亚洲蜜桃精久久久久久久| 99久久精品情趣| 亚洲人妖av一区二区| 高清beeg欧美| 久久影院电视剧免费观看| 看电视剧不卡顿的网站| 欧美哺乳videos| av亚洲精华国产精华| 亚洲欧美综合在线精品| 懂色av中文一区二区三区| 一区二区三区不卡在线观看| 色狠狠av一区二区三区| 亚洲一区二区在线免费观看视频 | www国产成人免费观看视频 深夜成人网 | 日韩高清一区二区| 欧美日韩国产电影| 亚洲一区二区三区免费视频| 日韩一区二区视频| 国产精品一区二区免费不卡| 国产亚洲成av人在线观看导航| 蜜臀av在线播放一区二区三区 | 91麻豆国产香蕉久久精品| 自拍偷拍亚洲激情| 精品国产一区二区在线观看| 91小视频在线免费看| 日韩伦理电影网| 26uuu欧美日本| 欧美一区二区三区在| 一本大道久久a久久综合婷婷| 日韩精品一二区| 中文在线一区二区|