据说,国外车展上,CarPlay已经成为了地摊货,凡参展的厂商都成为的标配(有同样待遇的还有Google的Android Auto)。但由于我朝特色,至今未能一睹这俩位的真容(其实是水平不行,领导不带着去看车展)。网络上的只言片语多是重复拷贝的内容,没有什么有价值的东西。只是最近从Apple开放的其它协议上,已提供部分CarPlay集成规范,因此,本文从开发者的角度上,介绍下CarPlay到底是个什么东西!
(盗了Apple官网的图)
1. 简介
CarPlay定义了车载信息系统(IVI)如何与运行iOS的设备之间交互数字内容(包括,Video,Audio&Metadata)。这些内容以流(CarPlay无非是流媒体应用的变种罢了)的形式发送到车载系统上,Apple称车载系统为Accessory(其它外设也如此称呼)。CarPlay只允许运行在车辆与仪表盘结合的IVI系统上(想把CarPlay显示到后座的同学可以洗洗睡了),同时,CarPlay要求有声音的输出功能及Microphone输入。
集成CarPlay的车载系统只能在Apple指定的支持CarPlay功能的国家销售(http://www.apple.com/ios/feature-availability/#applecarplayapplecarplay),这里已经有China了,不过现在还拿不到,估计是流程问题。
集成CarPlay还需要大量其他协议的理解,包括:USB 2.0(HID, NCM, OTG),Apple Bonjour Service,TCP/IP,IPv6,NTP,H.264等等。
2. 硬件需求
高清显示屏:至少800*480分辨率,24Bit色深与30Hz的刷新率。
解码能力:支持H.264解码
输入设备:触摸屏,或者至少有选择键与回退键的旋钮
声音设备:Microphone输入与Speaker输出
按键:Siri按键与CarPlay按键
传感器:用于辅助导航定位的传感器
接口:USB Type A型的接口
放手机的位置:可能是Apple怕把手机摔坏了,挺贵的。。。
3. 软件结构
iOS8.3之前的CarPlay使用USB连接,现在增加了Wifi的支持,不过考虑到充电的问题。。。;USB要求使用OTG接口,这是由于物理层连接要求设备做Host,车机做Device,因此必须使用OTG的角色互换协议HNP。设备与车机通信采用USB NCM网络模型,IPv6协议。
CarPlay是一个基于认证的解决方案,因此,车机侧必须集成Apple的认证IC,同时提供认证的通信接口(I2C驱动)。
CarPlay的服务发现基于Apple的Bonjour实现,这部分在Apple的网站上可以下载。
CarPlay协议与Apple的另一个协议iAP2紧密结合,CarPlay会话建立之前,都是标准的iAP2 Host Mode通信。
集成CarPlay,Apple会提供一个叫做CarPlay Communication Plugin的插件,完成了CarPlay协议的封装,没有这个,集成的事可以先放放了;深度合作者(估计是捐了钱的)可以优先拿到这个。
CarPlay的UI画面,是使用H.264压缩,串流到车机侧显示,采用H.264 HP3.1/3.2 Profile,最大码率25Mbps。
CarPlay的Audio比较麻烦,分为俩大类:Main Audio与Alternative Audio。Main Audio包括娱乐系统的Audio,电话的Audio,Siri的Audio等等;Alterative Audio包括一些提示音什么的,这些个Audio之间有一个复杂的管理逻辑,在CarPlay的协议中进行了描述。
另外,CarPlay给车机传输的所有流都是加密的,密钥要与认证IC通信才能算出(这玩意整得跟个机顶盒似的,难道。。。?)
4. 协议
都是基于HTTP文本的定义,估计Apple都给封好了,东西不全,不确定是否有工作量。