一、AirPods Auto Switching

先看几张发布会截图。



AirPods现在可以在设备间无缝切换,无需手动操作。

比如:

  • 你刚玩播客,拿起iPad打算看个电视节目,AirPods会神奇的切换过去;
  • 之后你在Mac上开视频会议,AirPods会再一次自动切换过去;
  • 如果有一通电话打进来,AirPods的音频会切换回手机。

二、支持的AirPods


// Apple官网注释
Works with AirPods Pro, AirPods (2nd generation), Powerbeats, Powerbeats Pro, and Beats Solo Pro. Requires an iCloud account, and iPhone or iPod with the latest version of iOS; iPad with the latest version of iPadOS; Apple Watch with the latest version of watchOS; or Mac with the latest version of macOS.

AutoMatic Switching需要的条件有:

  • AirPods 2、AirPods Pro、Beats系列
  • 需要同一个iCloud账户
  • 最新版本的iOS、iPad OS、watchOS、Mac OS

可以看出,1代的AirPods是不支持这个特性的。对比1代和2代的配置信息,可以看出2者的主要差别在于W1芯片和H1芯片。

https://support.apple.com/kb/SP792?viewlocale=zh_CN&locale=zh_CN

https://support.apple.com/kb/SP750?viewlocale=zh_CN&locale=zh_CN

三、自动切换的原理

耳机如果要在设备间切换,目前我能够想到的有2种方法:

  • 耳机支持多连接
  • 根据场景自动路由

3.1 多连接

我个人有一个支持多设备连接的Bose耳机,能够同时连接几个设备,它的机制是这样的:

  • 来电优先,来电能够跨设备抢占(猜测是BT SCO通道优先的原因)
  • 媒体场景下,先来的抢占,后来的不发声(BT A2DP先到先得)

3.2 自动路由

目前苹果其实已经使用了这个技术,在iPhone、Apple Watch、AirPods上,无论是哪个设备来电,接听后,都会在AirPods发声。这次更新的AutoMatic Switching应该就是这个功能的扩展,把自动切换的设备从iPhone、Apple Watch,扩展到了iPad、Mac以及原有的设备。

3.3 AutoMatic Switching技术

仍然尝试在Apple官网上查找相关的技术,还真搜索到了一篇相关的。

AVAudioRoutingArbiter

AirPods Automatic Switching is a feature of Apple operating systems that intelligently connects wireless headphones to the most appropriate audio device in a multidevice environment. For example, if a user plays a movie on iPad, and then locks the device and starts playing music on iPhone, the system automatically switches the source audio device from iPad to iPhone.

iOS apps automatically participate in AirPods Automatic Switching. To enable your macOS app to participate in this behavior, use AVAudioRoutingArbiter to indicate when your app starts and finishes playing or recording audio. For example, a Voice over IP (VoIP) app might request arbitration before starting a call, and when the arbitration completes, begin the VoIP session. Likewise, when the call ends, the app would end the VoIP session and leave arbitration.

AirPods自动切换功能是Apple操作系统的一项功能,可以在多设备环境中将无线耳机智能地连接到最合适的音频设备。例如,如果用户在iPad上播放电影,然后锁定设备并开始在iPhone上播放音乐,则系统会自动将源音频设备从iPad切换到iPhone。

iOS应用程序自动参与AirPods自动切换。要使您的macOS应用程序参与此行为,请使用来指示您的应用程序何时开始和结束播放或录制音频。例如,IP语音(VoIP)应用程序可能在开始呼叫之前请求仲裁,并且在仲裁完成后,开始VoIP会话。同样,当呼叫结束时,该应用程序将结束VoIP会话并退出仲裁。

AVAudioRoutingArbiter的一个示例:

