深夜提醒

现在是深夜,建议您注意休息,不要熬夜哦~

🏮 🏮 🏮

新年快乐

祝君万事如意心想事成!

share-image
ESC

领克车机改造记:自己写个音乐 App 装进车里

我对领克这套车机的语音和播放器都不满意,最直接的原因是:听我自己的歌,还要我买它的会员

所以我自己写了个车机版音乐 App,装进车里:曲库在我自己的服务器上,方向盘上的语音键说一句”播放稻香”,它就去我的曲库里找,然后放出来。

在车机上搜周杰伦

为什么不用原厂的

  • 原厂那套播放器(亿咖通做的「随心听」)只认它自己的在线曲库。我那 1449 首在自建存储上的歌,它根本看不见。
  • 语音助手是百度 DuerOS:说”播放稻香”,它会去云端搜,没登录先回你一句”请您先登录”;登录了,它放的还是它的曲库。
  • 车机是 Android 4.4.3,而且是 user 版本、没有 root。能做的事情天生受限。

结论就是:指望原厂改,不如自己写一个。

车机的底细

先摸硬件和系统。领克 CS11,飞思卡尔 i.MX6,Android 4.4.3(API 19)。我把 MusicFree 那套曲库搬到车上,用原生 Java 写了个车机版:一个列表 Activity + 一个播放 Service,曲库在构建时从我的 MusicFree 插件里抽成 JSON 打进 APK。

4.4 有三个坑,全是踩过才记住的:

  1. 没有 MediaSession(那是 5.0 才有的东西)。方向盘上的媒体键走 ACTION_MEDIA_BUTTON 广播 + RemoteControlClient,谁注册成”当前媒体客户端”,按键就发给谁。
  2. MediaPlayer.setDataSource(路径) 是让 mediaserver 进程去开这个文件(API 21 以后才改成 app 自己开好 fd 传过去)。app 私有目录默认 0700、文件 0600,mediaserver 连目录都进不去,直接报 setDataSourceFD failed: status=0x80000000。把缓存目录设成 0755、缓存文件 0644 就通了。
  3. 边下边播喂的是还没下完的 .part,4.4 的 AwesomePlayer 对太小的文件 sniff 不出格式,报的还是上面那个错。实测 300K 左右必挂、1.8M 正常,所以 4.4 上我把起播门槛抬到 1M(API 21+ 保持 512K 秒开)。

最难的一块:让语音听我的

我没打算重做语音识别——唤醒词、麦克风、降噪都在系统那套里,重做一遍不划算。我想要的只是”它听清之后,听我的”。

抓了一遍包,发现 DuerOS 把”播放稻香”变成了一条普通广播

action = com.baidu.car.radio.QUERY
extras = query=稻香, audio_list={"type":"music","list":[],"error":6001}

原厂随心听收这条、要登录、播不出来;我也注册同一个 action,拿到 query 去搜我自己的曲库——歌就放上了。

代价是:这是无序广播(有序=false),abortBroadcast() 挡不掉原厂那一份。所以最后靠的是抢音频焦点(它一开播我就抢回来)和把我的播放页顶到前台,把原厂那页压下去。

顺手把车上 77 个原厂 APK 全拉下来归档了。语音服务的 AIDL、车况接口、埋点上报都翻了一遍,也发现它其实留了”媒体应用自报能力”的正规接口——那是下一步的事。

顺手做的几件事

  • 上电自动续播:车机启动会发 BOOT_COMPLETED / FIRST_BOOT_COMPLETED,我加了个 receiver 把播放服务拉起来,接着上次那首、上次的位置继续放(4G 没起来就先等网络,不然会被当成”放不了”直接跳歌)。
  • 点播一律从头放:之前”续播位置”会漏到新点的那首歌上,听着很像鬼故事。
  • 队列永远是整个曲库:搜索只是”找到这首歌”的入口,否则搜出来只有两三首,切歌只能在里面打转。
  • 网络电台:525 个台,国家台、省市广播、网络电台都能听。
  • 播放页:黑胶转起来、歌词跟上。
  • 键盘党的优化(今天刚加):拼音首字母搜歌,打 ghsy 出「光辉岁月」,回车直接放第一首,不用再去点列表。

网络电台

播放页:黑胶在转,歌词在上面

边界在哪

  • 车机没 root,pm disable 这类系统操作都做不了,所以对原厂应用我只能是”接管”,做不到”替换”。
  • 远程开门、远程启动那条路我查到了,但没碰:这东西安全攸关,厂家也做了加密和签名,不值得也不该拿自己的车去试。
  • 现在稳定能用的:语音点歌、上车自动续播、中文/拼音搜歌、方向盘切歌、离线缓存。

