记录蓝牙采集数据的坑

在sip项目中,快发布的时候出现了一个奇葩问题:直接进行麦克风采集通过网络在设备上播放时,音频正常。但是如果手机连接了蓝牙,通过蓝牙采集再在设备上进行播放时,音频却是断断续续的,和我上一篇文章一样,首先我这边想要确定的是发送之前的问题还是发送之后的问题。

1、如果是发送之前的问题,那么很有可能就是采集有问题,所以我在采集回调里将音频数据写到本地,由于是PCM数据,所以这边写到本地后,用cooleditPro听了之后,发现数据是好的,并没有设备断断续续的现象。

cooleditPro分析截图.PNG

从波形看也是正常的,说明采集是正常的,数据完整,那就有可能是网络组建在组包时出了问题,所以又转去抓包

2、抓包,看发出去的数据是否正常,这边又有一个Wireshark的坑,下篇文章简单介绍一下,从抓包看,发出去的数据的确是有问题。

屏幕快照 2019-07-02 下午2.39.35.png

很明显的数据断断续续,所以我又特地抓了正常数据的包进行对比。


屏幕快照 2019-07-02 下午2.48.21.png

Wireshark坑:直接使用Wireshark抓取手机包时,由于发送在ms级别,导致抓包的时间戳不准确,计算两次数据发送的间隔会有误差,大的有1000ms左右,所以建议以后使用tcpdump抓包

sudo tcpdump -i rvi0 -s 0 -w ./Desktop/xxx.pcap

所以这个问题比较就只能出在采集之后,发出去之前。反正又折腾了很久,发现如果采了之后立马发就是正常的,但是为了其他需求,在采集之后,会缓存一帧,问题就出在这个缓存一帧上。
手机麦克风的每次采集数据大小为370Byte的pcm数据,而蓝牙每次采集的数据大小为1024Byte(我猜测可能是为了不丢数据的原因),每次采集之后设置了回调的数据长度为640Byte。

  • 当第一次系统采集1024B时,回调出去640B,就会剩余384B,当第二次系统采集1024B时,就会瞬间回调出去两个640B的包,这是上层只缓存了一帧,就会丢掉1帧,这就导致了断断续续的产生。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 13,898评论 6 13
  • 后期整理字体以及排版问题,修订不适合的翻译 “A wealth of information. Smart, ye...
    iamzzz阅读 4,097评论 0 0
  • 转:https://blog.csdn.net/acs713/article/details/8740974?ut...
    right_33cb阅读 7,178评论 0 7
  • 前段时间聊天还在说,相机都搁在柜子里睡大觉,是不是要生锈了。淋完雨回来,不顾自己衣服湿了,马上架起三脚架,调试好相...
    橡皮泥7阅读 1,144评论 0 0
  • 30003 赵曼曼 今天再一次拿起花婆婆这本绘本,又重新读了一遍。每一次,都会有不一样的体会。真的是百读不厌! 美...
    小骨_4ef3阅读 3,401评论 0 0