metartc5_jz源码阅读-yang_encode_rtpExtensions

news/2024/6/18 6:48:55 标签: 音视频, p2p, 实时音视频, webrtc
//定义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;
}


http://www.niftyadmin.cn/n/5324668.html

相关文章

HUAWEI华为MateStation S台式机电脑12代PUC-H7621N,H5621N原装出厂Windows11.22H2系统

链接:https://pan.baidu.com/s/1QtjLyGTwMZgYiBO5bUVPYg?pwd8mx0 提取码:8mx0 原厂WIN11系统自带所有驱动、出厂主题壁纸、系统属性专属联机支持标志、Office办公软件、华为电脑管家等预装程序 文件格式:esd/wim/swm 安装方式&#xf…

【期末考试】数据库综合复习宝典

目录 第一章 数据库系统概述 第二章 关系代数 第四章 关系数据库理论 第五章 数据库设计 第六章 数据库管理系统 第八章 事务管理 第一章 数据库系统概述 1.1三级模式 ①外模式:它为特定的应用程序或用户群体提供了一个数据视图,这个视图是独立于…

单表的查询练习

一、单表查询 素材: 表名:worker-- 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等 显示所有职工的基本信息。 mysql8.0 [chap03]>select * from worker; 查询所有职工所属部门的部门号,不显示重复的部门号。 mysq…

Python 利用PYQT5设计基于RSA算法盲签名的匿名化电子支付系统设计与实现

基于RSA算法的盲签名算法 David Chaum 于1982年提出盲签名的概念,并利用RSA算法设计了第一个盲签名方案. 该方案的安全性基于大整数分解问题 盲签名的步骤 1.密钥生成 签名者执行以下步骤生成密钥对: ①签名者选择两个大素数p,q, 计算npq&#xff0…

nginx和CDN应用

一、代理的工作机制 1.代替客户机向网站请求数据,从而可以隐藏用户的真实IP地址。 2.将获得的网页数据(静态 Web 元素)保存到缓存中并发送给客户机,以便下次请求相同的数据时快速响应。 二、代理服务器的…

NLP论文阅读记录 - 2021 | WOS 抽象文本摘要:使用词义消歧和语义内容泛化增强序列到序列模型

文章目录 前言0、论文摘要一、Introduction二.前提三.本文方法3.1 总结为两阶段学习3.1.1 基础系统 3.2 重构文本摘要 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Abstractive Text Summarization: Enhancing Sequen…

Maven和MyBatis框架简单实现数据库交互

MyBatis是一种基于Java语言的持久层框架,它的主要目的是简化与数据库的交互过程。MyBatis通过XML或注解配置来映射Java对象和数据库表之间的关系,并提供了灵活的查询方式和结果集处理机制。MyBatis还提供了事务管理、缓存机制、插件扩展等特性。 使用My…

mysql5.7之从入门到放弃

系列文章目录 第一章 MySQL5.7之从入门到放弃 第二章 MySQL从入门到放弃之数据库体系结构与管理 第三章 MySQL基础应用之DDL、DCL、DML、DQL 第四章 MySQL之多表连接查询、AS别名、扩展内容 文章目录 系列文章目录前言一、Mysql的介绍和安装?1、什么是数据&#xf…