车联网Apollo(阿波罗),研究carlife车机端集成及开发,(WeLink,carplay/carlife)
Posted 邓文(desaco)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了车联网Apollo(阿波罗),研究carlife车机端集成及开发,(WeLink,carplay/carlife)相关的知识,希望对你有一定的参考价值。
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景 - https://github.com/ctripcorp/apollo
-- WeLink,carplay/carlife
android车机、WinCE车机、Linux车机和Qnx车机四大车机层的手车互联方案。
四维图新趣驾WeLink,高德地图WINCE车机版。在相对价位更低的低配版本中仅支持CarLife,而高配则仅支持Carplay。
苹果carplay,百度carlife。
-- 汽车牌照及省级缩写:
"京", "沪", "鄂", "湘", "川", "渝", "粤", "港", "鲁", "津",
"浙", "豫", "贵", "青", "琼", "辽", "吉", "藏", "闽",
"冀", "苏", "皖", "赣", "甘", "陕", "新", "澳",
"黑", "宁", "云", "蒙", "晋", "桂" ;
-- CarLife开发总结- https://blog.csdn.net/zjfengdou30/article/details/81808551
百度CarLife是百度推出的车联网解决方案之一,目前分为前装集成与后装安装两种方式提供:
前装项目申请:http://carlife.baidu.com/carlife/caroem/myproj
前装项目申请完成后,得到一个百度渠道号与集成资料
后装源码地址:https://github.com/ApolloAuto/apollo-DuerOS/tree/master/CarLife-Android-Vehicle
apollo-DuerOS- https://github.com/ApolloAuto/apollo-DuerOS/tree/master/CarLife-Android-Vehicle
-- carlife需要改进的地方:(carlife, carplay)
1、和手机内的百度共享离线地图文件(感觉这个最傻,都是自己家的,居然不能共用!);
2、改近使用体验,各种不能连接、不能接打电话、不能使用自己的歌单……
3、插线导航的时候手机发烫严重,因为屏幕一直是亮的!
-- CarLife的开发完成,主要有以下几个工作点:
1. CarLife lib库的集成:lib库主要的功能就是提供CarLife服务数据通道的建立,数据报文的封装与解析,我们需要使用Android.mk文件将其加入Android系统的交叉编译环境中。
2. Usb通信: CarLife的握手与通信主要是通过Android的AOA方式来进行,具体通信方式已经单独作为介绍: USB开发——android AOA开发
3. CarLife视频显示: CarLife主要是采集手机端的视频流,然后通过USB以H.264的方式发送到车机端,车机端针对H.264进行硬解码播放,播放主要用MediaCodec, 具体使用方式已经单独作为介绍 android使用MediaCodec实现异步视频编解码
4. CarLife音频播放: CarLife的音频数据是以PCM流的形式发送到车机端,因此车机端只需要使用AudioTrack创建对应的配置来播放即可,注意音频流数据的字节序大小端是以小端的方式存在的。
-- 研究carlife车机端集成- https://blog.csdn.net/weixin_38148680/article/details/80586255
/**
* 思路:
* 1.连接方式AOA(Android Open Accessory)
* 2.车机端获取USB操作权限
* 3.检测Android 设备是否支持AOA协议
* 4.启动Android 设备的USB配件模式。
* 5.与Android 设备建立USB通信通道。
*/
百度CarLife是一款手机车机互联方案,通过CarLife用户可以将移动设备(Mobile Device,简称MD)上符合驾驶安全的应用通过多屏互动技术分享到车机(Head Unit,简称HU)上显示,并通过车上的触摸屏、硬按键、旋钮操控和麦克风来控制CarLife,此方案能充分利用手机和车机的各自优势,为驾驶员提供安全、丰富的信息娱乐体验。
Carlife 协议规定了五种数据流,控制流(cmd),视频流(video),音频流(Audio),语音流(VR)以及发控流(Touch),其中将音频流分为Media和导航TTS两种类型。协议定义了以下六个TCP socket通道用于传输这些数据流。
1.控制流(Cmd):1个tcp socket通道,主要在车机和移动设备之间传输相关控制消息,比如车载数据、蓝牙自动配对消息、视频初始化消息等。
2.视频流(Video):1个tcp socket通道,主要用于移动设备向车机传输视频编码数据。
3.音频流(Audio):2个tcp socket通道,一个用于传输Media音频流,另一个用于传输导航TTS(Text to Sound)音频流,分别用于移动设备向车机传输音乐和导航语音播报的PCM流。
4.语音流(VR):1个tcp socket通道,主要用于车机向移动设备传输车机mic录制的用户语音数据。
5.反控流(Touch):1个tcp socket通道,主要用于传输车机触摸事件或者按键事件到移动设备端。
针对Android5.0系统以及以上版本的移动设备,可以使用AOA(Android Open Accessory)进行连接。AOA是Google为Android系统提供的一种外设通讯机制。该机制可以通过蓝牙或者USB接口和外设通讯,无需Android系统特殊系统权限,包括root和adb debug,对于CarLife而言,移动设备端不需要获取root权限和打开adb 更高的平台中直接支持,作为一个附加库也被Android 2.3.4(API level 10)支持。AOA2.0在Android4.1(API level 16)及更高的平台中直接支持。在Android移动设备上,Android系统提供标准的Accessory API用于访问外设。采用USB通讯时,外部设备的USB角色为Host,Android移动设备为Device。
基于当前5.0以上的手机占比居高,ADB与AOA连接建议默认使用AOA连接,或者优先使用AOA连接,连接成功后首先检测手机系统的版本号,如果手机系统版本低于5.0则主动切换到ADB模式。
-- 百度CarLife Android车机端黑屏问题
发现与视频头帧sps和pps有关。在ShowFragment里获取了视频的头帧sps和pps,在界面内退出时,销毁了界面,也删除了头帧信息,后面虽然有数据继续传输到车机端,但是缺少了sps和pps就解不了码,因此黑屏。
那为什么手机USB线断开后,再次连接就连得上呢?因为手机USB断开之后,车机端将重新开启ADB,并反初始化各参数,而手机端则停止了视频传输,当再一次连接时,会重发头帧sps和pps,自然可以解码成功。
记下sps和pps数据,但是不能在Activity中记,因为退出时会被销毁,这里在AppManager这个管理Activity的类里记,然后在显示的ShowFragment里需要视频头帧的时候取出,车机视频就不在黑屏。
CarLife安卓车机端- https://github.com/ApolloAuto/apollo-DuerOS/tree/master/CarLife-Android-Vehicle
以上是关于车联网Apollo(阿波罗),研究carlife车机端集成及开发,(WeLink,carplay/carlife)的主要内容,如果未能解决你的问题,请参考以下文章