音视频--音频实时传输

1. 音频质量提升

实时音频的传输中为了提升音频质量,一般要对音频做特殊处理:降噪、回声消除、自动增益(3A算法)。通过编解码器自身的的算法特性可以实现上述内容。但是也有专门的库来帮助实现对音频质量的提升。speexdsp库可以对声音数据中的高频声音和低频声音进行抑制,并进行降噪。同时speexdsp也提供了3A算法对音频增益。

1.1 speexdsp实现降噪

参考:https://avmedia.0voice.com/?id=54262

下面是使用speexdsp库抑制声音数据中的高频声音、低频声音并进行降噪的示例代码,假设采样率为44100Hz。

#include <stdio.h>
#include <stdlib.h>
#include <speex/speex_preprocess.h>
#define FRAME_SIZE 1024
int main()
{// 创建Speex预处理器SpeexPreprocessState *preprocess_state;preprocess_state = speex_preprocess_state_init(FRAME_SIZE, 44100); // 根据实际采样率调整// 设置预处理参数,包括高频抑制、低频抑制和降噪int enabled = 1;speex_preprocess_ctl(preprocess_state, SPEEX_PREPROCESS_SET_DENOISE, &enabled);speex_preprocess_ctl(preprocess_state, SPEEX_PREPROCESS_SET_AGC, &enabled);speex_preprocess_ctl(preprocess_state, SPEEX_PREPROCESS_SET_DEREVERB, &enabled);// 打开输入文件和输出文件FILE *input_file, *output_file;input_file = fopen("input.raw", "rb");output_file = fopen("output.raw", "wb");if (input_file == NULL || output_file == NULL) {printf("文件打开失败\n");return -1;}short in[FRAME_SIZE];short out[FRAME_SIZE];while (fread(in, sizeof(short), FRAME_SIZE, input_file) > 0) {// 处理输入数据speex_preprocess_run(preprocess_state, in);// 写入处理后的数据到输出文件fwrite(in, sizeof(short), FRAME_SIZE, output_file);}fclose(input_file);fclose(output_file);// 清理资源speex_preprocess_state_destroy(preprocess_state);return 0;
}

编解码

1.1 实时音频传输常用编解码格式

1.2 OPUS编解码

实时传输

抗弱网

1.1 传输层

jitterBuffer(重组)、RTCP、自动重传

1.2 编码层

opus编解码:前向纠错(FEC)、丢包隐藏(PLC)、流量控制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839375.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

项目集成SkyWalking,基于k8s搭建

一、搭建SkyWalking 官方文档&#xff08;英文&#xff09;&#xff1a;skywalking/docs at master apache/skywalking 中文可以使用&#xff1a;GitHub - SkyAPM/document-cn-translation-of-skywalking: [已过期,请使用官网AI文档] The CN translation version of Apache…

使用 Python 发送 TRON-USDT 和 TRX 交易

