对讲机偶现无声问题分析

简介: 笔记

在新开发的对讲机项目中,遇到了对讲无声问题,该问题直接影响使用。


一、分析现象


测试时,会出现一方说话,另一方没有听到声音,但是对方可以听到信令的声音,说明网络链路是通的。

做出如下猜测:

  1. 音频数据没有发出去,定位对讲端问题
  2. 音频数据发出去了,接收端没有收到,定位服务器问题
  3. 音频数据发出去了,但是没有播放出来,定位接收端播放问题


二、初步定位问题位置


使用展讯的Logel_for_TD工具,抓取cap包

步骤:打开Logel_for_TD工具,点击Option->Device Configuration

3.png


确保CAP LOG勾选上,之后点击开始,复现问题后,保存Log文件。使用Wireshark工具打开cap包,可以看到数据包的详细信息。

经过对比发现,无声log的CAP包如下:

4.png

而有声的CAP如却是这样的:

5.png


容易得出结论,有声时会发送数据包大小为116字节的UDP包进行传送,无声时则没有,故定位问题为按下PTT键时,没有发送音频数据


三、进一步分析,为什么没有发送UDP数据包


没有发送UDP数据包可以有以下几种原因:

  1. 没有获取到音频数据,可能是没有启动录音或者录音器异常导致采集音频失败
  2. 获取到了音频数据,但是没有执行数据发送流程
  3. 有数据,且执行了发送,由于网络原因没有发送成功
    因为Logel_for_TD抓取的cap包为送到网卡的数据,所以基本可以排除网络问题,并且通过Logel_for_TD监测复现问题时的网络环境,-93dbm左右,良好。
    故只剩下1,2两种可能,没有音频数据或者没有执行发送流程。


四、确认音频数据是否获取成功


通过BND平台的debug版本进行测试,从log中看出在问题复现时,获取到的音频数据为0,故确认是录音的问题。


五、分析录音模块


5.1 测试用例测试录音器是否存在问题

对讲APK使用的原生的方案。调用opensl_es库采集和播放音频。参考frameworks/wilhelm/tests/examples/slesTestRecBuffQueue.cpp

该文件中详细叙述了如何使用:

/* Audio Record Test
First run the program from shell:
  # slesTest_recBuffQueue /sdcard/myrec.raw 4
These use adb on host to retrive the file:
  % adb pull /sdcard/myrec.raw myrec.raw
How to examine the output with Audacity:
 Project / Import raw data
 Select myrec.raw file, then click Open button
 Choose these options:
  Signed 16-bit PCM
  Little-endian
  1 Channel (Mono)
  Sample rate 22050 Hz
 Click Import button
*/
在编译该模块后,把生成的可执行文件push到system/bin目录下再按上述测试即可

通过数十次的测试,录音均正常。

5.2 dump音频数据

在复现问题时执行dump命令

adb root 
adb remount
adb shell 
setprop media.dump.path /data/local/media/
setprop media.dump.switch 0x3ff
/data/local/media/目录下生成dump_record_after_vbc.pcm和dump_record_after_express为录音时的数据

可以使用AudacityPortable(提取码:qo80)工具播放裸数据,对比发现,无声时的pcm数据为0,进一步确认了是录音问题

5.3 是否为硬件问题

通过向展讯提供PCB原理图,分析结论硬件电路没有问题

5.4 是否为音频参数问题

使用AudioTester

(提取码:y7rv )获取Music参数,交与展讯分析

正在分析中。。。

5.5 分析是否为录音流程问题

5.5.1 BSP分析

通过抓取对比log发现,有声和无声的log有所不同(PS:这种问题一定要抓对比log)

分析如下:

