Windows电脑中通过蓝牙拨打电话

技术预研-总结(五、玖云33e9cloud)

前面几个篇章中,对蓝牙打电话的能力进行一定深入的挖掘,但怎么总觉得越寻找越不靠谱。毕竟一会安装这个呼叫信令获取不到、一会安装那个声音质量又有问题、一会不想声音直接播放而希望提取声音出来进一步加工(就这么个简单需求还得装几个虚拟声卡来曲线救国),最重要的是,一个个都还是收费的,连虚拟声卡都单独收费。效果没达到、却一个个挖空心思去打广告、玩授权,真的是服了。

缓过劲来,我们不禁思考,为什么我要按微软的蓝牙框架的逻辑去搜索和实现这一块的功能呢?前面第一篇章我们讲过“Windows自带的蓝牙驱动,通常包括用于传输信令、含有RFComm的驱动,以及用于传输SCO语音的媒体驱动”,但事实上真的如此?我们真的需要这么多繁复冗杂的驱动和调用逻辑?

就以我们手上的10块钱的USB Bluetooth Dongle为例,这玩意对于电脑而言,就是一个纯粹的USB设备,那我把它当作USB字符设备和块设备来进行ioctl和bulk_read/bulk_write不也一样可以?从这个理念出发,上述的什么RFComm驱动、SCO媒体驱动都不过是USB驱动之上的子集。既然是这样,何必还要跟着微软玩?开源社区中对这一块的扩展已经非常的丰富了,反正微软到目前为止,在蓝牙特别是我们预研的这块蓝牙电话领域也没什么建树。

在Windows体系中,有了USB Dongle硬件,下一步需要一个特定的驱动,然后才是在这个驱动上参照示例来实现各种功能的应用。我们在GitHub中很容易就能找到一款USB开源驱动libusb。

下载地址如下:GitHub - libusb/libusb: A cross-platform library to access USB devices

其基于Windows版本的驱动为libusb-win32,编译结果地址为:libusb-win32 download | SourceForge.net

源码地址为:https://github.com/mcuee/libusb-win32

下载后,参照其示例examples/bulk.c 可以正常找到我们的USB设备,并进行打开、关闭。理论上这个驱动应该是有效的,而且驱动很简洁。但是到了这一步,其实我不知道要往里面写哪些数据、以什么格式、什么样的交互时序(也就是所谓的协议),我们只依稀知道内部一定会要按照蓝牙的HFP的协议规范进行数据收发,但是怎么封装、封装之后能不能正常的交互?光靠这个是很难往下走的。

我们不会自己封装,但是丝毫不影响继续往下预研。我们使用libusb-win32的驱动,进行启发性搜索,看看现在这个世界上都有哪些应用会依托于这个开源libusb-win32驱动进行扩展开发,进而寻觅这些应用中是否有蓝牙相关的,最好是有蓝牙打电话能力有关联的应用。

一顿搜索,发现还真有。这就是我们本篇章讲述的玖云33e9cloud方案。(私下不得不感慨互联网的神奇,总是在你所不知道的角落,有一大批人在背后默默努力,所以真的不能闭门造车啊)

玖云33e9cloud官网:虚拟中间号_小号线路_电话呼叫系统__企业语音电话-玖云平台

应用的下载地址为:https://www.33e9cloud.com/uploads/soft/20220701/DialerCloud22_exe.zip

安装包安装后的驱动,在设备管理器中的展示如下图1所示:

图1 - 玖云33e9cloud的蓝牙驱动程序

安装完成后,手动进入电脑目录【C:\Windows\System32\DriverStore\FileRepository】,可以看到仅新安装了一个驱动,如下图2所示:

图2 - 玖云33e9cloud安装的所有驱动程序

使用上次购买的CSR芯片的USB Bluetooth Dongle(设备的VID为0x0A12 PID为0x0001)插入电脑后,不运行其默认的主程序,启动【测试工具-手机呼叫】程序。应用会自动检索插入的USB模块,并进行蓝牙初始化。示例效果如下图3所示,运行后的应用可以正常绑定手机、发起呼叫、接听来电,并能够正常获取得到SCO声音。

图3 - 玖云33e9cloud手机呼叫测试工具

该工具本身并未提供SDK和相关的开发接口,但由于应用采用.Net开发,我们作为科研人员逆向查看了一下逻辑(仅做科研分析,不做商业性的逆向破解,而且不提倡这样做),发现它是通过UDP数据进行交互的。那这就很容易了,我们开启大白鲨Wireshark,直接抓取本地回环(Npcap Loopback Adapter)通道的UDP数据包。再启动该测试工具,得出如下图4的抓包结果,逆向工程的代码如下图5所示:

