metartc5_jz源码阅读-yang_push_h264_encodeVideo

该代码片段详细描述了如何在YangRtcSession上下文中,使用H264编码对视频数据进行RTP封装,并根据不同payload_type处理,最后发送到P2P对端。涉及到的步骤包括填充RTP头、处理不同格式的数据、添加padding以及更新发送统计。
摘要由CSDN通过智能技术生成
//编码rtp的视频buffer,发送给p2p对端。
int32_t yang_push_h264_encodeVideo(YangRtcSession *session, YangPushH264Rtp *rtp,
		YangRtpPacket *pkt) {
	int err = 0;
	//用videoRtpBuffer中的数据填充rtp->buf.
	yang_init_buffer(&rtp->buf, yang_get_rtpBuffer(rtp->videoRtpBuffer),	kRtpPacketSize);

	//用pkt->header中的数据填充rtp->buf
	if ((err = yang_encode_rtpHeader(&rtp->buf, &pkt->header)) != Yang_Ok) {
		return yang_error_wrap(err, "rtp header(%d) encode packet fail",
				pkt->payload_type);
	}

	//如果payloadType为raw,则从rtp->videoRawData中读取数据填充rtp->buf
	if (pkt->payload_type == YangRtspPacketPayloadTypeRaw) {
		err = yang_encode_h264_raw(&rtp->buf, &rtp->videoRawData);
	} else if (pkt->payload_type == YangRtspPacketPayloadTypeFUA2) {
		//如果payloadType为FUA2,则从rtp->videoFua2Data中读取数据填充rtp->buf
		err = yang_encode_h264_fua2(&rtp->buf, &rtp->videoFua2Data);
	} else if (pkt->payload_type == YangRtspPacketPayloadTypeSTAP) {
		//如果payloadType为STAP,则从rtp->stapData中读取数据填充rtp->buf
		err = yang_encode_h264_stap(&rtp->buf, &rtp->stapData);
		yang_reset_h2645_stap(&rtp->stapData);
	}

	if (err != Yang_Ok) {
		return yang_error_wrap(err, "rtp payload(%d) encode packet fail",
				pkt->payload_type);
	}
	//如果padding_length大于0时,则增加header的size.
	if (pkt->header.padding_length > 0) {
		uint8_t padding = pkt->header.padding_length;
		if (!yang_buffer_require(&rtp->buf, padding)) {
			return yang_error_wrap(ERROR_RTC_RTP_MUXER,
					"padding requires %d bytes", padding);
		}
		memset(rtp->buf.head, padding, padding);
		yang_buffer_skip(&rtp->buf, padding);
	}
	//设置video的sendStats,包括rtp包数量、字节数、发送时间戳等。
	session->context.stats.on_pub_videoRtp(&session->context.stats.sendStats,pkt,&rtp->buf);
	
	//调用yang_send_avpacket将rtp包发送给p2p对端。
	return yang_send_avpacket(session, pkt, &rtp->buf);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王方帅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值