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

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

?? hust_rtpopen.c

?? 實現基于ip2022的MPEG2 TS的IP組播接收
?? C
字號:
/*------------------------------------------------------------------------- * rtpopen.c - rtpopen, rtpopensockets *------------------------------------------------------------------------- */#include "ipOS.h"#include "ipHAL.h"///#include <netinet/in.h>///#include <sys/types.h>///#include <stdio.h>///#include <stdlib.h>///#include <sys/socket.h>///#include "hust_hash.h"///#include <strings.h>///#include <string.h>///#include <unistd.h>///#include <time.h>#include "hust_rtp.h"#include "hust_rtcp.h"#include "hust_util.h"///#include <arpa/inet.h>///#include <pthread.h>

#include "hust_rtp.h"#include "hust_hash.h"#include "hust_event.h"#include "hust_rtplibcommon.h"/*------------------------------------------------------------------------ * rtpopen - open a new RTP session, allocate resources and create state *------------------------------------------------------------------------ */struct session *rtpopen(u32_t session, u16_t port, u16_t bpbufsz, u8_t bpbufcnt){	struct session *psn;	bool	       rv;	u8_t            packetsneeded;	psn = (struct session *) heap_alloc(sizeof(struct session));	if (psn == NULL)		return NULL;  	memset(psn, 0, sizeof(struct session));	///psn->sn_rtpfd = psn->sn_rtcpfd = -1;	psn->sn_ssrcs = htnew(RTP_SSRCHTSZ, hashunsignedint, unsignedinteq, SSRCDESTROY);	psn->sn_cnames = htnew(RTP_CNAMEHTSZ, hashstring, strcmp, CNAMEDESTROY);///	psn->sn_cyclesources = (ssrc_t *) heap_alloc(sizeof(ssrc_t) * RTCP_RRMAXRBLOCKS);	////按最大的空間分配原則,為rtcpcycle中存放ssrcs預留空間	packetsneeded = RTCP_RRMAXRBLOCKS / RTCP_MAXRBLOCKS + ((RTCP_RRMAXRBLOCKS % RTCP_MAXRBLOCKS) != 0);///	psn->sn_cyclebuf = (char *) heap_alloc(RTCP_RRMAXRBLOCKS * sizeof(struct rblock) + packetsneeded * (RTCP_HEADERSZ + sizeof(ssrc_t)));	////按最大的空間分配原則,為RR包分配空間	///	rv = bufpoolinit(&psn->sn_bpool, bpbufsz, bpbufcnt);  	/*pthread_cond_init(&psn->sn_cond, NULL);	pthread_mutex_init(&psn->sn_mutex, NULL);	pthread_mutex_init(&psn->sn_getstreammutex, NULL);	pthread_mutex_init(&psn->sn_cnamemutex, NULL);	pthread_mutex_init(&psn->sn_rtpthrmutex, NULL);	pthread_mutex_init(&psn->sn_rtcpthrmutex, NULL);	pthread_mutex_init(&psn->sn_rtcpcyclethrmutex, NULL);*/	psn->sn_addr = session;	psn->sn_port = port;	psn->sn_bw = RTP_DEFAULT_SESSIONBW;	psn->sn_ssrc = rtpmkssrc(NULL);	psn->sn_autocleanup = TRUE;	//////初始化時就應該是可自動清除的。/*	if (psn->sn_ssrcs == NULL ||	    psn->sn_cnames == NULL ||	    psn->sn_cyclesources == NULL ||	    psn->sn_cyclebuf == NULL ||	    rv == ERROR) {		rtpclose(psn);		return NULL;	}*/  	return psn;}////打開一個RTP對話,分配資源,并創建會話的狀態。包括的操作有:為struct session申請空間
////置rtp,rtcp文件描述標志,為stream分配新的哈希表,分配源標識描述的內存空間。以及進程
////及進程狀態的初始化,賦值session的地址,端口;并打開rtp的套接字。/*------------------------------------------------------------------------ * rtpopensockets - open socket for RTP and RTCP datagrams *------------------------------------------------------------------------ *//*intrtpopensockets(struct session *psn, u32_t session, int port){	////struct sockaddr_in	saddr;
	u32_t	saddr;	struct ip_mreq	        mreq;	unsigned char		loop;	int			reuse;	unsigned char		ttl;	psn->sn_rtpfd = socket(AF_INET, SOCK_DGRAM, 0);	psn->sn_rtcpfd = socket(AF_INET, SOCK_DGRAM, 0);  	if (psn->sn_rtpfd < 0 || psn->sn_rtcpfd < 0) {		return ERROR;	}	memset(&saddr, 0, sizeof(struct sockaddr_in));	saddr.sin_family = AF_INET;	if(IN_CLASSD(ntohl(session.s_addr))) {		saddr.sin_addr = session;	}	else {		saddr.sin_addr.s_addr = htonl(INADDR_ANY);	}	if (IN_CLASSD(ntohl(session.s_addr))) {		reuse = 1;		if (setsockopt(psn->sn_rtpfd, SOL_SOCKET, SO_REUSEADDR, (char *) &reuse, sizeof(reuse)) < 0) {			close(psn->sn_rtpfd);			close(psn->sn_rtcpfd);			return ERROR;		}    		if (setsockopt(psn->sn_rtcpfd, SOL_SOCKET, SO_REUSEADDR, (char *) &reuse, sizeof(reuse)) < 0) {			close(psn->sn_rtpfd);			close(psn->sn_rtcpfd);			return ERROR;		}	}  	saddr.sin_port = htons(port);  	if (bind(psn->sn_rtpfd, (struct sockaddr *) &saddr, sizeof(struct sockaddr_in)) < 0) {		close(psn->sn_rtpfd);		close(psn->sn_rtcpfd);		return ERROR;	}  	saddr.sin_port = htons(port + 1);	if (bind(psn->sn_rtcpfd, (struct sockaddr *) &saddr, sizeof(struct sockaddr_in)) < 0) {		close(psn->sn_rtpfd);		close(psn->sn_rtcpfd);		return ERROR;	}	psn->sn_rtcpto = saddr;	if (!IN_CLASSD(ntohl(session.s_addr)))		psn->sn_rtcpto.sin_addr.s_addr = RTP_INADDRUNINITIALIZED;	if (IN_CLASSD(ntohl(session.s_addr))) {		mreq.imr_multiaddr = session;		mreq.imr_interface.s_addr = htonl(INADDR_ANY);    		if (setsockopt(psn->sn_rtpfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &mreq, sizeof(struct ip_mreq)) < 0) {			close(psn->sn_rtpfd);			close(psn->sn_rtcpfd);			return ERROR;		}		if (setsockopt(psn->sn_rtcpfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *) &mreq, sizeof(struct ip_mreq)) < 0) {			close(psn->sn_rtpfd);			close(psn->sn_rtcpfd);			return ERROR;		}*/		/*		 * Disable loopback on RTCP socket so we don't want to hear ourselves.		 * This isn't done for the RTP socket because this implementation		 * assumes no sending.		 */	/*	loop = 0;		if (setsockopt(psn->sn_rtcpfd, IPPROTO_IP, IP_MULTICAST_LOOP, 			       (char *) &loop, sizeof(loop)) < 0) {			close(psn->sn_rtpfd);			close(psn->sn_rtcpfd);			return ERROR;		}*/    		/* 		 * Set TTL.		 * This isn't done for the RTP socket because this implementation		 * assumes no sending.		 */		/*ttl = RTP_DEFAULT_SESSIONTTL;		if (setsockopt(psn->sn_rtcpfd, IPPROTO_IP, IP_MULTICAST_TTL, 			       (char *) &ttl, sizeof(ttl)) < 0) {			close(psn->sn_rtpfd);			close(psn->sn_rtcpfd);			return ERROR;		}	}	return OK;}*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
夜夜精品视频一区二区| 国内外精品视频| 欧美日韩精品一区二区三区| 男男成人高潮片免费网站| 久久久久久久久久久黄色| 在线亚洲免费视频| 久久99国内精品| 一区二区三区毛片| 久久精品在线免费观看| 一区二区在线观看av| 91亚洲大成网污www| 久久成人久久鬼色| 一区二区三区丝袜| 久久久久国产精品人| 欧美精品123区| 99国内精品久久| 国产精品夜夜爽| 三级不卡在线观看| 一区二区三区免费在线观看| 国产精品国产a| 国产三级一区二区三区| 精品久久久久av影院| 555夜色666亚洲国产免| 在线视频一区二区三区| 99视频热这里只有精品免费| 国产福利精品导航| 久久电影网电视剧免费观看| 日韩av一级电影| 首页欧美精品中文字幕| 亚洲一区视频在线| 伊人色综合久久天天| 一本久久综合亚洲鲁鲁五月天| 一区二区三区在线不卡| 日韩三级电影网址| 懂色av中文一区二区三区| 亚洲免费观看视频| 精品国产区一区| 国产成人亚洲综合色影视| 亚洲综合免费观看高清完整版在线 | av不卡免费在线观看| 日韩久久免费av| 99久久精品国产导航| 日日夜夜精品视频免费| 亚洲免费在线看| 国产精品高清亚洲| 精品久久久久久综合日本欧美| 日韩国产精品久久久久久亚洲| 日韩一区二区三区高清免费看看| 国产高清在线观看免费不卡| 精品中文字幕一区二区小辣椒| 成人黄色在线看| 国产成人精品免费网站| 亚洲妇女屁股眼交7| 亚洲成人午夜电影| 午夜精品福利在线| 免费久久99精品国产| 激情综合网av| 国产精品18久久久久久久久 | 91网站黄www| 91福利精品视频| 欧美夫妻性生活| 欧美大胆人体bbbb| 国产亚洲va综合人人澡精品| 亚洲国产精品成人久久综合一区| 国产精品美女久久久久久久久久久| 亚洲欧美日韩在线不卡| 午夜欧美电影在线观看| 精品亚洲成a人在线观看| 国产一区日韩二区欧美三区| 99久久精品国产精品久久| 欧美丝袜丝交足nylons| 欧美一区二区私人影院日本| 精品久久久三级丝袜| 国产精品丝袜91| 欧美亚洲综合色| 风流少妇一区二区| 91丨porny丨中文| 777久久久精品| 精品国产凹凸成av人网站| 国产精品国产三级国产aⅴ原创 | 国产乱码精品一品二品| 97久久精品人人爽人人爽蜜臀| 欧美中文字幕一区二区三区| 日韩亚洲欧美在线| 国产精品国产自产拍高清av| 亚洲成人动漫一区| 国产成人丝袜美腿| 在线一区二区视频| 久久综合九色综合欧美就去吻| 成人免费视频在线观看| 久久国产精品99精品国产| av一本久道久久综合久久鬼色| 91精品久久久久久久91蜜桃| 亚洲国产高清aⅴ视频| 日韩—二三区免费观看av| 成人美女视频在线观看| 欧美一区二区三区视频在线观看| 国产精品理伦片| 青青草精品视频| 欧美午夜片在线看| 国产亚洲一区字幕| 无码av免费一区二区三区试看| 成人黄页在线观看| 久久亚洲一级片| 日韩精彩视频在线观看| 99久久精品99国产精品| 久久精品亚洲精品国产欧美| 日本成人在线电影网| 在线亚洲人成电影网站色www| 久久精品一区二区| 精品一区二区av| 欧美一区二区三区成人| 一区二区三区国产精华| 成人91在线观看| 久久免费午夜影院| 久久99精品久久久| 在线播放一区二区三区| 亚洲精品乱码久久久久久黑人| 成人免费高清在线| 国产无人区一区二区三区| 精一区二区三区| 亚洲丝袜制服诱惑| 精品一区二区在线免费观看| 3d动漫精品啪啪| 午夜电影久久久| 欧美蜜桃一区二区三区| 一区二区三区在线视频播放| av成人动漫在线观看| 国产精品久久免费看| 成人动漫视频在线| 中文字幕日韩av资源站| hitomi一区二区三区精品| 国产精品毛片久久久久久久| 成人av网站免费| 亚洲色图丝袜美腿| www.亚洲色图.com| 综合分类小说区另类春色亚洲小说欧美 | 亚洲欧美国产毛片在线| 91日韩在线专区| 国产精品久99| 91黄色免费看| 婷婷综合在线观看| 91精品国产综合久久久蜜臀粉嫩 | 日韩黄色一级片| 在线观看91精品国产麻豆| 三级成人在线视频| 精品久久国产老人久久综合| 精品一区二区三区的国产在线播放 | 亚洲成人免费电影| 欧美一区二区网站| 久久福利资源站| 国产日韩欧美精品在线| aa级大片欧美| 亚洲电影激情视频网站| 欧美伦理电影网| 蜜桃av噜噜一区| 欧美一区二区三区免费大片| 奇米色777欧美一区二区| 久久嫩草精品久久久精品| 成人免费黄色大片| 亚洲午夜电影网| 69久久99精品久久久久婷婷 | 五月婷婷久久综合| 国精产品一区一区三区mba视频| 欧美午夜视频网站| 青青草97国产精品免费观看| 久久精品亚洲一区二区三区浴池 | 蜜桃一区二区三区四区| 久久久久国产免费免费| 91蝌蚪国产九色| 亚洲1区2区3区视频| 精品理论电影在线观看| 99久久精品免费精品国产| 婷婷中文字幕一区三区| 中文在线资源观看网站视频免费不卡| 91在线观看免费视频| 免费看欧美女人艹b| 国产精品高清亚洲| 欧美一区二视频| 99国产精品久久久久久久久久久| 日本不卡一二三区黄网| 中文字幕免费一区| 欧美日韩电影在线| 成人av资源在线观看| 免费在线欧美视频| 中文字幕一区二区三区av| 欧美一区二区三区免费大片| 97se亚洲国产综合在线| 激情综合色综合久久| 亚洲成人tv网| 最新日韩av在线| 久久老女人爱爱| 欧美一区二区私人影院日本| 色综合久久综合中文综合网| 韩国av一区二区三区四区| 亚洲午夜在线视频| 中文字幕中文字幕在线一区| 日韩精品一区国产麻豆| 欧美在线观看18| 成人网页在线观看|