func startCall() {let arbiter = AVAudioRoutingArbiter.sharedarbiter.begin(category: .playAndRecordVoice) { deviceChanged, error in// Start VoIP session.}
}func endCall() {// End VoIP session.AVAudioRoutingArbiter.shared.leave()
}

如果对安卓的AudioFocus有一定了解的话,看到这里一定会觉得非常的熟悉。

应用在开始呼叫之前申请仲裁,在呼叫结束之后退出仲裁。这与安卓的AudioFocus不是一样的么?

应用程序在播放声音之前先申请音频焦点,应用使用完成之后,再丢弃音频焦点,应用可以抢占或者锁定音频焦点……参见我的另一篇文章:音频焦点 AudioFocus与Audio Log分析

四、疑问

对于音频焦点AudioFocus的管理,安卓是采用后来抢占、通话锁定的策略;对于Apple的AutoMatic Switching,不知道是如何管理设备间的冲突的。

  • 通话冲突

    • Mac、iPad、iPhone、iPod都有FaceTime通话功能
    • iPad、iPhone、Apple Watch都有蜂窝网络通话功能

    这些设备同时来电的时候,如何进行裁决?

  • 媒体冲突
    • Mac、iPad、iPhone、iPod、Apple Watch都有播放音乐的功能,

    这些设备同时播放的时候如何进行裁决?

  • 跨设备的冲突
    • 某一设备上的来电与另一设备上的媒体播放如何裁决?
  • Apple TV与HomePod
    • 其实Apple TV与HomePod也是能够连接AirPods的,甚至Apple TV还能连接两幅AirPods,并同时发声(也是iOS14的新功能,扩展了iOS13的音频共享功能)

iOS14:AirPods Auto Switching相关推荐

  1. HMI车载开发:汽车与Android的关系:Android Auto

    1:Android Auto 1.1 Android Auto Android Auto是一个Android端的App,是专门为驾驶环境而设计的. 运行Android Auto需要Android 5. ...

  2. Effective Modern C++翻译(3)-条款2:明白auto类型推导

    条款2 明白auto类型推导 如果你已经读完了条款1中有关模板类型推导的内容,那么你几乎已经知道了所有关于auto类型推导的事情,因为除了一个古怪的例外,auto的类型推导规则和模板的类型推导规则是一 ...

  3. 固定定位的盒子使用margin:0 auto;是无法水平居中的,此时该怎么操作呢?

    固定定位的盒子使用margin:0 auto:是无法水平居中的,此时该怎么操作呢? 第一步 第二步 建议 完整小栗子 第一步 定位距离左侧(相对于浏览器)50%,此时盒子左侧是在浏览器中间的 posi ...

  4. 深入原理分析:Airpods空间音频是如何实现5.1,7.1环绕声,杜比全景声的效果

    本文大部分内容来自B站UP主:电丸科技AK的你的AirPods Pro价值翻倍了![人耳是怎么通过声音辨别方位的?]视频 本文核心问题:Airpods空间音频是如何实现5.1,7.1环绕声,杜比全景声 ...

  5. fcpx: FCPX Auto Tracker 自动跟踪插件

    小编今天带你来看 FCPX插件: FCPX Auto Tracker Mac版是一款专为Mac用户定制的fcpx自动跟踪插件,FCPX Auto Tracker插件功能强大,可以直接在FCPX软件里面 ...

  6. margin:auto 与 margin:0 auto 区别

    margin的重要性: 有个不容置疑的事,前端开发人员没有人能够忽视CSS margin的重要性.CSS coding时,margin的使用频率就如同呼吸般频繁,如果我可以说得夸张点的话. margi ...

  7. 解决使用绝对定位absolute后,margin:0 auto居中方法失效

    我们都知道,当给一个块级元素设置宽度后,使用margin:0 atuo可以实现水平上的居中. margin:0 auto的理解是,上下边距为0,左右边距为auto(auto是自动调整大小) 在浏览器中 ...

  8. Hibernate:hbm2ddl.auto =在生产中更新?

    本文翻译自:Hibernate: hbm2ddl.auto=update in production? 是否可以运行使用hbm2ddl.auto=update配置的Hibernate应用程序来更新生产 ...

  9. 转载:使用Auto Layout中的VFL(Visual format language)--代码实现自动布局

    本文将通过简单的UI来说明如何用VFL来实现自动布局.在自动布局的时候避免不了使用代码来加以优化以及根据内容来实现不同的UI. 一:API介绍 NSLayoutConstraint API 1 2 3 ...

  10. C++11:使用 auto/decltype/result_of使代码可读易维护

    C++11 终于加入了自动类型推导.以前,我们不得不使用Boost的相关组件来实现,现在,我们可以使用"原生态"的自动类型推导了! C++引入自动的类型推导,并不是在向动态语言(强 ...

最新文章

  1. IslandViewer4|基因组岛在线预测
  2. div固定大小文字溢出自动缩小_CSS样式更改——框模型、定位、浮动、溢出
  3. 【EventBus】EventBus 使用示例 ( 最简单的 EventBus 示例 )
  4. 二十六个月Android学习工作总结
  5. VTK:AnimateActors用法实战
  6. sublime text3 添加到右键菜单
  7. Spring之SpringMVC(四)
  8. 一觉醒来,借呗竟然被封了
  9. linux 查看cpu_作为高级Java,你应该了解的Linux知识
  10. SQL Server之索引
  11. 低版本Eclipse如何快速设置黑色主题
  12. (王道408考研操作系统)第三章内存管理-第一节6-3:非连续分配管理方式之基本分页存储管理之具有快表的地址变换机构
  13. 局域网制作ftp服务器,如何架设内网ftp服务器 搭建ftp yum源
  14. 从零开始学前端:HTML的一些文本格式化标签、快捷键、和特殊符号 --- 今天你学习了吗?(CSS:Day02)
  15. 哲学家都在干些什么_哲学家们都干了些什么——哲学是什么
  16. Shell命令学习笔记
  17. ASUS蓝屏和重装系统之后驱动问题总结
  18. 数据库中的左连接和右连接的区别
  19. 手机设备唤醒计算机,手机微信实现网络唤醒电脑(WOL),远程开机,WakeOnLan – 全栈笔记...
  20. 云服务器 宿主机,腾讯云专用宿主机CDH-独享云主机 独享物理服务器

热门文章

  1. R语言学习记录:sample()函数
  2. 盛世昊通上市美国纳斯达克,基建建设任重而道远
  3. web前端设计与开发期末作品/期末大作业:我的家乡——走进达州(4页) HTML+CSS+JavaScript
  4. uoj #172. 【WC2016】论战捆竹竿
  5. 当前安全设置不允许下载该文件的解决办法
  6. python break怎么用_怎么使用Python中的break
  7. 2003年高考语文全国最高分_最新消息!2020高考语文数学题型大变!全国卷或有多套题...
  8. 专属圣诞树+2022跨年HTML(腾讯云部署)
  9. html 实现音乐的波形,GitHub - wanlixi/html5-audio: 展示html5提供的强大的音频控制API...
  10. PHP输出JSON格式数据