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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rtprtcpmodule.cpp

?? 利用rtp庫實(shí)現(xiàn)實(shí)時(shí)語音傳送
?? CPP
?? 第 1 頁 / 共 2 頁
字號(hào):
/*  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 "rtprtcpmodule.h"#include "rtptimeutil.h"#include "rtpdefines.h"#include "rtpconnection.h"#include "rtpsources.h"#include "rtpcontributingsources.h"#include "rtplocalinfo.h"#include "rtprandom.h"#include "rtpsourcedescription.h"#include "rtpsourcedata.h"#include "rtphandlers.h"#include <string.h>/* Class implementation */RTPRTCPModule::RTPRTCPModule(){	initialized = false;	rtpconn = NULL;	sources = NULL;	contribsrcs = NULL;	localinf = NULL;	handlers = NULL;}RTPRTCPModule::~RTPRTCPModule(){}void RTPRTCPModule::Initialize(){	sessbandwidth = RTP_DEFAULT_SESSIONBANDWIDTH;	rtcpfrag = RTP_DEFAULT_RTCPFRAGMENT;	rtcpbandwidth = sessbandwidth*rtcpfrag;	prevrtcptime = time(NULL);	CalcNextRTCPTime();	sentdatasincelastSR = false;		// assume that source is a sender, that there's at least 1 receiver and	// that the average CNAME length is 30	avgrtcpsize = (double)(IP_UDP_HEADERSIZE+sizeof(RTCPHeader)+sizeof(SSRCPrefix)						   +sizeof(RTCPSenderInfo)+sizeof(RTCPReportBlock)						   +sizeof(RTCPHeader)+sizeof(SSRCPrefix)+sizeof(SDESPrefix)						   +30);	numrtcpsent = 0;	rtcpcount = 0;}void RTPRTCPModule::CalcNextRTCPTime(){	double localrtcpbandwidth;	double delay,factor;	unsigned long delay2;		if (sources == NULL)		localrtcpbandwidth = rtcpbandwidth;	else		localrtcpbandwidth = rtcpbandwidth/((double)sources->GetNumberOfParticipants()+1.0); // +1 for this session	delay = (avgrtcpsize*8)/localrtcpbandwidth;	if (delay < RTP_MINIMUM_RTCP_DELAY) // minimum delay of 5 seconds		delay = RTP_MINIMUM_RTCP_DELAY;	factor = (((double)RTPRandom::RandomByte())/256.0)+0.5; // factor from interval [0.5,1.5[	delay *= factor;	delay2 = (unsigned long)(delay+0.5);	nextrtcptime = prevrtcptime+delay2;}int RTPRTCPModule::RTCPRoutine(unsigned long curtime){	int bytessent;	bool allsdesinfo;	if (!initialized)		return ERR_RTP_RTCPMODULENOTINITIALIZED;	/* Recalc delay requirements */	prevrtcptime = curtime;	CalcNextRTCPTime();	/* Check if we have to send just the CNAME or all required SDES fields */		if (rtcpcount >= RTP_SDESINFO_INTERVAL)	{		allsdesinfo = true;		rtcpcount = 0;	}	else	{		rtcpcount++;		allsdesinfo = false;	}	/* Build and send the packets */	bytessent = BuildAndSendPackets(false,allsdesinfo);	sources->UpdateAllSources();	if (bytessent < 0)		return bytessent;	/* Recalculate average rtcpsize */	if (numrtcpsent < 1000000) // this should be enough loops to make a good average	{		numrtcpsent++;		avgrtcpsize = (((double)(numrtcpsent-1))*avgrtcpsize+((double)bytessent))/((double)numrtcpsent);	}	sentdatasincelastSR = false;	return 0;}int RTPRTCPModule::SendBYE(){	int bytessent;	if (!initialized)		return ERR_RTP_RTCPMODULENOTINITIALIZED;	bytessent = BuildAndSendPackets(true,false);	sources->UpdateAllSources();	if (bytessent < 0)		return bytessent;	return 0;	}int RTPRTCPModule::BuildAndSendPackets(bool bye,bool allsdesinfo){	int status;		maxpacksize = localinf->maxpacksize;	sendcount = 0;	packetoffset = 0;		if ((status = ProcessReports()) < 0)		return status;	if ((status = ProcessSDESInfo(allsdesinfo)) < 0)		return status;	if ((status = ProcessAPPData()) < 0)		return status;	if (bye)	{		if ((status = ProcessBYEMessage()) < 0)			return status;	}	if (packetoffset > 0) // some info still has to be sent	{		if ((status = SendPacketData()) < 0)			return status;	}	return sendcount;}int RTPRTCPModule::ProcessReports(){	int status;	bool firsttime;	bool done,neednewheader,mustsetfields;	struct timeval tv;	int RRsourcesprocessed;	int RRnumsources;	int blockcount;	int length;	RTCPHeader *hdr;	SSRCPrefix *ssrcpref;	RTCPSenderInfo *sendinf;	RTPSourceData *srcdat;		hdr = NULL;	RRsourcesprocessed = 0;	RRnumsources = sources->GetNumberOfSenders();	sources->GotoFirstSender();	firsttime = true;	done = false;	neednewheader = true;	length = 0;	blockcount = 0;	mustsetfields = false;	while (!done)	{		if (firsttime && sentdatasincelastSR) // SR info		{			// here, we can be sure that we've got enough space to			// put the header in, since we're at the start of the packet			firsttime = false;						hdr = (RTCPHeader *)packetbuffer;			hdr->version = RTP_VERSION;			hdr->padding = 0;			hdr->packettype = TYPE_RTCP_SR;			blockcount = 0;			length = ((sizeof(RTCPHeader)+sizeof(SSRCPrefix)+sizeof(RTCPSenderInfo))/sizeof(RTPuint32))-1;						ssrcpref = (SSRCPrefix *)(packetbuffer+sizeof(RTCPHeader));			ssrcpref->ssrc = contribsrcs->localinfo.src; // already in network byte order						sendinf = (RTCPSenderInfo *)(packetbuffer+sizeof(RTCPHeader)+sizeof(SSRCPrefix));			gettimeofday(&tv,NULL);			getntptime(&tv,&(sendinf->NTPlsw),&(sendinf->NTPmsw));			getrtptimestamp(&tv,&(localinf->tsoffsettime),localinf->timestampoffset,localinf->tsunit,&(sendinf->rtptimestamp));			sendinf->senderoctetcount = htonl(localinf->octetcount);			sendinf->senderpacketcount = htonl(localinf->packetcount);						packetoffset = sizeof(RTCPHeader)+sizeof(SSRCPrefix)+sizeof(RTCPSenderInfo);			neednewheader = false;			mustsetfields = true;		}		else if (RRsourcesprocessed >= RRnumsources)			done = true;		else // RR info		{			if (neednewheader)			{				// check if the header and ssrc identifier will fit				if ((int)(packetoffset + sizeof(RTCPHeader) + sizeof(SSRCPrefix)				     + sizeof(RTCPReportBlock)) > maxpacksize)				{					hdr->length = htons(length);					hdr->blockcount = blockcount;					if ((status = SendPacketData()) < 0)						return status;					mustsetfields = false;				}				else				{					hdr = (RTCPHeader *)(packetbuffer+packetoffset);					hdr->version = RTP_VERSION;					hdr->padding = 0;					hdr->packettype = TYPE_RTCP_RR;					blockcount = 0;					length = ((sizeof(RTCPHeader)+sizeof(SSRCPrefix))/sizeof(RTPuint32))-1;										ssrcpref = (SSRCPrefix *)(packetbuffer+packetoffset+sizeof(RTCPHeader));					ssrcpref->ssrc = contribsrcs->localinfo.src; // already in network byte order										neednewheader = false;					packetoffset += sizeof(RTCPHeader)+sizeof(SSRCPrefix);					mustsetfields = true;				}			}			else // add a reception report block, if possible			{				if ((int)(packetoffset + sizeof(RTCPReportBlock)) > maxpacksize)				{					hdr->length = htons(length);					hdr->blockcount = blockcount;					if ((status = SendPacketData()) < 0)						return status;					neednewheader = true;					mustsetfields = false;				}				else				{					srcdat = sources->GetSourceInfo();					GetRRParams(srcdat,(RTCPReportBlock *)(packetbuffer+packetoffset));					blockcount++;					length += sizeof(RTCPReportBlock)/sizeof(RTPuint32);					packetoffset += sizeof(RTCPReportBlock);					RRsourcesprocessed++;					sources->GotoNextSender();					if (blockcount == 31) // max number of reports in one RTCP block					{						hdr->blockcount = 31;						hdr->length = htons(length);						neednewheader = true;						mustsetfields = false;					}					else						mustsetfields = true;				}			}		}	}	if (mustsetfields)	{		hdr->length = htons(length);		hdr->blockcount = blockcount;	}		return 0;}int RTPRTCPModule::ProcessSDESInfo(bool allsdesinfo){	bool needsrchdr,needrtcphdr;	bool increment,haveheader;	int status,sdespos;	int sdeslen,add,mod;	int blockcount,length;	RTCPHeader *hdr;	SSRCPrefix *ssrcpref;	RTPSourceDescription *cursrc;	SDESPrefix *sdespref;	hdr = NULL;	cursrc = &(contribsrcs->localinfo);		sdespos = 0;	needsrchdr = true;	needrtcphdr = true;	length = 0;	blockcount = 0;	haveheader = false;	while (cursrc != NULL)	{		increment = true;		if ((sdespos == (TYPE_SDES_CNAME-1)) || (allsdesinfo && contribsrcs->enabledinfo[sdespos]))		{			add = 0;			if (packetoffset == 0)				add = sizeof(RTCPHeader)+sizeof(SSRCPrefix);			if (needrtcphdr)				add += sizeof(RTCPHeader);			if (needsrchdr)				add += sizeof(SSRCPrefix);			add += sizeof(SDESPrefix);			sdeslen = cursrc->sdesinfolen[sdespos];			if ((packetoffset + add + sdeslen) > (maxpacksize-4))			{				increment = false;				if (haveheader)				{					packetbuffer[packetoffset++] = 0; // end of chunk					length++;					// fill till 32 bit boundary					if ((mod = (length%sizeof(RTPuint32))) != 0)					{						while (mod != sizeof(RTPuint32))						{							packetbuffer[packetoffset++] = 0;							length++;							mod++;						}					}					hdr->length = htons(length/sizeof(RTPuint32)-1);					hdr->blockcount = blockcount;				}				if ((status = SendPacketData()) < 0)					return status;				needrtcphdr = true;				needsrchdr = true;				haveheader = false;			}			else // info fits			{				if (packetoffset == 0)				{

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本欧美一区二区| 麻豆精品视频在线观看视频| 精品视频在线免费看| 美女看a上一区| 中文子幕无线码一区tr| 欧美中文字幕一区二区三区亚洲| 日本特黄久久久高潮| 国产精品三级av| 7777精品伊人久久久大香线蕉完整版 | 国产人成亚洲第一网站在线播放 | 亚洲国产成人av| 久久久www成人免费无遮挡大片| 国产精品一区二区久久精品爱涩 | 蜜臀av性久久久久蜜臀aⅴ| 欧美国产日本视频| 在线成人av网站| 99视频国产精品| 视频一区欧美精品| 亚洲视频一二区| 日韩视频国产视频| 91国偷自产一区二区开放时间| 日本成人在线视频网站| 亚洲欧美色一区| 日韩三级伦理片妻子的秘密按摩| 色婷婷av久久久久久久| 国产成人在线影院 | 理论片日本一区| 国产视频亚洲色图| 午夜精品影院在线观看| 中文字幕一区二区三区蜜月| www久久精品| 91精品综合久久久久久| 91麻豆免费视频| 成人免费的视频| 秋霞午夜av一区二区三区| 一区二区三区精密机械公司| 中文字幕av不卡| 久久久久久久久久久久久久久99 | 豆国产96在线|亚洲| 蜜桃av一区二区| 亚洲欧美日本在线| 国产精品丝袜黑色高跟| 26uuu色噜噜精品一区二区| 欧美性猛片aaaaaaa做受| 成人免费视频视频| 国产999精品久久久久久绿帽| 久久99精品久久久久| 日韩电影免费一区| 日韩精品久久久久久| 亚洲观看高清完整版在线观看| 国产精品国产精品国产专区不片| 国产欧美日韩综合精品一区二区| 欧美成人官网二区| 日韩视频免费直播| 欧美一区二区福利视频| 欧美日韩国产首页在线观看| 一本到一区二区三区| 91传媒视频在线播放| 正在播放亚洲一区| 国产亚洲短视频| 亚洲女同女同女同女同女同69| 一级做a爱片久久| 日韩不卡一二三区| 韩国毛片一区二区三区| 成人一区二区视频| 欧美三级电影在线看| 欧美成人乱码一区二区三区| 国产精品毛片久久久久久久| 亚洲国产日韩一区二区| 紧缚奴在线一区二区三区| 成人毛片视频在线观看| 欧美日韩精品欧美日韩精品一综合| 欧美一区二区三区在线看| 国产视频一区在线观看| 亚洲在线视频免费观看| 精品亚洲成a人| 色噜噜偷拍精品综合在线| 91精品欧美久久久久久动漫| 久久精品免费观看| 成人av资源网站| 欧美猛男男办公室激情| 亚洲国产精品国自产拍av| 一区二区三区欧美在线观看| 国产在线视频一区二区| 色域天天综合网| 精品国产网站在线观看| 亚洲乱码日产精品bd| 美国毛片一区二区| 色域天天综合网| 久久精品亚洲麻豆av一区二区| 一区二区三区在线影院| 久久99久久精品| 在线观看一区二区视频| 国产亚洲精品精华液| 天堂av在线一区| 91浏览器在线视频| 国产亚洲一区二区在线观看| 亚洲大片免费看| 成人国产精品免费观看动漫| 91精品国产综合久久小美女| 亚洲人成网站色在线观看| 国产精品中文有码| 91精品在线免费| 亚洲激情第一区| 成人激情小说网站| 精品入口麻豆88视频| 午夜精品久久一牛影视| 色综合久久综合| 亚洲欧洲精品成人久久奇米网| 国内精品伊人久久久久av一坑| 欧美精品一级二级三级| 亚洲视频在线观看三级| 国产成人亚洲精品狼色在线| 日韩一区二区三区四区五区六区| 一区二区三区在线视频观看58| 粉嫩欧美一区二区三区高清影视| 欧美疯狂做受xxxx富婆| 亚洲精品乱码久久久久久| eeuss鲁一区二区三区| 国产日本欧美一区二区| 国产一区啦啦啦在线观看| 日韩免费观看2025年上映的电影| 亚洲综合在线五月| 91麻豆国产在线观看| 国产精品久久久久久久久久免费看 | 成人app在线观看| 欧美国产日本韩| 成人精品一区二区三区四区| 日本一区二区久久| 不卡的av中国片| 国产精品无码永久免费888| 国产精品系列在线播放| 久久久久久日产精品| 国产乱人伦偷精品视频不卡| 久久久久综合网| 成人av高清在线| voyeur盗摄精品| 亚洲嫩草精品久久| 在线视频欧美精品| 亚洲大片精品永久免费| 欧美日韩国产高清一区二区三区 | 色哟哟在线观看一区二区三区| 中文字幕中文在线不卡住| www.亚洲精品| 一区二区三区**美女毛片| 91久久国产最好的精华液| 亚洲国产欧美另类丝袜| 欧美日韩免费电影| 日本中文字幕一区二区视频| 日韩片之四级片| 国产在线精品免费av| 国产女同性恋一区二区| 91片在线免费观看| 亚洲成人动漫精品| 日韩欧美资源站| 国产精品 欧美精品| 国产精品久久久久国产精品日日| 91日韩一区二区三区| 亚洲一区二区中文在线| 91精品国产综合久久蜜臀| 韩国精品主播一区二区在线观看 | 99久久婷婷国产综合精品电影| 亚洲视频在线观看一区| 欧美精品1区2区3区| 国产精品一区二区在线播放| 亚洲日本乱码在线观看| 欧美理论在线播放| 韩国成人精品a∨在线观看| 国产69精品久久久久毛片| 亚洲精品国产无套在线观| 欧美理论片在线| 国内精品自线一区二区三区视频| 亚洲日本丝袜连裤袜办公室| 91精品国产综合久久精品图片| 国产乱码精品一区二区三区av| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆 | 久久综合九色综合欧美就去吻| 成人av动漫网站| 免费精品99久久国产综合精品| 国产欧美精品在线观看| 欧美性色黄大片手机版| 国产精品99久久久久久久vr| 亚洲一区二区三区三| 精品国产一区二区三区av性色| 91福利社在线观看| 国产美女久久久久| 亚洲综合久久久久| 久久精品一区二区三区不卡牛牛| 在线观看av不卡| 高清国产一区二区| 日韩1区2区日韩1区2区| 亚洲视频每日更新| 久久久美女毛片 | 国产精品乱人伦中文| 午夜精品久久久久| 欧美国产亚洲另类动漫| 欧美一区二区三区人| 91免费看片在线观看| 国产精品亚洲第一区在线暖暖韩国| 婷婷激情综合网|