CSR8675项目实战:BlueBrowsing蓝牙播放器

Posted NiceBT

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CSR8675项目实战:BlueBrowsing蓝牙播放器相关的知识,希望对你有一定的参考价值。

为了让CSR867x的开发更容易,现与思度科技联合推出CSR867x学习板【淘宝链接:思度科技CSR开发板】

技术交流QQ群号:743434463
开发板会员QQ群号:725398389(凭订单号入群,赠PPT、项目源码、视频教程)
——————————正文分割线———————————–

#1. 引言
BlueBrowsing是一款蓝牙播发器,支持串流蓝牙音频到本地播放,支持显示当前播放的歌曲信息。

AVRCP协议可用来传递歌曲信息,示意图如下:

在CT和TG间需要建立两个AVCTP通道——control channel和browsing channel。

AVRCP specific commands中的GetItemAttributes使用browsing channel传输媒体信息:

上述表格中的Attribute ID见下表:

CSR8675的sink例程支持AVRCP browsing,需修改工程属性后重新编译运行:

#2. 主要功能
系统框图如下:

主要功能有:

  • 音频I2S输出,主模式,采样率44.1K
  • 支持串口输出歌曲名、歌手、歌词、歌曲时长、播放进度
  • 支持串口控制手机播放、暂停、上下曲
  • 支持SBC,AAC,AptX,AptX-HD解码

#3. 项目难点
##3.1. 不显示歌曲时长
修改sink_avrcp.c代码如下:

/* media attributes to retrieve from TG - this is only limited track data that can be filtered down to only return the required information */
const uint8 avrcp_retrieve_media_attributes_basic[AVRCP_NUMBER_MEDIA_ATTRIBUTES_BASIC * 4] = 
                                                        0, 0, 0, AVRCP_MEDIA_ATTRIBUTE_TITLE,
                                                        0, 0, 0, AVRCP_MEDIA_ATTRIBUTE_ARTIST,
                                                        0, 0, 0, AVRCP_MEDIA_ATTRIBUTE_ALBUM,
                                                        0, 0, 0, AVRCP_MEDIA_ATTRIBUTE_PLAYING_TIME;

##3.2. 不显示歌曲封面
在AVRCP V1.6中添加了对歌曲封面的支持,但需要CSR8675支持obex连接。

Browsing functionality is provided over a second AVCTP channel, which does not use AV/C. Functionality to transmit images associated to media items (‘Cover Art’) is provided through the protocol defined in the Bluetooth Basic Imaging Profile (BIP) over OBEX protocol.

CSR8675有包含obex连接的库函数,在\\src\\lib\\obex路径下,但官方例程没有给出obex的用法,难度很大,因而放弃了。

#4. 总结
项目最终实现了用AVRCP协议传输歌曲信息,并且在开启了QQ音乐的“车载蓝牙歌词“功能后,可以在蓝牙播放器端获取到歌曲歌词。但此功能在各手机平台上的支持程度不同,例如苹果手机不支持获取歌曲播放进度,令人费解。

以上是关于CSR8675项目实战:BlueBrowsing蓝牙播放器的主要内容,如果未能解决你的问题,请参考以下文章

CSR8675项目实战:BlueEarphone 左右声道各10个Speaker EQ

CSR8675项目实战:BlueHiFi蓝牙音乐收发器

CSR8675项目实战:BlueHiFi蓝牙音乐收发器

CSR8675的学习笔记:驱动正交编码器

CSR8675的学习笔记:驱动正交编码器

CSR8670项目实战:BlueCar蓝牙音频网关