文章目录 一、前提准备1.1 环境设置1.2 获取钱包地址和私钥二、发送USDT(TRC-20)交易2.1 流程2.2 USDT交易脚本三、发送TRX交易3.1 流程3.2 TRX交易脚本四、注意事项4.1 注意事项4.2 改进后的USDT和TRX交易脚本本文档介绍如何使用Python和tronpy库发送TRON网络上的USDT(TRC-…

Python SSL root certificates

Python3.12安装好之后&#xff0c;pip仍然指向旧的3.11版本&#xff1a; ~ % pip --version pip 23.3.1 from /Library/Frameworks/Python.framework/Versions/3.11/lib/python3.11/site-packages/pip (python 3.11) 需要删除旧的3.11路径 &#xff08;MAC 版本&#x…

解决脚本刷服务器导致卡顿宕机的问题

在互联网服务领域&#xff0c;自动化脚本的不当使用或恶意攻击可能会导致服务器资源被过度消耗&#xff0c;从而引发服务响应缓慢甚至系统崩溃。特别是在电商、游戏、社交平台等领域&#xff0c;这种现象尤为常见。本文将深入探讨脚本刷服的常见形式、其对服务器性能的影响&…

在Spring Boot项目中集成和使用MQTT

在物联网&#xff08;IoT&#xff09;应用中&#xff0c;MQTT&#xff08;消息队列遥测传输&#xff09;协议因其轻量级和高效性被广泛使用。在Spring Boot项目中&#xff0c;我们可以通过集成org.springframework.integration:spring-integration-mqtt依赖来实现对MQTT的支持。…

Android 日志等级设置

一、LOG等级设置 1、Java设置 系统Log等级 public static final String LOG_CMD_TAG = "persist.log.tag";public static void setSystemLogLevel(String level) {Log.d(TAG, "setSystemLogLevel: " + level);SystemProperties.set(LOG_CMD_TAG, level)…

计算机专业实习生应该去哪实习?

计算机专业实习生可以选择在各种不同类型的公司和组织中实习。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 这取…

Harmony学习笔记一——项目创建及配置

文章基于Harmony Next Preview2 进行学习&#xff0c;其他版本可能会稍有不同 准备工作 由于目前Harmony Next仅有Preview版本&#xff0c;想要进行Harmony Next开发需要向华为申请权限&#xff0c;具体操作参考: https://developer.huawei.com/consumer/cn/forum/topic/02081…

MySQL查询---单、多表实例

目录 一、素材准备 建表 插入数据&#xff1a; 二、单表查询 三、多表查询 要求&#xff1a; 步骤&#xff1a; 1、建立新的数据库db_calss&#xff0c;以及按照要求建立student表 2.查看已经建立表的属性&#xff0c;并按照要求修改年龄字段属性 3.按照要求建立SC表 …

AI播客下载:Create Like the Greats(主题是AI和市场营销)

《Create Like the Greats》是由Ross Simmonds主持的播客&#xff0c;旨在深入探讨创业、创造过程中的各种问题和挑战。该播客专注于揭示成功创作者的背后故事和策略。 该播客的第一集详细讲述了MasterClass如何建立起一个价值28亿美元的教育科技帝国。这一集不仅展示了Master…

数据科学的守护者:数据治理与安全在大规模数据提取项目中的角色

数据科学的守护者&#xff1a;数据治理与安全在大规模数据提取项目中的角色 随着数据科学的迅猛发展&#xff0c;大规模数据提取项目已成为企业、研究机构和政府等各个领域不可或缺的一部分。然而&#xff0c;伴随着数据的快速增长和复杂性的增加&#xff0c;数据治理与安全问…

stm32学习-光敏传感器控制蜂鸣器

接线 GPIO配置 初始化GPIO 1.使用RCC开启GPIO时钟 void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); 作用&#xff1a;外设时钟控制(根据外设连接的总线选择要开启的时钟&#xff09; RCC_AHBPeriph/RCC_APB2Periph/RCC_APB1Periph&#x…

视觉里程计的融合方法及优缺点分析

视觉里程计是视觉slam的一部分&#xff0c;即前端部分&#xff0c;用于前端跟踪并建立局部地图。多用于重定位或辅助定位&#xff0c;常用的有特征点法&#xff0c;光流法和直接法&#xff0c;其区别和优缺点如下。 特征点法&#xff0c;需要计算特征点和描述子&#xff0c;计算…

Qt 文件模型(QFileSystemModel)详细介绍

一.定义 Qt提供了QFileSystemModel类&#xff0c;用于在Qt应用程序中展示文件系统的数据。QFileSystemModel类是QAbstractItemModel的子类&#xff0c;可以方便地将文件系统的文件和文件夹结构作为数据模型&#xff0c;供Qt的视图类&#xff08;比如QTreeView、QListView等&…

5、HTTP header注入(详解)

1、知识补充 本篇主要演示user-Agent和Cookie注入 以下是一些可能的HTTP header注入点&#xff1a; User-Agent: 有些网站可能会记录并分析访问者的User-Agent字符串以了解用户的浏览器和设备信息。如果这些信息被用于动态生成SQL查询&#xff0c;并且没有进行适当的输入验证或…

卡到BUG了:删除重发白得积分(以前删除会扣减积分)

以前是&#xff1a;删除文章&#xff0c;积分减少&#xff0c;点赞积分减少&#xff0c;从回收站回复文章&#xff0c;积分恢复&#xff0c;点赞数恢复但点赞积分不恢复。也就是删除重发总积分减少点赞的积分&#xff0c;有损失。 今天是&#xff1a;删除文章&#xff0c;积分不…

【Android】Gradle插件全局配置/Gradle插件下载源配置

gradle插件概念 gradle发行包和gradle插件是两个东西&#xff0c;可以理解为maven版本与maven依赖项的关系。gradle插件由项目路径中的build.gradle文件进行管理&#xff0c;相当于pom.xmlsettings.xml&#xff0c;同时记录依赖项和依赖仓库。是一个依赖项&#xff0c;从指定仓…

检索增强生成RAG的概念及参考架构

大家好&#xff0c;自ChatGPT火爆以来&#xff0c;大语言模型&#xff08;LLMs&#xff09;驱动的智能应用如雨后春笋般涌现&#xff0c;迅速改变了我们与世界互动的方式。在众多智能AI应用架构中&#xff0c;RAG&#xff08;检索增强生成&#xff09;架构以其独特的优势和强大…

MySQL数据库单表查询中查询条件的写法

1.使用比较运算符作为查询条件 ; !; >; >; <; <; 如上图所示&#xff0c;可以使用命令select 字段&#xff0c;字段 from 表名 where Gender “M”; 即挑选出Gender “M” 的教师&#xff0c; 如上图所示&#xff0c;可以使用命令select 字段&#xff0c;…

Python | Leetcode Python题解之第107题二叉树的层序遍历II

题目&#xff1a; 题解&#xff1a; class Solution:def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:levelOrder list()if not root:return levelOrderq collections.deque([root])while q:level list()size len(q)for _ in range(size):node q.popl…