⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synbufspan.c

📁 linux环境下用纯c写的RTP协议的通用开发库
💻 C
字号:
/*------------------------------------------------------------------------- * synbufspan.c - synbufspan *------------------------------------------------------------------------- */#include <syn.h>#include <sample.h>/*------------------------------------------------------------------------- * synbufspan - returns the media timestamps of the first and last data * in a synstream's RTP data queue. *------------------------------------------------------------------------- */intsynbufspan(struct synsession *pssn, struct synstream *psstm, mediatime_t *begin, mediatime_t *end){  	struct stream         *pstm;	struct rtpln          *pln;	struct rtp            *prtp;	int                   samples;	struct sampparam      *psampparam;  	pstm = rtpgetstream(pssn->ssn_session, psstm->sstm_ssrc);    	if (pstm == NULL)		return ERROR;    	if (rtpqlock(pssn->ssn_session, psstm->sstm_ssrc) == ERROR) {		rtpreleasestream(pssn->ssn_session, pstm);		return ERROR;	}  	if (pstm->stm_queue.rq_head == NULL) {		rtpqunlock(pssn->ssn_session, psstm->sstm_ssrc);		rtpreleasestream(pssn->ssn_session, pstm);		*begin = *end = 0;		return OK;	}  	*begin = pstm->stm_queue.rq_head->rln_rtp.rtp_time;  	switch(psstm->sstm_type) {    	case SYN_STREAMTYPE_FRAME:	case SYN_STREAMTYPE_PACKET:		/*		 * For packet streams we cannot compute the exact		 * span. We return only the difference between 		 * the timestamp of the first and last packets 		 * in the queue.		 * 		 * For frame streams it is possible to decode the 		 * length of the last frame of the last packet		 * (if all fragments of a fragmented frame have 		 * been received). However, frame streams are		 * currnetly treated the same as raw packet streams		 * by synbyfspan.		 */		*end = pstm->stm_queue.rq_tail->rln_rtp.rtp_time;		break;    	case SYN_STREAMTYPE_SAMPLE:		/*		 * For sample streams we compute the the exact span.		 */		psampparam = (struct sampparam *) psstm->sstm_parameters;		pln = pstm->stm_queue.rq_tail;		prtp = &pln->rln_rtp;		samples = ((pln->rln_len - RTP_HEADER_LEN(prtp)) * 8)			/ (psampparam->sp_samplesz * psampparam->sp_channels);   		*end = prtp->rtp_time + samples - 1;		break;      	}  	rtpqunlock(pssn->ssn_session, psstm->sstm_ssrc);	rtpreleasestream(pssn->ssn_session, pstm);	return OK;}

⌨️ 快捷键说明

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