图4 - 玖云33e9cloud大白鲨Wireshark抓包的数据

图5 - 玖云33e9cloud逆向工程结果(仅研究用)

根据抓包内容和逆向工程的结果来看,这个工具很容易使用和扩展。其使用固定的端口收发UDP的信令和语音数据,而且收到的和发出的语音数据,均为PCM的原始数据格式(根据new WaveFormat(0x1f40, 1)可知其采样率为8000、单声道)。

其信令的目标端口为43652,本地端口随意(抓包中本地端口为43751)。

其媒体的本地监听端口为43703(上行播放的声音),目标的监听端口为43704(下行的话筒声音)。

这样,使用这个工具,根本不需要虚拟声卡,不需要前几篇预研中那些各种杂七杂八的驱动,就可以直接进行蓝牙拨打电话并获取对应的状态信令和媒体语音的直接收发。

逆向工程后的项目也可以直接编译运行,相关示例和抓包结果均已上传百度云。(特别注明:此内容仅用于科学研究和技术探索,不用于商业行为哈

感兴趣的读者可自行下载进行对比,下载地址为:

链接:https://pan.baidu.com/s/1ip6cNaHQeNRWuu1ICdxE7g

提取码:jp4c

根据逆向工程的代码中的逻辑,可以简单列举其信令的收/发的格式内容,如下表1所示。

发出信令

接收信令

(应答)

信令含义(以接收到应答信令为准)

A:S

S:1:蓝牙名称

检测蓝牙是否就绪(1-就绪 其它未就绪)

Z:z

Z:蓝牙地址|名称

开始蓝牙扫描

Z:Z

Z:end

手动停止蓝牙扫描

A:T

主动强制退出蓝牙服务

P:0 / P:1

蓝牙被拔出 / 蓝牙已插入

shutdown/ init_timeout

蓝牙工作状态不正常

B:A:04:10:6B:F5:22:43

A:OK

连接手机04:10:6B:F5:22:43(若未配对则自动配对)

B:B

B:OK

断开已连接的手机

B:G

G:OK

断开通话中的SCO声音

B:H

H:OK

重新连接通话中的SCO声音

AT+CNUM

+CNUM:,"+8619907820504",145,,4

获取手机上SIM卡的手机号

ATD19907820504;

呼叫手机号19907820504

ATA

接听来电

AT+CHUP

挂断电话

+CIEV: x,x (如+CIEV: 1,0)

这一批AT指令,遵循HFP协议

表1 - 玖云33e9cloud测试工具操作的信令一栏表

从上述表1的内容中可以看出,我们想要的控制手机连接、呼叫、通话应答反馈、异常状态反馈,以及我们较为关注的声音数据的收发,在上述格式中均能得到满足(最主要是逆向工程输出的代码,居然可以直接编译后继续运行)。

我们在项目中简单的整合这个示例的逻辑后,试了一下,基本能够满足内容整合的需要,最主要是安装也不麻烦,而且看厂家的描述这个功能也是免费的。最终衡量后,觉得这个方案基本能够满足项目的实际需求,最终确定选用此方案。

至此,蓝牙电话的方案选型结束。

最终的结果为:Windows电脑蓝牙打电话方案,依赖一个USB Bluetooth Dongle硬件,依赖一个外部的安装包。在这个基础之上,我们的应用实现部分的信令和交互逻辑,最终实现电话的相互事件操作和语音媒体的实时传输。

电脑蓝牙打电话-总结(五、玖云33e9cloud)相关推荐

  1. Windows电脑蓝牙打电话-预研总结

    Windows电脑中通过蓝牙拨打电话 技术预研过程-总结 因项目需求,需要在电脑中(一般是Windows系统.不排除后续会对接Mac)直接通过SIM卡拨打手机号进行呼叫的能力.这个能力在Android ...

  2. 电脑蓝牙打电话-总结(三、千月Bluesoleil)

    Windows电脑中通过蓝牙拨打电话 技术预研-总结(三.千月Bluesoleil) 在上述Windows原生方案(利用Windows原装驱动的方案)均被验证不符合项目需求后,从这个阶段开始,迫于无奈 ...

  3. 电脑蓝牙打电话-总结(一、win自带功能)

    Windows电脑中通过蓝牙拨打电话 技术预研-总结(一.win自带功能) Windows中,一般对新加入的硬件设备,采用一个或多个.sys驱动+同名.dll的方式,挂载设备对应的驱动,在.dll中暴 ...

  4. 电脑蓝牙打电话-总结(四、百瑞互联BRLink)

    Windows电脑中通过蓝牙拨打电话 技术预研-总结(四.百瑞互联BRLink) 上一篇章中,我们讲到淘宝花了10块钱买了一个CSR芯片的USB Bluetooth Dongle,后来淘宝卖家给发来了 ...

  5. 电脑蓝牙打电话-总结(二、InTheHand的C#库)

    Windows电脑中通过蓝牙拨打电话 技术预研-总结(二.InTheHand的C#库) 由于上一篇中Windows自带的蓝牙功能有如下限制要求: 需要极高版本的Win10(19044.1288)才能正 ...

  6. 电脑蓝牙已关闭,蓝牙开关不见的故障排除

    电脑蓝牙已关闭,蓝牙开关不见的故障排除 今天突然发现自己的蓝牙鼠标不能用了,打开蓝牙设置,然后惊奇发现连蓝牙开关的按钮都不见了.并且查看了设备管理器,蓝牙也不见了.后来打电话给Dell的客服,使用了以 ...

  7. 科技云报道:巨头云集的云电脑市场,为何小酷云一枝独秀?

    科技云报道原创. 近年来,以云计算技术颠覆传统PC的"云电脑"趋势日渐兴起.用户不用再花高价去配置一台传统电脑,而是根据需求在云端选择任意性能配置的云电脑,即可轻松应对多样化的工作 ...

  8. 平板电脑能打电话吗?如何让不支持电话功能的平板获得电话功能?

    很多选购平板电脑的朋友,都希望平板能够支持打电话功能.那么市面上所有的平板电脑能打电话吗?如果不能够打电话的平板电脑,有没有什么方法支持能够支持让其电话功能.下面我爱电脑网小编将对这个问题给大家座详细 ...

  9. 科技云报道:买电脑,租电脑,OUT!今年流行“云电脑”!

    科技云报道原创. 走进咖啡馆,打开笔记本电脑,进入云电脑桌面,点击Autodesk软件开始3D建模,正在成为设计师们最潮流的办公方式.人们很难想象,需要高算力渲染.高品质视觉.高体验交互的设计行业,有 ...

最新文章

  1. 什么是码元计算机通信
  2. PV-RAFT:用于点云场景流估计的点体素相关场(CVPR2021)
  3. 关于使用sudo命令后找不到JAVA_HOME的问题
  4. Android 异常: failed to connect to localhost/127.0.0.1
  5. 100G 免费技术学习资料大全分享 (2020 年最新)
  6. MySQL优化四(优化表结构)
  7. oracle的aud文件,oracle asm实例的aud文件有关问题
  8. ES6——函数的name属性
  9. windows消息宏(转)
  10. Android:adb 详细介绍
  11. 按键精灵 懒人插件连接mysql_按键精灵的办公插件大全下载-按键精灵懒人办公插件【新版】下载V15.0106.0.2官方免费版-西西软件下载...
  12. 联想台式计算机驱动程序,联想台式机网卡驱动,详细教您联想台式机网卡驱动...
  13. 数据安全平台——DSP
  14. hack the box(5985 WinRM)
  15. 基于WDF驱动模型使用WFP框架进行网络层数据修改
  16. redis中字符串(String)类型常见命令操作 (附有示例)
  17. php 依赖安装顺序6,构建PHP框架:第6部分-依赖倒置,控制倒置,哦,天哪!
  18. DirtyWordsFilter(脏字过滤)
  19. CentOS 官网镜像最新下载地址
  20. 解决CMD命令行窗口不显示颜色问题python

热门文章

  1. 回归预测 | MATLAB实现ANN神经网络多输入单输出
  2. 目前所有的ANN神经网络算法大全
  3. android string 过滤,Android 字符串过滤器InputFilter详解
  4. JAVA连接FTP报530,FTP 登陆提示 530 Please login with USER and PASS
  5. 针对某运维系统监测服务器SNMP及WMI对应硬件状态/性能指标/磁盘IO/日志/进程等相关信息的遇到问题的解决思路
  6. linux常用命令详解
  7. 软件测试工作指导书,软件测试试验指导书.DOC
  8. 《Spring实战》读书笔记-第3章 高级装配,字节跳动四面技术面
  9. 骑缝章 Java_Java实现在PDF中添加骑缝章
  10. 桁架工业机器人编程_工业机器人应用与编程