任何人都可以通过Android(Nexus播放器)中的蓝牙遥控器(Nexus播放器遥控器)解释语音命令的工作原理吗?

时间:2016-07-27 04:31:41

标签: audio bluetooth android-bluetooth bluetooth-lowenergy

任何人都可以详细说明以下问题吗?

  1. 蓝牙堆栈如何处理音频数据?
  2. 如何处理音频命令?
  3. 我们是否需要任何服务来处理音频数据?
  4. 提前致谢。

1 个答案:

答案 0 :(得分:1)

基本上,BLE上的语音命令需要:

  • 用于减少所需带宽的一些音频编解码器(ADPCM和SBC很常见,OPUS正在出现),
  • 通过BLE的一些音频流方法,
  • 解码并将音频流从BLE守护进程获取到命令处理框架。

在Android世界中,命令处理框架是谷歌酱(关闭),最容易从ALSA设备获取其音频。剩下要做的是从遥控器获取音频到ALSA设备。

所以对于音频流,你要么:

  • 使用自定义的L2CAP频道或自定义GATT服务,这需要一个自定义的Android服务应用程序和/或Bluedroid的修改来处理这些,它需要一种方法将音频流注入ALSA,最有可能带有“循环”音频设备驱动程序,
  • 将音频声明为自定义HID报告,这样,Bluedroid将它们注入内核,然后添加一个自定义HID驱动程序来处理这些报告并公开音频设备。

BLE上的音频不是标准的,因此所有实现都不会做同样的事情。在Nexus Player的情况下,实现使用HID:它流式传输ADPCM音频流,并在HID报告中进行分块。 Android linux内核中有一个特殊的HID驱动程序"hid-atv-remote.c",它除了输入设备外还公开了一个ALSA设备。 Bluedroid没有关于音频的信息,它只是将HID报告从BLE转发到UHID。