webrtc agc

2024-01-13 14:58
文章标签 webrtc agc

本文主要是介绍webrtc agc,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://blog.csdn.net/xmdxcsj/article/details/50166615

一、参数
(一)、mode
  enum Mode {
    // Adaptive mode intended for use if an analog volume control is available
    // on the capture device. It will require the user to provide coupling
    // between the OS mixer controls and AGC through the |stream_analog_level()|
    // functions.
    //  
    // It consists of an analog gain prescription for the audio device and a
    // digital compression stage.
    kAdaptiveAnalog,

    // Adaptive mode intended for situations in which an analog volume control
    // is unavailable. It operates in a similar fashion to the adaptive analog
    // mode, but with scaling instead applied in the digital domain. As with
    // the analog mode, it additionally uses a digital compression stage.
    kAdaptiveDigital,

    // Fixed mode which enables only the digital compression stage also used by
    // the two adaptive modes.
    //  
    // It is distinguished from the adaptive modes by considering only a
    // short time-window of the input signal. It applies a fixed gain through
    // most of the input level range, and compresses (gradually reduces gain
    // with increasing level) the input signal at higher levels. This mode is
    // preferred on embedded devices where the capture signal level is
    // predictable, so that a known gain can be applied.
    kFixedDigital
  };


kAdaptiveAnalog 
适合用desktop platforms,模拟信号可控音量
kAdaptiveDigital 
适合用mobile device,没有音量控制
kFixedDigital 
固定增益
(二)、parameter
以下摘自于 http://rg4.net/archives/797.html 
——————————————- 
AGC parameters: 
——————————————- 
1. Target level DBFS 
——————————————- 
According to the description of webrtc: 
Change of this parameter will set the target peak |level| (or envelope) of the AGC in dBFs (decibels from digital full-scale). 
The convention is to use positive values. 
For instance, passing in a value of 3 corresponds to -3 dBFs, or a target level 3 dB below full-scale.

Value range: limited to [0, 31].

TODO(ajm): use a negative value here instead, if/when VoE will similarly update its interface. 
——————————————- 
2. Compression gain DB 
——————————————- 
Sets the maximum |gain| the digital compression stage may apply, in dB. A higher number corresponds to greater compression, while a value of 0 will leave the signal uncompressed.

Value range: limited to [0, 90]

——————————————- 
3. Enable limiter or not 
——————————————- 
When enabled, the compression stage will hard limit the signal to the target level. Otherwise, the signal will be compressed but not limited above the target level.

——————————————- 
4. Analog level limits 
——————————————- 
Sets the |minimum| and |maximum| analog levels of the audio capture device. 
Must be set if and only if an analog mode is used.

Value range: limited to [0, 65535].

——————————————- 
5. Stream saturated or not 
——————————————- 
Returns true if the AGC has detected a saturation event (period where the signal reaches digital full-scale) in the current frame and the analog level cannot be reduced. 
This could be used as an indicator to reduce or disable analog mic gain at the audio HAL. 
以上摘自于 http://rg4.net/archives/797.html

二、使用
由于不同版本的代码差距较大,首先声明下面使用例子来自于下面的commit

commit 99f8566524b3764bf84b7f4cbd8232bdf6c142a5
Author: kjellander <kjellander@webrtc.org>
Date:   Sun Nov 29 20:50:44 2015 -0800


使用自动增益控制放大的音量比较有限,所以使用了固定增益模式

