对讲机偶现无声问题分析

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

一、分析现象

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

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

二、初步定位问题位置

使用展讯的Logel_for_TD工具,抓取cap包
步骤:打开Logel_for_TD工具,点击Option->Device Configuration


image.png

确保CAP LOG勾选上,之后点击开始,复现问题后,保存Log文件。使用Wireshark工具打开cap包,可以看到数据包的详细信息。
经过对比发现,无声log的CAP包如下:


无声-2.png

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

有声-2.jpg

容易得出结论,有声时会发送数据包大小为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大小解决了此问题,对方不愿透露详细信息

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,884评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,755评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,369评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,799评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,910评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,096评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,159评论 3 411
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,917评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,360评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,673评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,814评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,509评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,156评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,123评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,641评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,728评论 2 351