rtcpsr.c

来自「linux环境下用纯c写的RTP协议的通用开发库」· C语言 代码 · 共 60 行

C
60
字号
/*------------------------------------------------------------------------- * rtcpsr.c - rtcpsr *------------------------------------------------------------------------- */#include <hash.h>#include <rtcp.h>#include <rtp.h>/*------------------------------------------------------------------------ * rtcpsr - process an incoming RTCP sender report *------------------------------------------------------------------------ */intrtcpsr(struct session *psn, struct rtcp *prtcp){  	struct sr	*psr;	struct stream	*pstm;	ssrc_t	ssrc;	if (prtcp->rtcp_type != RTCP_SR) 		return ERROR; 	psr = (struct sr *) prtcp->rtcp_data;	ssrc = ntohl(psr->sr_ssrc);	pstm = rtpgetstream(psn, ssrc);	if (pstm == NULL)		if ((pstm = rtpnewstream(psn, ssrc)) == NULL)			return ERROR;	if (!RTP_INACTIVE(pstm->stm_inactive))		pstm->stm_inactive = 0;	else {		rtpreleasestream(psn, pstm);		return OK;	}	/* 	 * Record data needed to generate receiver report.	 */	pthread_mutex_lock(&pstm->stm_mutex);	clock_gettime(CLOCK_REALTIME, &pstm->stm_lastsr);	pstm->stm_lastsrts = ntohl(psr->sr_rtpts);	pstm->stm_lastntp[RTP_NTPFRAC] = ntohl(psr->sr_fracts);	pstm->stm_lastntp[RTP_NTPINT] = ntohl(psr->sr_intts);	pthread_mutex_unlock(&pstm->stm_mutex);	/*	 * Post an event with the sender report as data.	 */	rtppostevent(psn, EVENT_RTCP_SR, pstm->stm_ssrc,		     (char *) prtcp, RTCP_LENGTH_BYTE(prtcp));	rtpreleasestream(psn, pstm);	return OK;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?