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

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

技术预研-总结(一、win自带功能)

Windows中,一般对新加入的硬件设备,采用一个或多个.sys驱动+同名.dll的方式,挂载设备对应的驱动,在.dll中暴露驱动的调用接口(WDM驱动架构)。通常,设备的发布者会在.dll的基础之上,封装出一个SDK的调用接口,或公开该.dll的接口调用示例代码。

Windows中新加入的硬件设备,可以很容易的在【设备管理器】中查看到对应的已添加的设备,用户也很容易在设备管理器中扫描检测新设备、手动添加新设备、查看以及更换设备的驱动程序的操作。Windows自带的蓝牙驱动,通常包括用于传输信令、含有RFComm的驱动,以及用于传输SCO语音的媒体驱动。如下图1所示:

图1 - Windows自带的蓝牙驱动(win10)

我们在项目试验中发现,Windows自带的蓝牙驱动,在XP中不能正常的识别和工作。查阅的资料表明,从win8开始,针对蓝牙部分,微软增加了不少的功能和特性,但遗憾的是,对于我们项目中预期的蓝牙打电话(蓝牙HFP)能力来说,由于它既要求收发基于RFComm的信令,也要求收发基于SCO的语音数据,普通的蓝牙功能在项目上用不上,并且微软并未提供对应的开发接口或者示例出来供开发者进行调用。

最新版本的win10中,微软提供了HFP打电话的UWP示例和对应的底层封装接口,代码调用后,将调用UWP内置的组件进行电话的呼叫。

win10中要求至少21H2(19044.1288)带有UWP电话组件的功能版本(如下图2所示),才能使用由微软提供的开放编程接口进行蓝牙HFP通话的功能实现,但此部分的接口无法提取通话信令,也无法获取sco语音数据(信令和语音数据均由内置的UWP组件直接跟电脑的默认播放和采集的声音设备进行交互)。

 图2 - Win10支持打电话的最低版本

此版本的公开调用示例代码为:GitHub - BestOwl/MyPhone: Connect your mobile devices (Android/iOS/WindowsPhone) to PC

详细的呼叫逻辑,可查看示例代码中的【MyPhone.Demo】或【MyPhone】项目,代码可以在最新的Visual Studio中编译和运行。输入目标手机号并点击呼叫后,将通过PhoneLine对象调用内置UWP组件的方法Dial或DialWithOptions,向UWP组件中传递参数进行呼叫。呼叫过程中产生的诸如来电、振铃、对方接听、挂断等事件,以及SCO消息和语音数据均由内置组件默认接收和响应,调用方的项目无法获取过程信令、状态反馈、以及语音状态和数据。

另外,此示例代码有个很坑的特性:PhoneLine对象只能由UWP项目进行调用,而项目中HFP的示例代码(能使用AT信令操作蓝牙)却只能在非UWP类型的项目中运行才能正常连接,且HFP示例代码和PhoneLine连接不能同时使用。

在本项目的逻辑中,UWP电话组件使用电脑的声音默认设备进行采集和播放(如下图3所示),开发人员可以使用【虚拟声卡】的方式,将电脑的默认录制设备和默认播放设备分别设置成不同的虚拟声卡后,使用Windows中常规的声音读写方式NAudio.Wave从虚拟声卡中分别进行读写操作,进而操控蓝牙SCO通话语音。(通常情况下,不建议修改声音的默认设备)

由于虚拟声卡部分的的选型较为复杂,将在后续单独进行一篇的讲解。(详情可参考《篇外、虚拟声卡选型》中的内容)

图3 - 电脑声音的默认录制设备


上一篇:Windows电脑蓝牙打电话-预研总结​​​​​​​

下一篇:电脑蓝牙打电话-总结(二、InTheHand的C#库)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值