尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Open Headunit项目架构总览:从USB接入到Android Auto投屏的完整数据链路
Open Headunit项目架构总览从USB接入到Android Auto投屏的完整数据链路【免费下载链接】open-headunitHeadunit App for displaying Android Auto项目地址: https://gitcode.com/GitHub_Trending/he/open-headunitOpen Headunit 是一款开源的 Android Auto 投屏接收器应用它能把安卓平板或手机变成一台Android Auto 车机Headunit接收手机端的 Android Auto 画面与音频并全屏呈现。本文带你从源码角度梳理它的整体架构看懂从 USB 接入、SSL 握手、AAP 协议解析到音视频解码投屏的完整数据链路。 Open Headunit 能做什么简单来说它的角色相当于车机里的Android Auto 接收端USB 有线接入手机通过 USB 线连接平板模拟 Android Auto 主机协议通信无线接入支持 Wi-Fi DirectP2P、车机热点、Headunit Server 等多种连接策略Self-Mode 模式同一台设备上既当手机又当车机用于开发调试完整投屏解码手机端推送的视频流并全屏渲染同时输出音频、回传触控与按键事件项目根目录的 README.md 有详细的使用说明与已知问题清单。 四层架构UI、连接、协议、解码Open Headunit 的源码位于app/src/main/java/com/andrerinas/openheadunit/按职责可以划分为四层层级核心目录职责UI 层main/主页、设置、网络列表、自动连接等界面连接层connection/USB / Wi-Fi / Self-Mode 三种接入方式的物理链路管理协议层aap/Android Auto ProtocolAAP消息收发、SSL 握手解码层decoder/音频解码AAC、视频解码H.264 / HEVC连接层内部又按接入方式分目录组织USB 相关connection/usb/含设备识别、权限申请、端点选择等策略Wi-Fi 相关connection/wifi/又细分为direct/Wi-Fi Direct、modes/nativeaa/原生无线协议握手、modes/helper/配合 Wireless Helper 应用Self-Mode 启动器connection/self/launchers/投屏连接抽象connection/projection/定义统一的 ProjectionConnection.kt 接口 完整数据链路从 USB 接入到投屏的 5 步整个连接生命周期由核心类 CommManager.kt 统一管理。它在类注释中直接给出了状态机图CommManager.kt#L40-L67Disconnected → Connecting → Connected → StartingTransport → HandshakeComplete → TransportStarted → Disconnected这正好对应下面 5 个阶段ConnectionState状态定义见 CommManager.kt#L91-L122。步骤 1物理连接建立Connecting → ConnectedUSB 场景UsbReceiver.kt 监听 USB 设备插入广播UsbDeviceIdentityPolicy.kt 判断设备是否是 Android 手机随后申请设备权限并打开 USB 接口。无线场景Wi-Fi Direct 由 WifiDirectManager.kt 负责组建 P2P 群组原生无线模式则由 NativeAaHandshakeManager.kt 完成与 Android Auto 的握手最终建立 TCP 连接。无论哪种方式最终都封装为ProjectionConnectionUSB 直连、libusb 或 Socket 三种实现物理链路就绪后状态推进到Connected。步骤 2SSL/TLS 握手StartingTransport → HandshakeCompleteAAP 协议全程运行在加密通道上。CommManager持有全局唯一的AapSslContext基于 SslContextFactory.kt 构建支持 TLS 会话恢复让断线重连时的握手更快。SSL 完成后状态进入HandshakeComplete并触发投屏界面启动。步骤 3AAP 协议层收发消息TransportStarted传输层由 AapTransport.kt 实现生命周期为startHandshake → startReading → 消息循环。消息采用通道 类型的二进制帧格式具体帧拆分逻辑在 AapMessageFraming.kt。协议消息体由 Protobuf 定义源码在 app/src/main/proto/ 目录common.proto通用消息Hello、ByeBye 等media.proto / playback.proto媒体元数据与播放状态input.proto触控事件与按键事件wireless.proto无线握手相关解密后的每条消息会分发到 AapMessageHandler.kt 处理视频帧、音频帧、媒体信息、触控事件各走各的通道。步骤 4音视频解码音频AudioDecoder.kt 将手机端推来的 AAC 音频流解码后写入 AudioTrackMicRecorder.kt 负责反向采集麦克风上行视频VideoDecoder.kt 处理 H.264 解码HEVC 则走 C 层的 FFmpeg 原生解码器 ffmpeg_hevc_decoder.cpp预编译库在app/src/main/jniLibs/。解码层还配有大量策略类如丢帧恢复、码流背压、关键帧修复保证投屏流畅步骤 5投屏渲染与状态广播AapProjectionActivity.kt 是全屏投屏 Activity解码出的画面渲染在 TextureProjectionView.kt 等视图上触控坐标经 TouchCoordinateMapper.kt 换算后回传给手机。服务层 AapService.kt 是整条链路的总调度它在 AapService.kt#L1037-L1091 的observeConnectionState()中统一观察连接状态流HandshakeComplete时启动投屏界面TransportStarted时开始正式投屏并向自动化工具Tasker 等广播会话状态。 快速上手与源码导航想动手体验的话可以先看 README.md 中的 USB 与无线接入步骤想深入某条链路建议按下面的顺序读源码想看什么从哪里读起连接状态机CommManager.ktUSB 接入全流程connection/usb/Wi-Fi Direct 组网connection/wifi/direct/AAP 消息收发aap/AapTransport.kt视频解码策略decoder/video/投屏界面aap/AapProjectionActivity.kt 小结Open Headunit 的架构非常清晰CommManager 管链路、AapTransport 管协议、Decoder 管解码、ProjectionActivity 管呈现一条USB/Wi-Fi 接入 → SSL 握手 → AAP 消息流 → 音视频解码 → 全屏投屏的单向数据流贯穿始终反向的触控与音频上行则走同样的通道回传。理解了这个数据链路再去阅读各模块源码就会事半功倍。【免费下载链接】open-headunitHeadunit App for displaying Android Auto项目地址: https://gitcode.com/GitHub_Trending/he/open-headunit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

