WebRTC

Android AEC 无效的解决方案

2019-01-23  本文已影响0人  Gobert

Android 端回声消除模块在某些机型上面需要使用 16kHz 的采样率输入,否则将会产生回声问题,为此设计此特殊机型下发服务,在 Android 端启动时查询其是否在此特殊名单中,是则强制为 16kHz 采样率,否则使用默认的 48/44.1 kHz 采样率。

因为只有部分机型才会出现此类问题,并且会不断产生新的机型出现,如果在代码中写 HardCode,那么产品的发布将会很被动,因为随时可能会有新的问题机型产生,为此开发一套特殊机型下发的服务,在 APP 启动时向此服务发起请求,校验此机型是否需要配置为 16KHz,然后再启动 RTC 进行音视频通话。此服务通过 Go 进行开发。

GitHub 地址 :https://github.com/zzlc/rtc-aecm-android

启动服务

启动命令:

go run main.go -addr="127.0.0.1:6688" -prefix="/v1/aecm/" -user="root" -password="123456"

实际部署后根据实际目标名称进行启动,但启动参数不变,可通过 -h 查看帮助。

Android 端查询接口

API 查询接口提供两种,一是查询指定 Model 是否存在于此白名单列表中,二是查询所有的白名单列表;

1、查询指定 Model

这里及以后均假设 SEV_ADDR 即为 服务器地址。

Request Url:
SEV_ADDR/v1/aecm
Method: OPTIONS

Request Headers:
model=xxx

Result:
200 ok

通过返回 http status 判断 xxx 是否在白名单中,200 为是,否则为 否。

2、查询所有白名单

Request Url:
SEV_ADDR/v1/aecm
Method: QUERY

Result:
200 ok
Content type: text/json
body: json string

如果返回 200 ok,则说明查询成功,可通过 content body 的 json string 进行解析,格式如下:

{
    "7": {
        "author": "gobert",
        "brand": "postman_brand",
        "insertTime": "2019-01-10 15:19:37",
        "model": "redmi_note4",
        "osVersion": "Android 6.2",
        "packageName": "com.org.xxx",
        "sdkVersion": "0.0.0"
    },
    "8": {
        "author": "gobert",
        "brand": "postman_brand",
        "insertTime": "2019-01-10 15:19:39",
        "model": "redmi_note4",
        "osVersion": "Android 6.2",
        "packageName": "com.org.xxx",
        "sdkVersion": "0.0.0"
    }
}

添加新机型

通过以下 API 即可添加

Request Url:
SEV_ADDR/v1/aecm
Method: ADD

Request Headers:
osVersion=Android 6.2
brand=postman_brand
model=xxx
sdkVersion=1.0.0
packageName=com.org.xxx
author=gobert

Result:
200 ok

删除已有机型

Request Url:
SEV_ADDR/v1/aecm
Method:DELETE

Request Headers:
model=xxx

Result:
200 ok
上一篇下一篇

猜你喜欢

热点阅读