背景

使用webrtc进行语音通话,网络正常的情况下,延迟比较大。

进行过如下分析:

(1)从socket收包到webrtc处理完音频没有耗时长的操作,排除了webrtc处理音频引入的延迟

(2)与其他终端进行通话无延迟

通过以上的分析,最终确认跟设备有关。分析发现Android设备存在重采用的问题。

重采样的原因

音频系统中可能存在多个音轨,而每个音轨的原始采样率可能是不一致的。比如在播放音乐的过程中,来了一个提示音,就需要把音乐和提示音都混合到codec输出,音乐的原始采样率和提示音的原始采样率可能是不一致的。问题来了,如果codec的采样率设置为音乐的原始采样率的话,那么提示音就会失真。因此最简单见效的解决方法是:codec的采样率固定一个值(44.1KHz/48KHz),所有音轨都重采样到这个采样率,然后才送到codec,保证所有音轨听起来都不失真。

但是这样也引入了一个问题:缓冲区大小越高,音频越稳定,但延迟越高,缓冲区设置得太小可能会导致CPU过载,因为它必须更加努力地在相同的时间内提供更多的缓冲区,这将导致播放期间出现毛刺。

解决办法

修改audio_hw.h

将#define SHORT_PERIOD_SIZE (1360*2)修改成

#define SHORT_PERIOD_SIZE (25*2)

java音频采样_音频重采样的坑相关推荐

  1. pcm 8k单声道和双声道采样_音频接口PCM

    1 简介 PCM (Pulse Code Modulation) 是通过等时间隔(即采样率时钟周期)采样将模拟信号数字化的方法.图 1为 4 bit 采样深度的PCM 数据量化示意图.PCM 数字音频 ...

  2. java 转换音频格式_音频格式转换

    我在转换WAV文件的音频格式时遇到麻烦. 我正在从麦克风录制声音,并且声音以以下格式录制:PCM_SIGNED 44100.0 Hz,16位,单声道,2字节/帧 我想将上述格式转换为ULAW 8000 ...

  3. java转换音频采样率_音频采样率转换

    buf_sizePCM = frame_info.samples * frame_info.channels; memcpy(bufferPCM,pcm_data,buf_sizePCM); //采样 ...

  4. 傅里叶变换音频可视化_音频可视化中的信号处理方案

    声明: 原创文章,未经允许不得转载. 音频可视化是一个"听"起来非常"美"好的话题,其复杂程度很大程度上依赖视觉方案(一些例子),不同的视觉方案决定了你的技术方 ...

  5. python音频特征提取_音频特征提取方法和工具汇总

    本文首发于:行者AI 绝大多数音频特征起源于语音识别任务,它们可以精简原始的波形采样信号,从而加速机器对音频中语义含义的理解.从20世纪90年代末开始,这些音频特征也被应用于乐器识别等音乐信息检索任务 ...

  6. python增大音频音量_音频数据增强及python实现

    博客作者:凌逆战 博客地址:https://www.cnblogs.com/LXP-Never/p/13404523.html 音频时域波形具有以下特征:音调,响度,质量.我们在进行数据增强时,最好只 ...

  7. python音频特征提取_音频特征提取——librosa工具包使用

    作者:桂. 时间:2017-05-06  11:20:47 前言 本文主要记录librosa工具包的使用,librosa在音频.乐音信号的分析中经常用到,是python的一个工具包,这里主要记录它的相 ...

  8. 音频剪切_音频编辑入门指南:剪切,修剪和排列

    音频剪切 Audacity novices often start with lofty project ideas, but sometimes they lack the basics. Know ...

  9. 电脑显示未安装任何音频输出设备_音频频谱分析仪插件Voxengo SPAN Plus介绍及安装教程...

    SPAN Plus是用于专业声音和音乐制作应用程序的实时"快速傅立叶变换"音频频谱分析仪AAX,AudioUnit和VST插件.SPAN Plus是免费SPAN插件的扩展版本:SP ...

最新文章

  1. KeyedVectors python 从词向量文件中快速生成{词:词向量}
  2. 网络推广外包——网络推广外包指出新站上线前一定要做好自我检测
  3. 指针常量 和 指向常量的指针区别
  4. vue 数组长度_深入理解Vue的数据响应式
  5. php点击查看更多,微信小程序加载更多和点击查看更多功能介绍
  6. Workflow Core + asp.net core 5.0 实现简单审批工作流
  7. mysql1000w数据怎么加索引_给mysql一百万条数据的表添加索引
  8. matlab 引号内变量,MATLAB 7.0 单引号内变量现实问题!
  9. jquery的基本使用-入口函数
  10. unity5, Configurable Joint: Anchor, Connected Anchor, Auto Configure Connected Anchor
  11. 用gambit学博弈论---零和博弈
  12. win7查询计算机硬盘sn,电脑win7系统查询硬盘序列号的方法
  13. QT中双击mdiArea区域打开文件(监听双击事件)
  14. 侦探系列-照片隐藏信息提取
  15. matlab读lExcel文字,matlab读取excel文件及其数据处理
  16. 基于redis实现抢红包功能(包括余额退回处理)
  17. 通俗易懂理解几何光学(二)共轴球面系统与理想光学系统
  18. AI2的mosaic和Aristo项目简介
  19. Hyperledger Explorer 区块链浏览器
  20. 视频怎么制作虚化边框背景的效果?

热门文章

  1. 【剑指offer】面试题47:礼物的最大价值(Java)
  2. python中的变量的作用_Python中的变量作用域
  3. centos安装php服务器,在CentOS上安装搭建PHP+Apache+Mysql的服务器环境方法
  4. rk3288 android编译环境搭建,RK3288系统编译及环境搭建
  5. python编程环境安装包_Python环境安装与配置
  6. 医院计算机管理工资,医院工资管理系统的设计与开发
  7. 吉林大学计算机英语成绩,吉林大学复试出结果,初试分差84分,复试成绩却相差无几!...
  8. mysql 8 修改root密码忘记_忘记mysql8或者mariadb5及以上 的root密码如何更改
  9. POSIX互斥锁api函数
  10. 图像处理 --- 二、数字图像处理基础