最后

这件事让我改了个看法:车机里很多东西不是做不到,是没人愿意为”你那点具体需求”去做。而当你有 AI 帮手、又有自己的一套服务(曲库、签名服务都在自己手里),”我不满意”和”我自己写一个”之间的距离,可能只有一个周末。

文章作者:阿文
文章链接: https://www.awen.me/post/9dbc5603.html
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 阿文的博客

评论

0 条评论
😀😃😄 😁😅😂 🤣😊😇 🙂🙃😉 😌😍🥰 😘😗😙 😚😋😛 😝😜🤪 🤨🧐🤓 😎🥸🤩 🥳😏😒 😞😔😟 😕🙁☹️ 😣😖😫 😩🥺😢 😭😤😠 😡🤬🤯 😳🥵🥶 😱😨😰 😥😓🤗 🤔🤭🤫 🤥😶😐 😑😬🙄 😯😦😧 😮😲🥱 😴🤤😪 😵🤐🥴 🤢🤮🤧 😷🤒🤕 🤑🤠😈 👿👹👺 🤡💩👻 💀☠️👽 👾🤖🎃 😺😸😹 😻😼😽 🙀😿😾 👍👎👏 🙌👐🤲 🤝🤜🤛 ✌️🤞🤟 🤘👌🤏 👈👉👆 👇☝️ 🤚🖐️🖖 👋🤙💪 🦾🖕✍️ 🙏💅🤳 💯💢💥 💫💦💨 🕳️💣💬 👁️‍🗨️🗨️🗯️ 💭💤❤️ 🧡💛💚 💙💜🖤 🤍🤎💔 ❣️💕💞 💓💗💖 💘💝💟 ☮️✝️☪️ 🕉️☸️✡️ 🔯🕎☯️ ☦️🛐 🆔⚛️🉑 ☢️☣️📴 📳🈶🈚 🈸🈺🈷️ ✴️🆚💮 🉐㊙️㊗️ 🈴🈵🈹 🈲🅰️🅱️ 🆎🆑🅾️ 🆘 🛑📛 🚫💯💢 ♨️🚷🚯 🚳🚱🔞 📵🚭 ‼️⁉️🔅 🔆〽️⚠️ 🚸🔱⚜️ 🔰♻️ 🈯💹❇️ ✳️🌐 💠Ⓜ️🌀 💤🏧🚾 🅿️🈳 🈂🛂🛃 🛄🛅🛗 🚀🛸🚁 🚉🚆🚅 ✈️🛫🛬 🛩️💺🛰️
加载中...

留言反馈

😀😃😄 😁😅😂 🤣😊😇 🙂🙃😉 😌😍🥰 😘😗😙 😚😋😛 😝😜🤪 🤨🧐🤓 😎🥸🤩 🥳😏😒 😞😔😟 😕🙁☹️ 😣😖😫 😩🥺😢 😭😤😠 😡🤬🤯 😳🥵🥶 😱😨😰 😥😓🤗 🤔🤭🤫 🤥😶😐 😑😬🙄 😯😦😧 😮😲🥱 😴🤤😪 😵🤐🥴 🤢🤮🤧 😷🤒🤕 🤑🤠😈 👿👹👺 🤡💩👻 💀☠️👽 👾🤖🎃 😺😸😹 😻😼😽 🙀😿😾 👍👎👏 🙌👐🤲 🤝🤜🤛 ✌️🤞🤟 🤘👌🤏 👈👉👆 👇☝️ 🤚🖐️🖖 👋🤙💪 🦾🖕✍️ 🙏💅🤳 💯💢💥 💫💦💨 🕳️💣💬 👁️‍🗨️🗨️🗯️ 💭💤❤️ 🧡💛💚 💙💜🖤 🤍🤎💔 ❣️💕💞 💓💗💖 💘💝💟 ☮️✝️☪️ 🕉️☸️✡️ 🔯🕎☯️ ☦️🛐 🆔⚛️🉑 ☢️☣️📴 📳🈶🈚 🈸🈺🈷️ ✴️🆚💮 🉐㊙️㊗️ 🈴🈵🈹 🈲🅰️🅱️ 🆎🆑🅾️ 🆘 🛑📛 🚫💯💢 ♨️🚷🚯 🚳🚱🔞 📵🚭 ‼️⁉️🔅 🔆〽️⚠️ 🚸🔱⚜️ 🔰♻️ 🈯💹❇️ ✳️🌐 💠Ⓜ️🌀 💤🏧🚾 🅿️🈳 🈂🛂🛃 🛄🛅🛗 🚀🛸🚁 🚉🚆🚅 ✈️🛫🛬 🛩️💺🛰️