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

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

?? rtpsourcedata.cpp

?? jrtp庫
?? CPP
字號:
/*  This file is a part of JRTPLIB  Copyright (c) 1999-2007 Jori Liesenborgs  Contact: jori.liesenborgs@gmail.com  This library was developed at the "Expertisecentrum Digitale Media"  (http://www.edm.uhasselt.be), a research center of the Hasselt University  (http://www.uhasselt.be). The library is based upon work done 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 "rtpsourcedata.h"#include "rtpdefines.h"#include "rtpaddress.h"#include "rtpmemorymanager.h"#if ! (defined(WIN32) || defined(_WIN32_WCE))	#include <netinet/in.h>#endif // WIN32#ifdef RTPDEBUG	#include <iostream>	#include <string>#endif // RTPDEBUG#include "rtpdebug.h"#define ACCEPTPACKETCODE									\		*accept = true;									\												\		sentdata = true;								\		packetsreceived++;								\		numnewpackets++;								\												\		if (pack->GetExtendedSequenceNumber() == 0)					\		{										\			baseseqnr = 0x0000FFFF;							\			numcycles = 0x00010000;							\		}										\		else										\			baseseqnr = pack->GetExtendedSequenceNumber() - 1;			\												\		exthighseqnr = baseseqnr + 1;							\		prevpacktime = receivetime;							\		prevexthighseqnr = baseseqnr;							\		savedextseqnr = baseseqnr;							\												\		pack->SetExtendedSequenceNumber(exthighseqnr);					\												\		prevtimestamp = pack->GetTimestamp();						\		lastmsgtime = prevpacktime;							\		if (!ownpacket) /* for own packet, this value is set on an outgoing packet */	\			lastrtptime = prevpacktime;void RTPSourceStats::ProcessPacket(RTPPacket *pack,const RTPTime &receivetime,double tsunit,                                   bool ownpacket,bool *accept,bool applyprobation,bool *onprobation){	// Note that the sequence number in the RTP packet is still just the	// 16 bit number contained in the RTP header	*onprobation = false;		if (!sentdata) // no valid packets received yet	{#ifdef RTP_SUPPORT_PROBATION		if (applyprobation)		{			bool acceptpack = false;			if (probation)  			{					uint16_t pseq;				uint32_t pseq2;					pseq = prevseqnr;				pseq++;				pseq2 = (uint32_t)pseq;				if (pseq2 == pack->GetExtendedSequenceNumber()) // ok, its the next expected packet				{					prevseqnr = (uint16_t)pack->GetExtendedSequenceNumber();					probation--;						if (probation == 0) // probation over						acceptpack = true;					else						*onprobation = true;				}				else // not next packet				{					probation = RTP_PROBATIONCOUNT;					prevseqnr = (uint16_t)pack->GetExtendedSequenceNumber();					*onprobation = true;				}			}			else // first packet received with this SSRC ID, start probation			{				probation = RTP_PROBATIONCOUNT;				prevseqnr = (uint16_t)pack->GetExtendedSequenceNumber();					*onprobation = true;			}				if (acceptpack)			{				ACCEPTPACKETCODE			}			else			{				*accept = false;				lastmsgtime = receivetime;			}		}		else // No probation		{			ACCEPTPACKETCODE		}#else // No compiled-in probation support		ACCEPTPACKETCODE#endif // RTP_SUPPORT_PROBATION	}	else // already got packets	{		uint16_t maxseq16;		uint32_t extseqnr;		// Adjust max extended sequence number and set extende seq nr of packet		*accept = true;		packetsreceived++;		numnewpackets++;		maxseq16 = (uint16_t)(exthighseqnr&0x0000FFFF);		if (pack->GetExtendedSequenceNumber() >= maxseq16)		{			extseqnr = numcycles+pack->GetExtendedSequenceNumber();			exthighseqnr = extseqnr;		}		else		{			uint16_t dif1,dif2;			dif1 = ((uint16_t)pack->GetExtendedSequenceNumber());			dif1 -= maxseq16;			dif2 = maxseq16;			dif2 -= ((uint16_t)pack->GetExtendedSequenceNumber());			if (dif1 < dif2)			{				numcycles += 0x00010000;				extseqnr = numcycles+pack->GetExtendedSequenceNumber();				exthighseqnr = extseqnr;			}			else				extseqnr = numcycles+pack->GetExtendedSequenceNumber();		}		pack->SetExtendedSequenceNumber(extseqnr);		// Calculate jitter		if (tsunit > 0)		{			RTPTime curtime = receivetime;			double diffts1,diffts2,diff;			curtime -= prevpacktime;			diffts1 = curtime.GetDouble()/tsunit;				diffts2 = (double)pack->GetTimestamp() - (double)prevtimestamp;			diff = diffts1 - diffts2;			if (diff < 0)				diff = -diff;			diff -= djitter;			diff /= 16.0;			djitter += diff;			jitter = (uint32_t)djitter;		}		else		{			djitter = 0;			jitter = 0;		}		prevpacktime = receivetime;		prevtimestamp = pack->GetTimestamp();		lastmsgtime = prevpacktime;		if (!ownpacket) // for own packet, this value is set on an outgoing packet			lastrtptime = prevpacktime;	}}RTPSourceData::RTPSourceData(uint32_t s, RTPMemoryManager *mgr) : RTPMemoryObject(mgr),SDESinf(mgr),byetime(0,0){	ssrc = s;	issender = false;	iscsrc = false;	timestampunit = -1;	receivedbye = false;	byereason = 0;	byereasonlen = 0;	rtpaddr = 0;	rtcpaddr = 0;	ownssrc = false;	validated = false;	processedinrtcp = false;				isrtpaddrset = false;	isrtcpaddrset = false;}RTPSourceData::~RTPSourceData(){	FlushPackets();	if (byereason)		RTPDeleteByteArray(byereason,GetMemoryManager());	if (rtpaddr)		RTPDelete(rtpaddr,GetMemoryManager());	if (rtcpaddr)		RTPDelete(rtcpaddr,GetMemoryManager());}double RTPSourceData::INF_GetEstimatedTimestampUnit() const{	if (!SRprevinf.HasInfo())		return -1.0;		RTPTime t1 = RTPTime(SRinf.GetNTPTimestamp());	RTPTime t2 = RTPTime(SRprevinf.GetNTPTimestamp());	if ((t1.GetSeconds() == 0 && t1.GetMicroSeconds() == 0) ||	    (t2.GetSeconds() == 0 && t2.GetMicroSeconds() == 0)) // one of the times couldn't be calculated		return -1.0;	if (t1 < t2)		return -1.0;	t1 -= t2; // get the time difference		uint32_t tsdiff = SRinf.GetRTPTimestamp()-SRprevinf.GetRTPTimestamp();		return (t1.GetDouble()/((double)tsdiff));}RTPTime RTPSourceData::INF_GetRoundtripTime() const{	if (!RRinf.HasInfo())		return RTPTime(0,0);	if (RRinf.GetDelaySinceLastSR() == 0 && RRinf.GetLastSRTimestamp() == 0)		return RTPTime(0,0);	RTPNTPTime recvtime = RRinf.GetReceiveTime().GetNTPTime();	uint32_t rtt = ((recvtime.GetMSW()&0xFFFF)<<16)|((recvtime.GetLSW()>>16)&0xFFFF);	rtt -= RRinf.GetLastSRTimestamp();	rtt -= RRinf.GetDelaySinceLastSR();	double drtt = (((double)rtt)/65536.0);	return RTPTime(drtt);}#ifdef RTPDEBUGvoid RTPSourceData::Dump(){	std::cout << "Source data for SSRC:     " << ssrc << std::endl;	std::cout << "    Active:               " << ((IsActive())?"Yes":"No") << std::endl;	std::cout << "    Sender:               " << ((issender)?"Yes":"No") << std::endl;	std::cout << "    CSRC:                 " << ((iscsrc)?"Yes":"No") << std::endl;	std::cout << "    Received bye:         " << ((receivedbye)?"Yes":"No") << std::endl;	std::cout << "    ProcessedInRTCP:      " << ((processedinrtcp)?"Yes":"No") << std::endl;	std::cout << "    Timestamp unit:       " << timestampunit << std::endl;	std::cout << "    RTP address:          ";	if (!isrtpaddrset)		std::cout << "Not set" << std::endl;	else	{		if (rtpaddr == 0)			std::cout << "Own session" << std::endl;		else			std::cout << rtpaddr->GetAddressString() << std::endl;	}	std::cout << "    RTCP address:         ";	if (!isrtcpaddrset)		std::cout << "Not set" << std::endl;	else	{		if (rtcpaddr == 0)			std::cout << "Own session" << std::endl;		else			std::cout << rtcpaddr->GetAddressString() << std::endl;	}	if (SRinf.HasInfo())	{		if (!SRprevinf.HasInfo())		{			std::cout << "    SR Info:" << std::endl;			std::cout << "        NTP timestamp:    " << SRinf.GetNTPTimestamp().GetMSW() << ":" << SRinf.GetNTPTimestamp().GetLSW() << std::endl;			std::cout << "        RTP timestamp:    " << SRinf.GetRTPTimestamp() << std::endl;			std::cout << "        Packet count:     " << SRinf.GetPacketCount() << std::endl;			std::cout << "        Octet count:      " << SRinf.GetByteCount() << std::endl;			std::cout << "        Receive time:     " << SRinf.GetReceiveTime().GetSeconds() << std::endl;		}			else		{			std::cout << "    SR Info:" << std::endl;			std::cout << "        NTP timestamp:    " << SRinf.GetNTPTimestamp().GetMSW() << ":" << SRinf.GetNTPTimestamp().GetLSW()				  << " (" << SRprevinf.GetNTPTimestamp().GetMSW() << ":" << SRprevinf.GetNTPTimestamp().GetLSW() << ")" << std::endl;			std::cout << "        RTP timestamp:    " << SRinf.GetRTPTimestamp()			          << " (" << SRprevinf.GetRTPTimestamp() << ")" << std::endl;			std::cout << "        Packet count:     " << SRinf.GetPacketCount()			          << " (" << SRprevinf.GetPacketCount() << ")" << std::endl;			std::cout << "        Octet count:      " << SRinf.GetByteCount() 			          << " (" << SRprevinf.GetByteCount() <<")" << std::endl;			std::cout << "        Receive time:     " << SRinf.GetReceiveTime().GetSeconds()			          << " (" << SRprevinf.GetReceiveTime().GetSeconds() << ")" << std::endl;		}	}	if (RRinf.HasInfo())	{		if (!RRprevinf.HasInfo())		{			std::cout << "    RR Info:" << std::endl;			std::cout << "        Fraction lost:    " << RRinf.GetFractionLost() << std::endl;			std::cout << "        Packets lost:     " << RRinf.GetPacketsLost() << std::endl;			std::cout << "        Ext.High.Seq:     " << RRinf.GetExtendedHighestSequenceNumber() << std::endl;			std::cout << "        Jitter:           " << RRinf.GetJitter() << std::endl;			std::cout << "        LSR:              " << RRinf.GetLastSRTimestamp() << std::endl;			std::cout << "        DLSR:             " << RRinf.GetDelaySinceLastSR() << std::endl;			std::cout << "        Receive time:     " << RRinf.GetReceiveTime().GetSeconds() << std::endl;		}		else		{			std::cout << "    RR Info:" << std::endl;			std::cout << "        Fraction lost:    " << RRinf.GetFractionLost() 				  << " (" << RRprevinf.GetFractionLost() << ")" << std::endl;			std::cout << "        Packets lost:     " << RRinf.GetPacketsLost() 			          << " (" << RRprevinf.GetPacketsLost() << ")" << std::endl;			std::cout << "        Ext.High.Seq:     " << RRinf.GetExtendedHighestSequenceNumber() 			          << " (" << RRprevinf.GetExtendedHighestSequenceNumber() << ")" << std::endl;			std::cout << "        Jitter:           " << RRinf.GetJitter() 			          << " (" << RRprevinf.GetJitter() << ")" << std::endl;			std::cout << "        LSR:              " << RRinf.GetLastSRTimestamp() 			          << " (" << RRprevinf.GetLastSRTimestamp() << ")" << std::endl;			std::cout << "        DLSR:             " << RRinf.GetDelaySinceLastSR() 			          << " (" << RRprevinf.GetDelaySinceLastSR() << ")" << std::endl;			std::cout << "        Receive time:     " << RRinf.GetReceiveTime().GetSeconds() 			          << " (" << RRprevinf.GetReceiveTime().GetSeconds() <<")" << std::endl;		}	}	std::cout << "    Stats:" << std::endl;	std::cout << "        Sent data:        " << ((stats.HasSentData())?"Yes":"No") << std::endl;	std::cout << "        Packets received: " << stats.GetNumPacketsReceived() << std::endl;	std::cout << "        Seq. base:        " << stats.GetBaseSequenceNumber() << std::endl;	std::cout << "        Ext.High.Seq:     " << stats.GetExtendedHighestSequenceNumber() << std::endl;	std::cout << "        Jitter:           " << stats.GetJitter() << std::endl;	std::cout << "        New packets:      " << stats.GetNumPacketsReceivedInInterval() << std::endl;		std::cout << "        Saved seq. nr.:   " << stats.GetSavedExtendedSequenceNumber() << std::endl;		std::cout << "        RTT:              " << INF_GetRoundtripTime().GetDouble() << " seconds" << std::endl;	if (INF_GetEstimatedTimestampUnit() > 0)		std::cout << "        Estimated:        " << (1.0/INF_GetEstimatedTimestampUnit()) << " samples per second" << std::endl;	std::cout << "    SDES Info:" << std::endl;	size_t len;	char str[1024];	uint8_t *val;		if ((val = SDESinf.GetCNAME(&len)) != 0)	{		memcpy(str,val,len);		str[len] = 0;		std::cout << "        CNAME:            " << std::string(str) << std::endl;	}	if ((val = SDESinf.GetName(&len)) != 0)	{		memcpy(str,val,len);		str[len] = 0;		std::cout << "        Name:             " << std::string(str) << std::endl;	}	if ((val = SDESinf.GetEMail(&len)) != 0)	{		memcpy(str,val,len);		str[len] = 0;		std::cout << "        EMail:            " << std::string(str) << std::endl;	}	if ((val = SDESinf.GetPhone(&len)) != 0)	{		memcpy(str,val,len);		str[len] = 0;		std::cout << "        phone:            " << std::string(str) << std::endl;	}	if ((val = SDESinf.GetLocation(&len)) != 0)	{		memcpy(str,val,len);		str[len] = 0;		std::cout << "        Location:         " << std::string(str) << std::endl;	}	if ((val = SDESinf.GetTool(&len)) != 0)	{		memcpy(str,val,len);		str[len] = 0;		std::cout << "        Tool:             " << std::string(str) << std::endl;	}		if ((val = SDESinf.GetNote(&len)) != 0)	{		memcpy(str,val,len);		str[len] = 0;		std::cout << "        Note:             " << std::string(str) << std::endl;	}#ifdef RTP_SUPPORT_SDESPRIV	SDESinf.GotoFirstPrivateValue();	uint8_t *pref;	size_t preflen;	while (SDESinf.GetNextPrivateValue(&pref,&preflen,&val,&len))	{		char prefstr[1024];		memcpy(prefstr,pref,preflen);		memcpy(str,val,len);		prefstr[preflen] = 0;		str[len] = 0;		std::cout << "        Private:          " << std::string(prefstr) << ":" << std::string(str) << std::endl;	}#endif // RTP_SUPPORT_SDESPRIV	if (byereason)	{		memcpy(str,byereason,byereasonlen);		str[byereasonlen] = 0;		std::cout << "    BYE Reason:           " << std::string(str) << std::endl;	}}#endif // RTPDEBUG

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产91露脸合集magnet| 亚洲妇熟xx妇色黄| 精品三级在线观看| 精品粉嫩超白一线天av| 中文乱码免费一区二区| 亚洲少妇中出一区| 亚洲在线免费播放| 午夜欧美在线一二页| 日韩精品电影在线| 成人午夜视频网站| 欧美四级电影在线观看| 日韩欧美一级二级| 亚洲女人的天堂| 石原莉奈在线亚洲二区| 高清免费成人av| 欧美丰满嫩嫩电影| 中文字幕一区二区三| 免费成人在线播放| 在线观看91视频| 中文字幕精品综合| www..com久久爱| 2020国产精品久久精品美国| 亚洲成人午夜电影| 色婷婷狠狠综合| 久久久蜜桃精品| 亚洲成人手机在线| 99re66热这里只有精品3直播| 91精品国产一区二区三区蜜臀 | 国产成人免费网站| 欧美丰满美乳xxx高潮www| 中文字幕一区二区视频| 高清在线不卡av| 91精品国产免费| 亚洲精品老司机| 色偷偷88欧美精品久久久| 亚洲国产电影在线观看| 美腿丝袜亚洲色图| 欧美猛男gaygay网站| 亚洲欧洲av在线| 国产成人精品三级麻豆| 久久综合久色欧美综合狠狠| 亚洲国产成人av网| 欧美色电影在线| 亚洲免费av高清| 91美女片黄在线观看91美女| 日韩精品资源二区在线| 国产一区二区精品在线观看| 欧美电视剧免费观看| 久久成人精品无人区| 日本一区二区三区在线不卡| 国产·精品毛片| 亚洲女与黑人做爰| 91福利在线看| 久久精工是国产品牌吗| 久久久高清一区二区三区| 成人av在线播放网址| 亚洲人成精品久久久久| 欧美性三三影院| 国产一二精品视频| 一区二区免费看| 久久免费美女视频| 日本韩国一区二区| 国产在线日韩欧美| 亚洲激情校园春色| 欧美久久久久久蜜桃| 国产精品一色哟哟哟| 亚洲国产精品av| 666欧美在线视频| 国产精品123区| 国产精品理伦片| 精品国免费一区二区三区| www.亚洲国产| 国产精品18久久久久久久久久久久| 亚洲人成伊人成综合网小说| 精品国产sm最大网站免费看| 欧美日韩国产系列| 一本色道a无线码一区v| 成人免费黄色在线| 麻豆成人久久精品二区三区红| 久久久亚洲高清| 69p69国产精品| 成人黄色网址在线观看| 国模大尺度一区二区三区| 亚洲成av人综合在线观看| 亚洲天堂免费看| 国产色产综合色产在线视频| 91精品国产91久久久久久最新毛片 | 欧美综合色免费| 在线观看区一区二| 在线亚洲欧美专区二区| 91精品办公室少妇高潮对白| av动漫一区二区| 国产不卡视频在线播放| 精品一区二区免费| 激情综合网av| 国产精品99久久久久久有的能看 | 成人国产精品视频| 在线亚洲一区二区| 在线观看日韩毛片| 9久草视频在线视频精品| 99在线视频精品| 色网综合在线观看| 欧美色网一区二区| 欧美日韩精品三区| 精品不卡在线视频| 亚洲一二三区不卡| 国产最新精品精品你懂的| 99久久精品情趣| 精品国产三级a在线观看| 一区二区三区日韩| 成人高清免费观看| 欧美日韩电影在线| 国产精品精品国产色婷婷| 亚洲国产成人高清精品| 99在线精品视频| 久久亚洲捆绑美女| 日本欧美一区二区三区| 色综合咪咪久久| 国产亚洲欧美色| 偷偷要91色婷婷| 在线区一区二视频| 2017欧美狠狠色| 亚洲自拍偷拍九九九| 粉嫩av亚洲一区二区图片| 3d成人动漫网站| 蜜臀国产一区二区三区在线播放 | 在线视频国产一区| 中文字幕在线观看一区| 国产高清亚洲一区| xvideos.蜜桃一区二区| 精品在线播放午夜| 精品国产污网站| 国产一区二区在线观看视频| 欧美一区二区视频在线观看2020 | 久久精工是国产品牌吗| 精品国产一区二区亚洲人成毛片| 日韩成人伦理电影在线观看| 国产精品网站一区| 99在线视频精品| 香蕉成人伊视频在线观看| 8x福利精品第一导航| 美女视频黄免费的久久| wwwwxxxxx欧美| 国产成人丝袜美腿| 成人免费在线观看入口| 色一情一伦一子一伦一区| 亚洲成年人网站在线观看| 91精品国产福利| 国产一区二区女| 17c精品麻豆一区二区免费| 91黄色免费版| 国产主播一区二区三区| 亚洲图片欧美综合| 久久色中文字幕| 欧美系列一区二区| 黄色日韩网站视频| 亚洲综合自拍偷拍| 欧美岛国在线观看| 色香蕉久久蜜桃| 盗摄精品av一区二区三区| 婷婷丁香激情综合| 国产精品国产三级国产三级人妇| 99久久久国产精品免费蜜臀| 日韩国产欧美视频| 亚洲欧美偷拍卡通变态| 精品sm捆绑视频| 欧美视频一区二区| 成人在线综合网| 国产在线视频不卡二| 男人操女人的视频在线观看欧美 | 日韩理论片网站| 日韩欧美精品在线视频| 91免费在线看| 国产综合色视频| 精品一区二区三区久久久| 一区二区三区毛片| 91精品国产综合久久香蕉麻豆| 国产91色综合久久免费分享| 国产一区二区在线视频| 国产美女在线精品| 国产精品系列在线播放| 国产凹凸在线观看一区二区| 精品亚洲成a人| 国产黄色精品网站| 成人午夜激情影院| 91网上在线视频| 欧美日韩一区三区四区| 欧美日韩成人综合| 日韩欧美美女一区二区三区| 久久久久久亚洲综合影院红桃| 国产亚洲欧美在线| 亚洲黄色av一区| 午夜天堂影视香蕉久久| 精油按摩中文字幕久久| 成人av在线一区二区三区| 91麻豆国产福利精品| 欧美日韩亚洲综合| 久久久久久综合| 亚洲午夜国产一区99re久久| 国产一区二区三区精品欧美日韩一区二区三区 |