MCP Server 本地跑通,Cherry Studio 模型却调不动?TaoToken 这样改模型服务

MCP Server 本地跑通,Cherry Studio 模型却调不动?TaoToken 这样改模型服务

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/18 18:11:04
openclaw onboard 加飞书渠道,模型凭证那步 Base URL 填 TaoToken

openclaw onboard 加飞书渠道,模型凭证那步 Base URL 填 TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/18 18:11:04
OpenOcta 同时挂 MCP 和 Agent Skills,模型调用走 TaoToken 统一接入

OpenOcta 同时挂 MCP 和 Agent Skills,模型调用走 TaoToken 统一接入

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/18 18:11:04
MORE NEWS

更多资讯

📰

Android App开发基础入门:环境配置、项目结构、界面、存储与打包上架

1. 从零上手 Android App 开发基础,先把认知框架立起来1.1 为什么很多人卡在"装完 Android Studio 就不知道干嘛"我带过几个刚入行的朋友,几乎所有人都经历过同一个尴尬期:Android Studio 装好了,SDK 下完了&#xff0c…

📰

faster-whisper:Whisper 转写提速 4 倍,13 分钟音频只要 17 秒

faster-whisper:Whisper 转写提速 4 倍,13 分钟音频只要 17 秒 【免费下载链接】faster-whisper Faster Whisper transcription with CTranslate2 项目地址: https://gitcode.com/GitHub_Trending/fa/faster-whisper 官方 OpenAI Whisper 在 RTX …

📰

STM32CubeProgrammer安装指南:嵌入式AI固件烧录核心枢纽

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

QPSK在AWGN信道下的MATLAB误码率仿真与3dB偏差排查

简介:本资源为一份面向通信工程、电子信息类专业学生及数字通信入门学习者的MATLAB仿真文档,围绕QPSK调制在加性白高斯噪声(AWGN)信道下的性能展开,适合课程设计、实验报告撰写与通信原理自学参考。压缩包内仅含1个doc…

📰

通达信指数强度副图指标公式详解:从区间位置到条件选股

简介:《通达信指标公式源码指数强度副图指标.doc》是一份面向通达信用户的自定义指标编写教程,聚焦个股与大盘指数强弱对比,帮助投资者通过副图直观识别强势行情与潜在超买信号。文档以源码逐行解析的方式,详细讲解Z、X参数设定、…

📰

基于Vue+Node.js+ElementUI的钢铁生产管理系统设计与实现

接钢厂信息化项目前,这套vuenodejsElementUi的生产系统设计思路你最好先看一遍前两年接了一个钢铁企业的生产管理系统开发需求,技术栈定的是vue nodejs ElementUi,业务覆盖生产计划、工单流转、质检判定、库存跟踪和报表看板。钢铁生产系统…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