metartc5_jz源码阅读-yang_encode_rtpExtensions

//定义metartc的rtp扩展,标准的webrtc不定义任何头扩展,这个由开发者自定义。
int32_t yang_encode_rtpExtensions(YangRtpExtensions* ext,YangBuffer* buf){
	 int32_t err = Yang_Ok;

        //写两个字节0xBEDE,扩展头标识,开发者自己定义。
	    yang_write_2bytes(buf,0xBEDE);

	    // Write length.
	    int32_t len = 0;

        //如果有twcc则加上它的length
	    if (ext->twcc.has_twcc) {
	        len += yang_rtpExtensionTwcc_nb(&ext->twcc);
	    }

        //如果音频level有扩展,则添加其length
	    if (ext->audio_level.has_ext) {
	        len += yang_rtpExtensionOneByte_nb(&ext->audio_level);
	    }

        //将len进行4字节对齐,不足时补足最后的4个字节。
	    int32_t padding_count = (len % 4 == 0) ? 0 : (4 - len % 4);
	    len += padding_count;

        //如果buf的长度不足以存放扩展头,则输出error。
	    if (!yang_buffer_require(buf,len)) {
	        return yang_error_wrap(ERROR_RTC_RTP_MUXER, "requires %d bytes", len);
	    }

        //写len到buf中,len / 4我理解是为了减少len的长度,接收端在乘以4后获得实际长度。
	    yang_write_2bytes(buf,len / 4);

	    // Write extensions.
        //使用 TWCC,接收方让发送方知道每个数据包的到达时间。让发送者测量数据包之间到达延迟的变化,以及识别哪些数据包丢失或到达太晚而不能提供音频 / 视频源。随着这些数据的频繁交换,发送方能够快速调整以适应不断变化的网络条件,并使用诸如 GCC 的算法改变其输出带宽。
	    if (ext->twcc.has_twcc) {
	        if ((err = yang_encode_rtpExtensionsTwcc(&ext->twcc,buf)) != Yang_Ok) {
	            return yang_error_wrap(err, "encode twcc extension");
	        }
	    }

        //写入audio_level的头扩展
	    if (ext->audio_level.has_ext) {
	        if (Yang_Ok != (err = yang_encode_rtpExtensionsOneByte(&ext->audio_level,buf))) {
	            return yang_error_wrap(err, "encode audio level extension");
	        }
	    }

	    // add padding
	    if (padding_count) {
	        memset(buf->head, 0, padding_count);
	        yang_buffer_skip(buf,padding_count);
	    }

	    return err;
}

oer_encode_to_buffer 返回-1 通常表示编码过程出现了错误。OER 是一种将数据转换为二进制编码的协议,用于在网络间传输和存储数据。 当 oer_encode_to_buffer 返回 -1 时,可能有以下一些原因: 1. 数据结构不允许被正确编码:编码器只能处理特定类型的数据,并且可能不支持某些类型的数据。如果传入的数据类型不允许被正确编码,将返回 -1。 2. 缺少必要的数据:某些编码过程可能需要一些必要的数据,如果缺少这些数据,可能会导致编码失败并返回 -1。 3. 编码器内部错误:编码器可能存在内部错误或者 Bug,导致无法正确编码数据。这种情况下,可能需要检查编码器的版本或者更新。 4. 内存不足:在将数据编码为二进制时,可能需要分配额外的内存空间。如果可用内存不足以完成编码操作,那么编码器可能会返回 -1。 为了解决这个问题,可以进行以下一些尝试: 1. 确认传入的数据类型是否符合编码器的要求,确保对应的函数和参数正确使用。 2. 检查是否提供了必要的数据并确保数据的正确性。 3. 确保编码器的版本与所使用的软件或库兼容,并尝试更新编码器的版本。 4. 检查可用内存是否足够,并尝试释放一些内存空间或者增加可用内存。 如果以上措施无效,还可以查阅相关文档、搜索错误消息或者咨询开发人员社区,以获得更具体的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王方帅

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

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

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

打赏作者

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

抵扣说明:

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

余额充值