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

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

?? rtpsession.cpp

?? 利用rtp庫實現實時語音傳送
?? CPP
字號:
/*  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 "rtpsession.h"#include "rtpstructs.h"RTPSession::RTPSession(){	initialized = false;	rtpconn.SetMaximumPacketSize(localinf.maxpacksize);	contribsources.SetSources(&sources);	packetprocessor.SetContributingSources(&contribsources);	packetprocessor.SetHandlers(&handlers);	packetprocessor.SetSources(&sources);	packetprocessor.SetConnection(&rtpconn);	sources.SetContributingSources(&contribsources);	sources.SetHandlers(&handlers);	sources.SetConnection(&rtpconn);	rtcpmodule.SetConnection(&rtpconn);	rtcpmodule.SetContributingSources(&contribsources);	rtcpmodule.SetLocalInfo(&localinf);	rtcpmodule.SetSources(&sources);	rtcpmodule.SetHandlers(&handlers);	acceptownpackets = false;}RTPSession::~RTPSession(){	Destroy();}int RTPSession::Create(int localportbase,unsigned long localip){		int status;	if (initialized)		return ERR_RTP_SESSIONALREADYINITIALIZED;	if ((status = rtpconn.Create(localportbase,localip)) < 0)		return status;	if ((status = contribsources.CreateLocalCNAME()) < 0)	{		rtpconn.Destroy();		return status;	}	CreateNewSSRC();	localinf.CreateSessionParameters();	rtcpmodule.Initialize();	initialized = true;	return 0;}int RTPSession::Destroy(){	if (!initialized)		return ERR_RTP_SESSIONNOTCREATED;	initialized = false;	rtcpmodule.SendBYE();	rtpconn.Destroy();	contribsources.Clear();	localinf.Clear();	sources.Clear();	handlers.Clear();	return 0;}int RTPSession::SendPacket(void *data,int len){	int status;	unsigned long curtime;	if (!initialized)		return ERR_RTP_SESSIONNOTCREATED;	if (!localinf.defvaluesset)		return ERR_RTP_NODEFAULTVALUESSET;	if (len > 0)	{		status = rtpconn.SendRTPData(data,len,&contribsources,localinf.defpayloadtype,localinf.defmark,localinf.seqnum,localinf.timestamp);		if (status < 0)			return status;		localinf.timestamp += localinf.deftsinc;		localinf.seqnum++;		localinf.octetcount += (RTPuint32)len;		localinf.packetcount++;		rtcpmodule.SentData();	}	/* Check if we have to send RTCP packets */	curtime = time(NULL);	if (rtcpmodule.RTCPCheck(curtime))	{		status = rtcpmodule.RTCPRoutine(curtime);		if (status < 0)			return status;	}	return 0;}int RTPSession::SendPacket(void *data,int len,unsigned char pt,bool mark,unsigned long timestampinc){	int status;	unsigned long curtime;	if (!initialized)		return ERR_RTP_SESSIONNOTCREATED;	if (len > 0)	{		status = rtpconn.SendRTPData(data,len,&contribsources,pt,mark,localinf.seqnum,localinf.timestamp);		if (status < 0)			return status;		localinf.timestamp += timestampinc;		localinf.seqnum++;		localinf.octetcount += (RTPuint32)len;		localinf.packetcount++;		rtcpmodule.SentData();	}	/* Check if we have to send RTCP packets */	curtime = time(NULL);	if (rtcpmodule.RTCPCheck(curtime))	{		status = rtcpmodule.RTCPRoutine(curtime);		if (status < 0)			return status;	}	return 0;}int RTPSession::SendPacket(void *data,int len,unsigned short hdrextID,void *hdrextdata,int numhdrextwords){	int status;	unsigned long curtime;	if (!initialized)		return ERR_RTP_SESSIONNOTCREATED;	if (!localinf.defvaluesset)		return ERR_RTP_NODEFAULTVALUESSET;	if (len > 0)	{		status = rtpconn.SendRTPData(data,len,&contribsources,localinf.defpayloadtype,localinf.defmark,localinf.seqnum,localinf.timestamp,hdrextID,hdrextdata,numhdrextwords);		if (status < 0)			return status;		localinf.timestamp += localinf.deftsinc;		localinf.seqnum++;		localinf.octetcount += (RTPuint32)len;		localinf.packetcount++;		rtcpmodule.SentData();	}	/* Check if we have to send RTCP packets */	curtime = time(NULL);	if (rtcpmodule.RTCPCheck(curtime))	{		status = rtcpmodule.RTCPRoutine(curtime);		if (status < 0)			return status;	}	return 0;}int RTPSession::SendPacket(void *data,int len,unsigned char pt,bool mark,unsigned long timestampinc,unsigned short hdrextID,void *hdrextdata,int numhdrextwords){	int status;	unsigned long curtime;	if (!initialized)		return ERR_RTP_SESSIONNOTCREATED;	if (len > 0)	{		status = rtpconn.SendRTPData(data,len,&contribsources,pt,mark,localinf.seqnum,localinf.timestamp,hdrextID,hdrextdata,numhdrextwords);		if (status < 0)			return status;		localinf.timestamp += timestampinc;		localinf.seqnum++;		localinf.octetcount += (RTPuint32)len;		localinf.packetcount++;		rtcpmodule.SentData();	}	/* Check if we have to send RTCP packets */	curtime = time(NULL);	if (rtcpmodule.RTCPCheck(curtime))	{		status = rtcpmodule.RTCPRoutine(curtime);		if (status < 0)			return status;	}	return 0;}int RTPSession::PollData(){	int status,len,port,prevnumsources;	unsigned char *data;	unsigned long ip,curtime;	bool collis;	if (!initialized)		return ERR_RTP_SESSIONNOTCREATED;	/* Save the number of sources for comparison */	prevnumsources = sources.GetNumberOfParticipants();		/* Process data on RTP port */		if ((status = rtpconn.PollRTP()) < 0)		return status;	while (rtpconn.RTPDataAvailable())	{		if ((status = rtpconn.ReceiveRTPData(&data,&len,&ip,&port)) < 0)			return status;		// the packet processor deletes 'data' in case of an error		if ((status = packetprocessor.ProcessRTPBlock(data,len,ip,port,&collis,acceptownpackets,localinf.tsunit)) < 0)			return status;		if (collis) // collision with local ssrc		{			if ((status = rtcpmodule.SendBYE()) < 0)				return status;			CreateNewSSRC();			localinf.octetcount = 0;			localinf.packetcount = 0;		}	}	/* Process data on RTCP port */	if ((status = rtpconn.PollRTCP()) < 0)		return status;	while (rtpconn.RTCPDataAvailable())	{		if ((status = rtpconn.ReceiveRTCPData(&data,&len,&ip,&port)) < 0)			return status;		// the packet processor deletes 'data' in case of an error		if ((status = packetprocessor.ProcessRTCPBlock(data,len,ip,port,&collis,localinf.tsunit)) < 0)			return status;		if (collis) // collision with local ssrc		{			if ((status = rtcpmodule.SendBYE()) < 0)				return status;			CreateNewSSRC();			localinf.octetcount = 0;			localinf.packetcount = 0;		}	}	/* Check if any sources have joined or left */	if (sources.GetNumberOfParticipants() != prevnumsources)		rtcpmodule.CalcNextRTCPTime();		/* Check if we have to send RTCP packets */	curtime = time(NULL);	if (rtcpmodule.RTCPCheck(curtime))	{		status = rtcpmodule.RTCPRoutine(curtime);		if (status < 0)			return status;	}	return 0;}void RTPSession::CreateNewSSRC(){	bool found;	do	{		found = false;		contribsources.CreateLocalSSRC();		if (sources.Retrieve(ntohl(contribsources.GetLocalSSRC())) != NULL)			found = true;		else if (contribsources.DoesCSRCExist(ntohl(contribsources.GetLocalSSRC())))			found = true;	} while (found);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品卡一卡二卡三| 麻豆成人久久精品二区三区小说| 日日嗨av一区二区三区四区| 国产成人综合亚洲网站| 欧美在线短视频| 国产精品毛片a∨一区二区三区| 亚洲一区精品在线| 亚洲人一二三区| 中文字幕一区在线观看视频| 日韩久久免费av| 一区二区成人在线视频| 欧美精品日日鲁夜夜添| 成人免费一区二区三区在线观看| 精品一区二区三区在线播放| 欧美视频一区二区三区| 国产精品不卡在线| 国产成人鲁色资源国产91色综 | 在线免费不卡电影| 欧美国产成人在线| 国产一区二区三区久久久| 日韩丝袜美女视频| 亚洲成人精品影院| 欧美三级电影精品| 亚洲制服丝袜av| 在线视频综合导航| 亚洲情趣在线观看| 色婷婷精品久久二区二区蜜臀av| 成人免费在线视频观看| 91玉足脚交白嫩脚丫在线播放| 日本一区二区三区久久久久久久久不 | 国产精品你懂的| 成人激情校园春色| 国产精品护士白丝一区av| 波多野结衣在线一区| 中文字幕一区二区三区在线观看 | 中文字幕亚洲视频| 26uuu国产在线精品一区二区| 日韩高清一区二区| 日韩精品一区二区三区四区| 久久精品国产免费| 久久伊人蜜桃av一区二区| 国产精品综合久久| 久久精品人人爽人人爽| 成人网在线播放| 综合网在线视频| 欧美视频自拍偷拍| 老司机一区二区| 久久精品一区二区| 91在线观看高清| 午夜精品久久久久久久99樱桃| 欧美二区乱c少妇| 久久99精品久久久久久动态图 | 亚洲午夜电影在线观看| 91精品啪在线观看国产60岁| 国产在线精品一区在线观看麻豆| 国产欧美1区2区3区| 成人看片黄a免费看在线| 亚洲精品v日韩精品| 欧美高清视频不卡网| 久久99国内精品| 国产女同性恋一区二区| 色婷婷综合久久久中文一区二区 | 一区二区三区中文字幕| 在线成人av网站| 国产凹凸在线观看一区二区| 亚洲精品一二三区| 26uuu国产一区二区三区| 91在线你懂得| 久久精品国产精品青草| 国产精品久久久久久久久久免费看| 色哦色哦哦色天天综合| 精品亚洲国内自在自线福利| 亚洲欧洲精品天堂一级| 欧美一级精品大片| 久久免费精品国产久精品久久久久| 成人免费视频国产在线观看| 石原莉奈在线亚洲二区| 中文在线资源观看网站视频免费不卡| 日本高清不卡视频| 国产精品1区2区| 免费在线观看不卡| 一区二区欧美国产| 中文字幕精品一区| 日韩欧美电影在线| 欧美三级三级三级| 成人一级黄色片| 久久国产精品99精品国产| 亚洲免费观看视频| 国产女同性恋一区二区| 日韩午夜精品电影| 欧美日韩三级一区二区| 99国产精品一区| 国产成人小视频| 国产一区二区网址| 美女在线视频一区| 亚洲成av人片| 亚洲午夜私人影院| 亚洲日穴在线视频| 国产精品福利在线播放| 久久久99精品久久| 精品国产精品网麻豆系列| 91.com视频| 欧美久久久一区| 欧美区一区二区三区| 91福利小视频| 91久久精品国产91性色tv| 91在线观看地址| 一本久久a久久精品亚洲| 成人免费视频免费观看| 成人污污视频在线观看| 国产成人精品免费一区二区| 国产一区二区三区av电影 | 五月激情综合色| 亚洲午夜电影在线| 亚洲超丰满肉感bbw| 亚洲国产精品欧美一二99| 夜夜精品视频一区二区| 一区二区欧美精品| 日韩高清不卡一区二区| 日韩成人伦理电影在线观看| 全国精品久久少妇| 免费观看成人鲁鲁鲁鲁鲁视频| 麻豆91在线播放| 国产精品一区二区久激情瑜伽| 国产在线视频精品一区| 国产成人免费在线视频| 成人伦理片在线| 色国产综合视频| 91精品国产91久久综合桃花| av一二三不卡影片| 欧美一区二区三区四区在线观看| 蜜臀精品久久久久久蜜臀 | 亚洲图片你懂的| 亚洲欧美日韩国产成人精品影院| 一区av在线播放| 另类成人小视频在线| 成人黄色网址在线观看| 久久久国产精华| 国产精品毛片久久久久久久| 一区二区三区小说| 日本成人在线一区| 国产成人av一区二区三区在线| 91亚洲精品久久久蜜桃网站 | 亚洲va韩国va欧美va精品| 日本成人在线网站| 成人高清视频在线| 欧美巨大另类极品videosbest | 国产日本欧洲亚洲| 亚洲综合一二区| 国内精品久久久久影院薰衣草 | 欧美一区二区女人| 国产蜜臀av在线一区二区三区| 一区二区三区在线影院| 国内精品伊人久久久久av影院 | 亚洲午夜在线视频| 国产精品一区二区黑丝| 欧美日韩在线播放一区| 国产日韩av一区| 日本大胆欧美人术艺术动态 | 亚洲欧美色综合| 日本不卡1234视频| 99久久99久久综合| 精品国产乱码久久久久久久 | 国产不卡视频一区二区三区| 在线看一区二区| 国产日本欧洲亚洲| 美日韩一区二区三区| 91国产福利在线| 国产三级三级三级精品8ⅰ区| 日韩国产欧美在线播放| 91蜜桃视频在线| 欧美激情一区在线| 精品无人码麻豆乱码1区2区| 欧美性色综合网| 亚洲日本在线看| 成人国产亚洲欧美成人综合网| 717成人午夜免费福利电影| 综合久久一区二区三区| 国产一区二区h| 欧美成人精品福利| 日日夜夜免费精品| 欧美美女bb生活片| 亚洲激情av在线| 91日韩精品一区| 国产精品久久久久久亚洲伦| 国产精品资源在线| 337p日本欧洲亚洲大胆精品| 日产欧产美韩系列久久99| 在线影视一区二区三区| 日韩理论片中文av| a美女胸又www黄视频久久| 欧美高清在线视频| 国产精品一区二区视频| ww亚洲ww在线观看国产| 麻豆精品蜜桃视频网站| 日韩精品一区二区三区视频| 日本系列欧美系列| 日韩欧美精品在线| 免费成人在线影院| 精品少妇一区二区三区在线视频|