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

📄 rtcp.c

📁 这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易于我们学习和理解
💻 C
字号:
#include <u.h>#include <libc.h>#include <ip.h>#include "dat.h"#include "protos.h"typedef struct Hdr Hdr;struct Hdr {	uchar	hdr;			// RTCP header	uchar	pt;			// Packet type	uchar	len[2];		// Report length	uchar	ssrc[4];		// Synchronization source identifier	uchar	ntp[8];		// NTP time stamp	uchar	rtp[4];		// RTP time stamp	uchar	pktc[4];		// Sender's packet count	uchar	octc[4];		// Sender's octect count};typedef struct Report Report;struct Report {	uchar	ssrc[4];		// SSRC identifier	uchar	lost[4];		// Fraction + cumu lost	uchar	seqhi[4];		// Highest seq number received	uchar	jitter[4];		// Interarrival jitter	uchar	lsr[4];		// Last SR	uchar	dlsr[4];		// Delay since last SR};enum{	RTCPLEN = 28,		// Minimum size of an RTCP header	REPORTLEN = 24,};static intp_seprint(Msg *m){	Hdr*h;	Report*r;	int rc, i, frac;	float dlsr;	if(m->pe - m->ps < RTCPLEN)		return -1;	h = (Hdr*)m->ps;	if(m->pe - m->ps < (NetS(h->len) + 1) * 4)		return -1;	rc = h->hdr & 0x1f;	m->ps += RTCPLEN;	m->p = seprint(m->p, m->e, "version=%d rc=%d tp=%d ssrc=%8ux ntp=%d.%.10ud rtp=%d pktc=%d octc=%d hlen=%d",				(h->hdr >> 6) & 3, rc, h->pt, NetL(h->ssrc),				NetL(h->ntp), (uint)NetL(&h->ntp[4]), NetL(h->rtp),				NetL(h->pktc), NetL(h->octc),				(NetS(h->len) + 1) * 4);	for(i = 0; i < rc; i++){		r = (Report*)m->ps;			m->ps += REPORTLEN;		frac = (int)(((float)r->lost[0] * 100.) / 256.);		r->lost[0] = 0;		dlsr = (float)NetL(r->dlsr) / 65536.;		m->p = seprint(m->p, m->e, "\n\trr(csrc=%8ux frac=%3d%% cumu=%10d seqhi=%10ud jitter=%10d lsr=%8ux dlsr=%f)",				NetL(r->ssrc), frac, NetL(r->lost), NetL(r->seqhi),				NetL(r->jitter), NetL(r->lsr), 				dlsr);	}	m->pr = nil;	return 0;}Proto rtcp = {	"rtcp",	nil,	nil,	p_seprint,	nil,	nil,	nil,	defaultframer,};

⌨️ 快捷键说明

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