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

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

?? jrtplib.h

?? jrtp庫
?? H
字號:
/**\mainpage JRTPLIB * * \author Jori Liesenborgs * \author Developed at the The Expertise Centre for Digital Media (EDM), a research  *         institute of the Hasselt University * * \section ack Acknowledgment * * 	I would like thank the people at the Expertise Centre for Digital Media * 	for giving me the opportunity to create this rewrite of the library. *  * \section intro Introduction * 	 * 	This document describes JRTPLIB, an object-oriented * 	library written in C++ which aims to help developers in using the  * 	Real-time Transport Protocol (RTP) as described in RFC 3550. * * 	The library makes it possible for the user to send and receive data * 	using RTP, without worrying about SSRC collisions, scheduling and * 	transmitting RTCP data etc. The user only needs to provide the library *	with the payload data to be sent and the library gives the user access *	to incoming RTP and RTCP data. * *	\subsection idea Design idea *		 *		The library provides several classes which can be helpful in *		creating RTP applications. Most users will probably need just the *		RTPSession class for building an application. This class *		provides the necessary functions for sending RTP data and handles *		the RTCP part internally. * *	\subsection changes Changes from version 2.x * *		One of the most important changes is probably the fact that this *		version is based on RFC 3550 and the 2.x versions were based upon *		RFC 1889 which is now obsolete. * *		Also, the 2.x series was created with the idea that the user would *		only need to use the RTPSession class which meant that the *		other classes were not very useful by themselves. This version on *		the other hand, aims to provide many useful components to aid the *		user in building RTP capable applications. * *		In this version, the code which is specific for the underlying *		protocol by which RTP packets are transported, is bundled in *		a class which inherits its interface from a class called *		RTPTransmitter. This makes it easy for different underlying *		protocols to be supported. Currently there is support for UDP over *		IPv4 and UDP over IPv6. * *		For applications such as a mixer or translator using the *		RTPSession class will not be a good solution. Other components can *		be used for this purpose: a transmission component, an SSRC table, *		an RTCP scheduler etc. Using these, it should be much easier to *		build all kinds of applications. * \section copyright Copyright license * 	 * 	The library code uses the following copyright license: * * 	\code * 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. * 	\endcode * * 	There are two reasons for using this license. First, since this is the * 	license of the 2.x series, it only seemed natural that this rewrite * 	would contain the same license. Second, since the RTP protocol is * 	deliberately incomplete RTP profiles can, for example, define additional * 	header fields. The best way to deal with this is to adapt the library * 	code itself and that's why I like to keep the license as free as * 	possible. * * \section starting Getting started with the RTPSession class * 	 * 	To use RTP, you'll have to create an RTPSession object. The constructor * 	accepts one parameter, an instance of RTPMemoryManager. By default, no * 	memory manager will be used. For now, we'll keep it simple, so this is * 	our code so far: * * 	\code * RTPSession session;  * 	\endcode *  * 	To actually create the session, you'll have to call the Create member  * 	function which takes three arguments: the first one is of type RTPSessionParams  * 	and specifies the general options for the session. One parameter of this class  * 	must be set explicitly, otherwise the session will not be created successfully.  * 	This parameter is the timestamp unit of the data you intend to send and * 	can be calculated by dividing a certain time interval (in seconds) by the  * 	number of samples in that interval. So, assuming that we'll send 8000 Hz  * 	voice data, we can use this code: * * 	\code * RTPSessionParams sessionparams; * * sessionparams.SetOwnTimestampUnit(1.0/8000.0); * 	\endcode * * 	The other session parameters will probably depend on the actual RTP profile * 	you intend to work with.  * * 	The second argument of the Create function is a pointer to an RTPTransmissionParams  * 	instance and describes the parameters for the transmission component. The third * 	parameter selects the type of transmission component which will be used. By default, * 	an UDP over IPv4 transmitter is used, and for this particular transmitter, the * 	transmission parameters should be of type RTPUDPv4TransmissionParams. Assuming  * 	that we want our RTP portbase to be 8000, we can do the following: * * 	\code * RTPUDPv4TransmissionParams transparams; *  * transparams.SetPortbase(8000); * 	\endcode * * 	Now, we're ready to call the Create member function of RTPSession. The return  * 	value is stored in the integer \c status so we can check if something went  * 	wrong. If this value is negative, it indicates that some error occurred.  * 	A description of what this error code means can be retrieved by calling * 	RTPGetErrorString: * * 	\code * int status = session.Create(sessionparams,&transparams); * if (status < 0) * { *	std::cerr << RTPGetErrorString(status) << std::endl; *	exit(-1); * } *	\endcode * *	If the session was created with success, this is probably a good point  *	to specify to which destinations RTP and RTCP data should be sent. This is  *	done by a call to the RTPSession member function AddDestination. This  *	function takes an argument of type RTPAddress. This is an abstract  *	class and for the UDP over IPv4 transmitter the actual class to be  *	used is RTPIPv4Address. Suppose that we want to send our data to a  *	process running on the same host at port 9000, we can do the following: *	 *	\code * uint8_t localip[]={127,0,0,1}; * RTPIPv4Address addr(localip,9000); * * status = session.AddDestination(addr); * if (status < 0) * { *	std::cerr << RTPGetErrorString(status) << std::endl; *	exit(-1); * } * 	\endcode * * 	If the library was compiled with JThread support, incoming data is * 	processed in the background. If JThread support was not enabled at * 	compile time or if you specified in the session parameters that no * 	poll thread should be used, you'll have to call the RTPSession * 	member function Poll regularly to process incoming data and to send  * 	RTCP data when necessary. For now, let's assume that we're working  * 	with the poll thread enabled. * * 	Lets suppose that for a duration of one minute, we want to send * 	packets containing 20 ms (or 160 samples) of silence and we want * 	to indicate when a packet from someone else has been received. Also * 	suppose we have L8 data as defined in RFC 3551 and want to use * 	payload type 96. First, we'll set some default values: * 	 * 	\code * session.SetDefaultPayloadType(96); * session.SetDefaultMark(false); * session.SetDefaultTimestampIncrement(160); * 	\endcode * * 	Next, we'll create the buffer which contains 160 silence samples * 	and create an RTPTime instance which indicates 20 ms or 0.020 seconds. * 	We'll also store the current time so we'll know	when one minute has  * 	passed. * 	 * 	\code * uint8_t silencebuffer[160]; *  * for (int i = 0 ; i < 160 ; i++) * 	silencebuffer[i] = 128; *  * RTPTime delay(0.020); * RTPTime starttime = RTPTime::CurrentTime(); * 	\endcode * * 	Next, the main loop will be shown. In this loop, a packet containing * 	160 bytes of payload data will be sent. Then, data handling can * 	take place but this part is described later in the text. Finally, * 	we'll wait 20 ms and check if sixty seconds have passed: *	 *	\code * bool done = false; * while (!done) * { * 	status = session.SendPacket(silencebuffer,160); * 	if (status < 0) * 	{ * 		std::cerr << RTPGetErrorString(status) << std::endl; * 		exit(-1); * 	} * 	 * 	// * 	// Inspect incoming data here * 	// * 	 * 	RTPTime::Wait(delay); * 	 * 	RTPTime t = RTPTime::CurrentTime(); * 	t -= starttime; * 	if (t > RTPTime(60.0)) * 		done = true; * } * 	\endcode * * 	Information about participants in the session, packet retrieval * 	etc, has to be done between calls to the RTPSession member * 	functions BeginDataAccess and EndDataAccess. This ensures that the  * 	background thread doesn't try to change the same data you're trying  * 	to access. We'll iterate over the participants 	using the  * 	GotoFirstSource and GotoNextSource member functions. Packets from  * 	the currently selected participant can be retrieved using the  * 	GetNextPacket member function which returns a pointer to an  * 	instance of the RTPPacket class. When you don't need the packet  * 	anymore, it has to be deleted. The processing of incoming data will  * 	then be as follows: * 	 * 	\code * session.BeginDataAccess(); * if (session.GotoFirstSource()) * { * 	do * 	{ * 		RTPPacket *packet; * 		while ((packet = session.GetNextPacket()) != 0) * 		{ * 			std::cout << "Got packet with extended sequence number "  * 			          << packet->GetExtendedSequenceNumber()  * 					  << " from SSRC " << packet->GetSSRC()  * 					  << std::endl; * 			session.DeletePacket(packet); * 		} * 	} while (session.GotoNextSource()); * } * session.EndDataAccess(); *	\endcode * *	Information about the currently selected source can be obtained *	by using the GetCurrentSourceInfo member function of the RTPSession class.  *	This function returns a pointer to an instance of  RTPSourceData which  *	contains all information about that source: sender reports from that  *	source, receiver reports, SDES info etc.  * *	When the main loop is finished, we'll send a BYE packet to inform other  *	participants of our departure and clean up the RTPSession class. Also,  *	we want to wait at most 10 seconds for the BYE packet to be sent,  *	otherwise we'll just leave the session without sending a BYE packet. * 	 * 	\code * delay = RTPTime(10.0); * session.BYEDestroy(delay,"Time's up",9); *	\endcode *	 *	The complete code of the program is given in \c example2.cpp. * * \section errors Error codes * *	Unless specified otherwise, functions with a return type \c int *	will return a negative value when an error occurred and zero or a *  	positive value upon success. A description of the error code can *  	be obtained by using the RTPGetErrorString function, declared  *  	in rtperrors.h                                             *  * \section memory Memory management *  *	You can write you own memory manager by deriving a class from RTPMemoryManager. *	The following example shows a very basic implementation. *	 *	\code * class MyMemoryManager : public RTPMemoryManager * { * public: *	MyMemoryManager() { } *	~MyMemoryManager() { } *	 *	void *AllocateBuffer(size_t numbytes, int memtype) *	{ *		return malloc(numbytes); *	} * *	void FreeBuffer(void *p) *	{ *		free(p); *	} * }; *	\endcode *  * 	In the constructor of RTPSession, you can specify that you would like to use * 	this memory manager: * 	 * 	\code * MyMemoryManager mgr; * RTPSession session(&mgr); * 	\endcode * * 	Now, all memory allocation and deallocation will be done using the AllocateBuffer * 	and FreeBuffer implementations of \c mgr. * * 	The second parameter of the RTPMemoryManager::AllocateBuffer member function * 	indicates what the purpose is of this memory block. This allows you to handle * 	different kinds of data in different ways. * * 	With the introduction of the memory management system, the RTPSession class was * 	extended with member function RTPSession::DeletePacket and RTPSession::DeleteTransmissionInfo. * 	These functions should be used to deallocate RTPPacket instances and RTPTransmissionInfo * 	instances respectively. * * \section contact Contact * * 	If you have any questions, remarks or requests about the library or * 	if you think you've discovered a bug, you can contact me at * 	\c jori(\c dot)\c liesenborgs(\c at)\c gmail(\c dot)\c com * * 	The home page of the library is *	http://research.edm.uhasselt.be/jori/jrtplib/jrtplib.html * * 	There is also a mailing list for the library. To subscribe to the list,  * 	send an e-mail with the text \c subscribe \c jrtplib as the message body  * 	(not the subject) to \c majordomo(\c at)\c edm(\c dot)\c uhasselt(\c dot)\c be  * 	and you'll receive further instructions. */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精品成人一区二区三区| 国产亚洲精品福利| 亚洲一区二区三区四区不卡| 色狠狠色噜噜噜综合网| 亚洲综合免费观看高清完整版 | 久久亚洲综合av| 国产一区二区影院| 国产精品每日更新在线播放网址| 99麻豆久久久国产精品免费| 亚洲综合在线观看视频| 欧美三级一区二区| 韩国女主播一区| 国产精品久久一级| 欧美精品久久久久久久多人混战| 毛片不卡一区二区| 国产日韩精品一区二区浪潮av| eeuss鲁片一区二区三区| 一区二区三区在线免费视频| 欧美日韩国产综合视频在线观看| 麻豆一区二区在线| 国产精品伦理一区二区| 欧美视频一区二区三区在线观看 | 日韩精品一级二级 | 26uuu另类欧美| 91蝌蚪porny成人天涯| 免费成人在线影院| 国产精品国产三级国产aⅴ无密码| 欧美日韩国产小视频| 国产成人在线网站| 午夜精品久久久| 伊人色综合久久天天人手人婷| 欧美精品在线观看播放| 国产高清久久久| 五月综合激情网| 国产精品入口麻豆原神| 欧美一区二区福利在线| 91久久精品一区二区三| 韩国av一区二区三区| 性做久久久久久| 亚洲欧美中日韩| 亚洲精品一区二区三区蜜桃下载 | 日韩免费一区二区| 91小视频在线观看| 精品亚洲国产成人av制服丝袜 | 欧美精品三级日韩久久| 成人国产一区二区三区精品| 免费人成精品欧美精品| 成人免费小视频| www欧美成人18+| 91精品国产综合久久久久久漫画| 91麻豆国产在线观看| 国产一二精品视频| 亚洲精品成a人| 99这里只有精品| 蜜桃av噜噜一区| 有坂深雪av一区二区精品| 久久久www成人免费无遮挡大片| 欧美区一区二区三区| 色综合天天做天天爱| 成人精品国产免费网站| 国产主播一区二区| 久久99热狠狠色一区二区| 丝袜亚洲另类欧美| 亚洲成人7777| 亚洲高清免费观看| 亚洲电影一区二区三区| 亚洲影院久久精品| 亚洲午夜激情网站| 亚洲免费观看在线观看| 亚洲免费色视频| 伊人色综合久久天天人手人婷| 最好看的中文字幕久久| 亚洲欧洲韩国日本视频| 亚洲欧美日韩一区| 日韩理论电影院| 亚洲天堂av一区| 亚洲精品中文字幕在线观看| 一区二区三区在线视频播放| 一区二区三区在线看| 亚洲高清免费在线| 午夜精品免费在线| 蜜臀精品一区二区三区在线观看 | 韩国av一区二区三区在线观看| 国产精品影音先锋| 久久99国产精品免费| 久久成人羞羞网站| 国产精一品亚洲二区在线视频| 国产综合久久久久久久久久久久 | 日韩电影在线看| 毛片av一区二区三区| 国产乱妇无码大片在线观看| 国产91精品久久久久久久网曝门 | 国产嫩草影院久久久久| 亚洲国产精品二十页| ㊣最新国产の精品bt伙计久久| 亚洲欧美日韩在线不卡| 日日夜夜免费精品| 韩国女主播一区二区三区| 成人黄色在线看| 欧洲av在线精品| 日韩欧美一区在线| 亚洲国产精品成人综合色在线婷婷 | 久久精品网站免费观看| 欧美国产精品一区二区三区| 亚洲综合色成人| 久久99精品久久久久久国产越南 | 一区二区三区电影在线播| 亚洲成人久久影院| 久久精品国产一区二区三区免费看| 国产大陆a不卡| 日本丰满少妇一区二区三区| 正在播放亚洲一区| 久久九九久久九九| 洋洋成人永久网站入口| 久久91精品久久久久久秒播| 不卡的电视剧免费网站有什么| 欧美日韩亚洲国产综合| 日韩欧美久久久| 自拍偷拍欧美精品| 看国产成人h片视频| 一本久久a久久精品亚洲| 日韩欧美综合在线| 亚洲激情综合网| 国产精品一区二区三区99| 欧美视频一区二区三区在线观看| 2021中文字幕一区亚洲| 亚洲综合视频网| 成人综合婷婷国产精品久久蜜臀| 欧美日韩国产高清一区| 国产精品区一区二区三区| 蜜桃视频在线一区| 色呦呦国产精品| 久久精品视频在线免费观看| 国产精品自产自拍| 91福利精品视频| 欧美性生活大片视频| 日本欧美大码aⅴ在线播放| 成人性生交大合| 日韩一区二区三区电影在线观看 | 国产精品色哟哟| 日韩精品欧美精品| 色婷婷香蕉在线一区二区| 国产婷婷色一区二区三区四区| 亚洲成人动漫精品| av动漫一区二区| 久久亚洲一区二区三区明星换脸 | 久久69国产一区二区蜜臀| 在线观看中文字幕不卡| 国产精品全国免费观看高清| 精品亚洲国内自在自线福利| 欧美一区二区视频观看视频| 一区二区三区国产豹纹内裤在线| 福利一区福利二区| 精品国产成人在线影院| 日韩电影免费在线看| 欧美日韩国产精选| 亚洲一区二区三区视频在线| 成人av在线播放网址| 中文字幕乱码久久午夜不卡| 国产一区91精品张津瑜| 精品国产精品一区二区夜夜嗨| 亚洲欧美综合网| 国产精品一级片| 日韩一级大片在线| 香蕉影视欧美成人| av亚洲精华国产精华精华| 国产一区二区三区香蕉| 国产精品一区二区在线播放| 日本不卡免费在线视频| 亚洲另类中文字| 国产日本欧洲亚洲| 精品粉嫩超白一线天av| 一本大道久久a久久综合| 国产精品66部| 成人黄色在线网站| 国产激情91久久精品导航 | 成人免费视频视频| 亚洲成a人片在线观看中文| 日韩av电影天堂| 亚洲欧美日韩在线| 亚洲欧洲精品一区二区精品久久久 | 亚洲精品欧美激情| 国产亚洲一区字幕| 日韩午夜av一区| 欧美日韩大陆在线| 日韩欧美色综合网站| 欧美乱妇一区二区三区不卡视频| 99精品视频免费在线观看| 亚洲最新在线观看| 午夜成人免费视频| 69av一区二区三区| 亚洲一区免费观看| 国产美女精品在线| 在线免费不卡视频| 欧美视频在线观看一区| 99免费精品在线观看| 丁香五精品蜜臀久久久久99网站| 日韩不卡手机在线v区| 夜夜精品视频一区二区| 亚洲欧美色一区|