对比正常log,采集声音异常时,录音流程没有发起,因此无法录到声音。
按键提示音结束后,上层下发sprd_voip_start=false,准备结束voip流程,紧接着录音应用要下发in_read命令,从而进入do_input_standby,结束voip流程的同时开启录音流程。但异常时一直没有下发in_read,导致audio_hw中录音流程没有发起。
异常log中没有这个log:in_read sco stop  and do standby
正常流程如下:
07-22 15:29:11.176   146   330 D AudioPolicyManagerSPRD: stopOutput() outputDesc->mRefCount[AudioSystem::VOICE_CALL] 1
07-22 15:29:11.176   146   329 D AudioPolicyService: AudioCommandThread() processing set parameters string sprd_voip_start=false, io 0
07-22 15:29:11.176   146   329 V AudioFlinger: setParameters(): io 0, keyvalue sprd_voip_start=false, calling pid 146
07-22 15:29:11.176   146   329 W audio_hw_primary: adev_set_parameters, kvpairs : sprd_voip_start=false
07-22 15:29:11.176   146   329 I audio_hw_primary: adev_set_parameters, voip turn off by output
07-22 15:29:11.176   146   364 D audio_hw_primary: sco:out_write stop and do standby
07-22 15:29:11.176   146   364 V audio_hw_primary: do_output_standby in
07-22 15:29:11.176   146   364 W audio_hw_primary: do_output_standby.mode:0 
07-22 15:29:11.176   146   364 V audio_hw_primary: do_output_standby in out
07-22 15:29:11.176   146   364 E audio_hw_primary: out_write: drop data and sleep,out->is_voip is 0, adev->voip_state is 1,adev->voip_start is 0
07-22 15:29:11.196   146  1504 D audio_hw_primary: : in_read sco stop  and do standby
07-22 15:29:11.196   146  1504 V audio_hw_primary: do_input_standby, standby=0, in_devices=0x80000004
07-22 15:29:11.196   146  1504 I audio_hw_primary: do_input_standby, fmUlDlHandle=0x00000000, fm_uldl=0x00000000, pcm = 0xb887b328
07-22 15:29:11.226   146  1504 W audio_hw_primary: start_input_stream in mode:0 devices:80000004 call_start:0, is_voip:0, is_bt_sco:0
07-22 15:29:11.226   146  1504 E audio_hw_primary: select_devices_signal starting... adev->out_devices 0x1 adev->in_devices 0x80000004
07-22 15:29:11.226   146   359 V audio_hw_primary: do_select_devices E
07-22 15:29:11.226   146  1504 I audio_hw_primary: select_devices_signal finished.
07-22 15:29:11.226   146  1504 E audio_hw_primary: start_input_stream pcm_open_0
07-22 15:29:11.236   146  1504 W audio_hw_primary: rec_mode(3), sample_rate(8000)
07-22 15:29:11.236   146  1504 W audio_hw_primary: extendArraySize=118, eq_size=52, dp_size=38
07-22 15:29:11.236   146  1504 I audio_hw_primary: record process module created is successful.
**请上层同事协助客户排查,是否客户自身应用流程有问题。**

5.5.2 流程分析

//这里在1秒钟之内start和stop了output这次output对应的stream 是0 
STREAM_VOICE_CALL = 0;
07-22 15:34:30.126   146   146 D AudioPolicyManagerSPRD: startOutput() output 2, stream 0, session 13
07-22 15:34:30.766   146   308 D AudioPolicyManagerSPRD: stopOutput() output 2, stream 0, session 13
07-22 15:34:30.766   146   307 W audio_hw_primary: adev_set_parameters, kvpairs : sprd_voip_start=false
这次声音导致voip关闭了,正常的对讲最好是将voip打开
打开voip的方法就是在audiorecord和和播录音的那个player的流类型要设置成STREAM_VOICE_CALL 而且这个player要跟record一起stop。

根据展讯建议,播放Tone音不使用STREAM_VOICE_CALL,我测试去掉了TONE音,但是问题依然存在。

5.5.3 加入log,修改log_level等级分析

最终BND通过修改初始化的buffer大小解决了此问题,对方不愿透露详细信息


目录
相关文章
|
运维 监控 安全
应急实战 | 记一次日志缺失的挖矿排查
应急实战 | 记一次日志缺失的挖矿排查
380 0
|
Nacos
Nacos源码构建报错程序包不存在com.alibaba.nacos.consistency.entity
Nacos源码构建报错程序包不存在com.alibaba.nacos.consistency.entity
1008 0
Nacos源码构建报错程序包不存在com.alibaba.nacos.consistency.entity
|
存储 SQL 关系型数据库
PostgreSQL系统字段cmin和cmax详解
1.cmin和cmax是什么 PG中每个表都包含了一些系统字段,其中包括cmin和cmax。 cmin:插入该元组的命令在插入事务中的命令标识(从0开始累加) cmax:删除该元组的命令在插入事务中的命令标识(从0开始累加) 可以在Select命令的输出列表中显式地指定系统字段。
3477 0
|
JavaScript
Vue自定义组件实现类似elementUI的append-to-body功能,将创建的元素插入、挂载到body上面(网页最外层),适用于父元素overflow: hidden、绝对定位fixed的场景
Vue自定义组件实现类似elementUI的append-to-body功能,将创建的元素插入、挂载到body上面(网页最外层),适用于父元素overflow: hidden、绝对定位fixed的场景
Vue3 父组件调用子组件方法($refs 在setup()、<script setup> 中使用)
Vue3 父组件调用子组件方法($refs 在setup()、<script setup> 中使用)
2330 0
|
JavaScript
echarts_自定义graph关系图
echarts_自定义graph关系图
819 0
|
SQL 关系型数据库 数据库
Windows server 2016——SQL server 简介与安装
Windows server 2016——SQL server 简介与安装
599 0
|
数据采集 数据可视化 定位技术
倾斜摄影教程:无人机航拍后使用ContextCapture生成 3D模型
倾斜摄影建模利用多角度影像生成高精度三维模型,广泛应用于城市规划、遗产保护等领域。通过无人机拍摄与专业软件处理,实现真实感强、自动化程度高的实景建模。
倾斜摄影教程:无人机航拍后使用ContextCapture生成 3D模型
|
消息中间件 存储 安全
对象存储OSS产品常见问题之使用中上传图片慢如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。
3410 0
|
数据库 数据安全/隐私保护 数据库管理
Admin简介
Admin简介。
431 1

热门文章

最新文章