int agcTest2(char *filename, char *outfilename, int mode)
{
    //init agc
    void *agcInst = WebRtcAgc_Create();
    int minLevel = 0;
    int maxLevel = 255;
    int agcMode  = kAgcModeFixedDigital;
    int fs       = 16000;
    int status   = 0; 
    status = WebRtcAgc_Init(agcInst, minLevel, maxLevel, agcMode, fs);
    if(status != 0)
    {
        printf("failed in WebRtcAgc_Init\n");
        return -1;
    }
    WebRtcAgcConfig agcConfig;
    agcConfig.compressionGaindB = 20;//在Fixed模式下,越大声音越大
    agcConfig.limiterEnable = 1;
    agcConfig.targetLevelDbfs = 3;   //dbfs表示相对于full scale的下降值,0表示full scale,越小声音越大
    status = WebRtcAgc_set_config(agcInst, agcConfig);
    if(status != 0)
    {
        printf("failed in WebRtcAgc_set_config\n");
        return -1;
    }


    //alloc
    FILE *infp=fopen(filename,"r");
    int nBands = 1;
    int frameSize = 160;//10ms对应于160个short
    short **pData = (short**)malloc(nBands*sizeof(short*));
    pData[0] = (short*)malloc(frameSize*sizeof(short));
    short **pOutData = (short**)malloc(nBands*sizeof(short*));
    pOutData[0] = (short*)malloc(frameSize*sizeof(short));

    //process
    FILE *outfp = fopen(outfilename,"w");
    int len = frameSize;
    int micLevelIn = 0;
    int micLevelOut = 0;
    while(len > 0)
    {
        memset(pData[0], 0, frameSize*sizeof(short));
        len = fread(pData[0], sizeof(short), frameSize, infp);

        int inMicLevel  = micLevelOut;
        int outMicLevel = 0;
        uint8_t saturationWarning;
        status = WebRtcAgc_Process(agcInst, pData, nBands, frameSize, pOutData, inMicLevel, &outMicLevel, 0, &saturationWarning);
        if (status != 0)
        {
            printf("failed in WebRtcAgc_Process\n");
            return -1;
        }
        if (saturationWarning == 1)
        {
            printf("saturationWarning\n");
        }
        micLevelIn = outMicLevel;
        //write file
        len = fwrite(pOutData[0], sizeof(short), len, outfp);
    }
    fclose(infp);
    fclose(outfp);

    WebRtcAgc_Free(agcInst);
    free(pData[0]);
    free(pData);
    free(pOutData[0]);
    free(pOutData);


代码使用参考:webrtc/modules/audio_processing/gain_control_impl.cc
--------------------- 
作者:xmucas 
来源:CSDN 
原文:https://blog.csdn.net/xmdxcsj/article/details/50166615 
版权声明:本文为博主原创文章,转载请附上博文链接!

这篇关于webrtc agc的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/601844

相关文章

雷动WEBRTC产品

http://www.rtcpower.com/html/leidongwebrtc.html ; 1.前言      WebRTC是一项在浏览器内部进行实时视频和音频通信的技术,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得一项技术。WebRTC实现了基于网页的视频会议,标准是WHATWG 协议,目的是通过浏览器提供简单的javascript就可以

Apple quietly slips WebRTC audio, video into Safari's WebKit spec

转自:http://www.zdnet.com/article/apple-quietly-slips-webrtc-audio-video-into-safaris-webkit-spec/?from=timeline&isappinstalled=0 http://www.zdnet.com/article/apple-quietly-slips-webrtc-audio-video-

WebRTC-nack机制详解

1.NACK的含义 丢包重传(NACK)是抵抗网络错误的重要手段。NACK在接收端检测到数据丢包后,发送NACK报文到发送端;发送端根据NACK报文中的序列号,在发送缓冲区找到对应的数据包,重新发送到接收端。NACK需要发送端,发送缓冲区的支持。 WebRTC中支持音频和视频的NACK重传。我们这里只分析nack机制,不分析jitterbuffer或者neteq的更多实现。 2.WebRTC

828华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp

828华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp 华为云最近正在举办828 B2B企业节,Flexus X实例的促销力度非常大,特别适合那些对算力性能有高要求的小伙伴。如果你有自建MySQL、Redis、Nginx等服务的需求,一定不要错过这个机会。赶紧去看看吧! 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新

WebRTC协议下的视频汇聚融合技术:EasyCVR构建高效视频交互体验

视频汇聚融合技术是指将来自不同源、不同格式、不同网络环境的视频流进行集中处理、整合和展示的技术。随着视频监控、远程会议、在线教育、直播娱乐等领域的快速发展,视频数据的规模急剧增长,对视频处理能力和效率提出了更高要求。视频汇聚融合技术通过统一的平台或系统,实现了视频资源的有效整合与高效利用,为用户提供了更加丰富、灵活的视频服务体验。 一、EasyCVR视频汇聚平台关键技术 视频编解码:采用高效的

华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp

华为云征文|华为云Flexus X实例docker部署srs6并调优,协议使用webrtc与rtmp 什么是华为云Flexus X实例 华为云Flexus X实例云服务是新一代开箱即用、体验跃级、面向中小企业和开发者打造的高品价比云服务产品。Flexus云服务器X实例是新一代面向中小企业和开发者打造的柔性算力云服务器,可智能感知业务负载,适用于电商直播、企业建站、开发测试环境、游戏服务器、音视

WebRTC协议下的视频汇聚融合技术:EasyCVR视频技术构建高效视频交互体验

视频汇聚融合技术是指将来自不同源、不同格式、不同网络环境的视频流进行集中处理、整合和展示的技术。随着视频监控、远程会议、在线教育、直播娱乐等领域的快速发展,视频数据的规模急剧增长,对视频处理能力和效率提出了更高要求。视频汇聚融合技术通过统一的平台或系统,实现了视频资源的有效整合与高效利用,为用户提供了更加丰富、灵活的视频服务体验。 一、EasyCVR视频汇聚平台关键技术 视频编解码:采用高效的

浅析WebRTC技术在智慧园区视频管理场景中的应用

随着科技的飞速发展,智慧园区作为城市智慧化的重要组成部分,正逐步成为现代化管理的重要方向。智慧园区的建设不仅涉及硬件设施的智能化升级,还离不开高效的视频管理和实时通信技术。在这一背景下,WebRTC(Web Real-Time Communication)技术以其低延迟、高互动性的优势,在智慧园区的视频管理场景中展现出了巨大的应用潜力。 一、WebRTC技术概述 WebRTC是一种开源的网页实

webrtc使用过程中的一些问题

我的使用指的是peerconnection的使用。 1.项目的属性->C/C++->常规->附加包含目录 设置为webrtc源码的src目录。 2.项目的属性->连接器->常规->链接库依赖项设置为:“C:/Program Files (x86)/Windows Kits/10/Lib/win8/um/x86”和 库文件所在目录。 3.具体依赖项可以参考我的方法: ①进入out中对应的输

webRTC源码VS编译指南

2016/7/28 *************************************************************** 置顶重点:新版源码只能用VS2015进行编译,官网的社区免费版需要WIN10,推荐到MSDN下载。 1.下载源码(非常大,建议百度云) 2.安装DEPOT_TOOLS,配置SDK环境。 DEPOT_TOOLS参