一通电话是怎样通过蓝牙从一部手机到另一部的?
经常有人问:卡在另一部手机里、也没联网,iPhone 怎么会响铃?下面一步步讲讲这段旅程,不堆术语(好吧,有一点点)。
连接:低功耗蓝牙
两部手机一直保持一条低功耗蓝牙(Bluetooth LE)连接,和智能手表用的是同一种:耗电极低,范围大约一个大房间,不需要 Wi-Fi 网络或路由器。
在传任何东西之前,两部手机会先互相确认:自己就是你扫码配对的那一对,并为这次会话协商新的加密密钥。此后的一切都是加密的。
1. 安卓手机响铃
卡上来了一通电话。安卓手机上的 iTell 察觉到后,向 iPhone 发送一条带来电号码的、简短的加密“响铃”消息。
2. iPhone 显示来电
iPhone 把来电交给 Apple 的 CallKit,也就是各类通话 App 用的那套系统。所以来电会出现在 iPhone 真正的通话界面上,锁屏也一样,并从通讯录里显示来电人姓名。
3. 你接听
iPhone 通知安卓手机接起电话,安卓手机用自己的卡接通。
4. 声音开始双向流动
这是最巧妙的部分。安卓手机拿到对方的声音,用语音编码器(Opus)压缩成小数据包,每秒大约 50 个。每个包都加密后经蓝牙送到 iPhone,iPhone 解密后在你耳边播放。你的声音也沿同一条路返回。
一个小缓冲区负责抹平抖动,因为蓝牙送包是一小簇一小簇的。整个往返足够短,听起来就像普通电话。
5. 你挂断
iPhone 通知安卓手机结束通话,两边屏幕恢复原样。
那短信和通讯录呢?
短信、通讯录和通话记录走的是同一条加密连接,在后台传输,优先级低于语音。所以即使通讯录正在同步,通话也始终流畅。
为什么通话音质跟机型有关
每家安卓厂商处理通话音频的方式都略有不同。iTell 内置兼容性检测,会在你的手机上尝试几种方式并保留效果最好的。少数机型只能单向收听;我们会提前说清楚,并在关于我们页面维护已测机型列表。