metartc5_jz源码阅读-yang_encode_rtpHeader

//编码rtpHeader
int32_t yang_encode_rtpHeader(YangBuffer* buf,YangRtpHeader* header){
	int32_t err = Yang_Ok;

	// Encode the RTP fix header, 12bytes.
	// @see https://tools.ietf.org/html/rfc1889#section-5.1
	// The version, padding, extension and cc, total 1 byte.

	//0x80二进制为1000 0000,version为第一个字节的第0 1位,二进制值为10,十进制为2.
	//将version和cc拼到一个字节中, cc为第一个字节的第4 5 6 7位
	uint8_t v = 0x80 | header->cc;

	//如果有padding,则设置p位,p为第一个字节的第2位
	//0x20二进制为0010 0000,if内部的代码是设置第2位为1
	if (header->padding_length > 0) {
		v |= 0x20;
	}

	//x为extension,扩展位,有头扩展时,将此值设置为1
	//0x10二进制为0001 0000, 第一个字节的第3位为扩展位。
	if (header->extensions&&header->extensions->has_ext) {
		v |= 0x10;
	}

	//将第一个字节写进buf中。
	yang_write_1bytes(buf,v);

	// The marker and payload type, total 1 byte.
	//marker一般表示帧的最后一个包,表示帧的结束。
	v = header->payload_type;
	if (header->marker) {
		v |= kRtpMarker;
	}

	//将第二个字节(marker和payloadType)写进buf中。
	yang_write_1bytes(buf,v);

	// The sequence number, 2 bytes.
	//sequence每个包进行自增操作,接收端根据此字段进行包排序及是否丢包的判断。
	yang_write_2bytes(buf,header->sequence);

	// The timestamp, 4 bytes.
	//同一帧的timestamp相同,通过这个字段来判断是否是同一帧数据。
	yang_write_4bytes(buf,header->timestamp);

	// The SSRC, 4 bytes.
	//在p2p连接中,视频和音频流分别设置不同的ssrc,并且它们跟对端传来的音视频流的ssrc也不同,作为唯一标识。
	yang_write_4bytes(buf,header->ssrc);

	// The CSRC list: 0 to 15 items, each is 4 bytes.
	//当有rtp混合器时,则混合器的ssrc放入header->ssrc中,而混合器的来源rtp列表存入csrc列表中,接收者根据csrc来区分不同的信源。
	for (size_t i = 0; i < header->cc; ++i) {
		yang_write_4bytes(buf,header->csrc[i]);
	}

	//如果有头扩展,则编码头扩展内容后存入buf中。
	if (header->extensions&&header->extensions->has_ext) {
		if (Yang_Ok != (err = yang_encode_rtpExtensions(header->extensions,buf))) {
			return yang_error_wrap(err, "encode rtp extension");
		}
	}

	return err;
}

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王方帅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值