A2DP和AVRCP是传统蓝⽛的两种⾼层应⽤协议。⼀般来讲,在市⾯的应⽤产品中,⽀持A2DP的蓝⽛产品都有⽀持AVRCP。
那么,两者是怎样配合使⽤?⼜各⾃扮演者什么⾓⾊呢?⼜是分别如何实现的呢?
电脑切换器
1)A2DP,Advanced Audio Distribution Profile。规定了使⽤蓝⽛⾮同步传输信道⽅式,传输⾼质量⾳频护具的协议栈软件及使⽤⽅法。例如可以使⽤⽴体声蓝⽛⽿机来收听来⾃⾳乐播放器的⾳乐; 2)AVRCP,Audio Video Remote Control Profile。顾名思义,是指遥控功能,定义了控制⾳频 视频流的特征及协议。⼀般包括pause,stop,replay,⾳量控制等远程控制操作。例如,使⽤蓝⽛⽿机可以暂停,切换下⼀曲等操作来控制⾳乐播放器。
1. A2DP的实现
1)A2DP Profile定义了⾼质量⾳频数据传输的协议和过程,包括⽴体声和单声道数据的传输。这⾥的⾼质量⾳频指的是单声道(Mono)和⽴体声(Sterco)的⾳频,主要区别于蓝⽛SCO链路上传输的普通语⾳,当然也不包括环绕声。
也就是说:A2DP的⾳质与bluetooth audio是有区别的。Bluetooth audio只能提供voice的⾳质,⽽A2DP能提供mono 或stereo的⾳质。前者传输于SCO Channel上,⽽后者则传输于ACL Channel上。
2)A2DP的典型应⽤是将⾳乐播放器的⾳频数据发送到⽿机或⾳箱。由于蓝⽛提供的带宽较窄,⾳频数据可能需要进⾏有效的压缩才能保证接收端的实时播放。 3) A2DP的实现依赖于GAVDP和GAP,在GAVDP中定义了流连接的建⽴过程,在A2DP中定义流的参数和编、解码过程。
4)A2DP定义了两个 role: SRC:⾳频数据流的源;SNK:⾳频数据流的接收者。
5)A2DP建⽴在AVDTP传输协议的基础之上,AVDTP规定了链接是如何建⽴的,连接建⽴好之后,⾳频数据经过压缩之后,便可以收发了。⾳频数据是双向的。
PCM码流,需要很⼤的带宽,即低效⼜费电,不适合⽆线传输。因此需要编码压缩之后,再进⾏传输。
A2DP要求SRC和SNK⾄少要⽀持低于复杂度⾃带编解码(Low Complexity Subband Codec,SBC)标准。
除此之外的其他编码标准称为“⾮A2DP编码(Non-A2DP Codec),例如CSR家的APTX,FastStream等,注意:
如果SRC端以⾮A2DP Codec格式发送流数据到SNK,⽽SNK不⽀持⾮A2DP Codec格式的话,SRC会重新以SBC⽅式编码再发送。
其中,低复杂度⾃带编解码(SBC)是专门为蓝⽛⾳视频设计的,它可以在中等传码率下获得较⾼的⾳频质量,并且具有较低的计算复杂度。
在信令交互的过程中,需要发现蓝⽛设备的SEP并获得其服务能⼒,如果SEP具有SBC解码能⼒,那
么需要对SBC有关参数进⾏配置,相关参数如下:
采样频率(48K,44.1K,32K,16K)
声道模式(Mono,Dual Channel,Stereo)块长度(4,8,12,16)
⼦带(4,8)
分配⽅法(SNR、LOUDNES)
BitPool(2~250)
决定传码率的编解码信息包含于SBC数据帧头部,并且和⾳频数据流⼀起被不断的发送 到SNK
6)limitation:
⽬前A2DP只定义了点对点的⾳频传输,没有定义⼴播式的⾳频传输,可能是由于速率的原因。
由于射频信号的传输、数据流的编、解码等,在SRC和SNK之间有延迟(例如⾼通参考设计设置为500ms)。
⾳频数据速率必须⼩于蓝⽛连接的⽐特率。
2. AVDTP--A2DP的基础协议
1)概念:
(1) AVDTP(AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL)。是⽤来描述⾳频/视频在蓝⽛设备间的传输的协议,是A2DP协议的基础协议,其在协议栈中的位置如下:
AVDTP协议建⽴在connection-oriented L2CAP channel上,只能⽀持point-to-point signaling。
(2)Stream代表两个A/V设备之间流多媒体数据的端到端的逻辑连接。
(3)Stream End Point (SEP):应⽤程序通过这个接⼝提供Transport Services and AV capabilities来建⽴Stream。
(4)Stream End Point Identifier (SEID):标识Stream End Point的。
(5)Stream Context (SC):两端设备都有的关于Stream的信息。
(6)Stream Handle (SH):主要是暴露给⽤于程序使⽤的。
(7)Media Packets, Recovery Packets, and Reporting Packets:根据三种不同的数据类型,有这三
种数据包。其中,Basic Service会⽤到Basic service,Report service会⽤到Reporting Packets,Recovery service会⽤到Recovery Packets,此外Multiplexing service会⽤到Media Packets和其余⼀种或两种Packet。
(8)Transport Session:⼀条stream可以分解为多个transport sessions,每个transport session对应⼀个AVDTP 的packet category ,which means Media, Recovery, or Reporting packets。
(9)Transport Session Identifier (TSID):标识Transport Session。
(10)Transport Channel:通常和⼀个L2CAP Channel对应。不⽤AVDTP Multiplexing Mode时,⼀条Transport Channel只传输⼀个transport session;⽤transport session的情况下,⼀条Transport Channel可以传输多个transport session(media,report或者recovery)。
(11)Transport Channel Identifier (TCID):标识Transport Channel,唯⼀关联⼀条L2CAP channel。
炫轮2)A2DP的连接:
AVDTP连接的建⽴⾸先依赖于L2CAP连接的建⽴,它会在同⼀条ACL Link上建⽴两条L2CAP Channel,⼀条是⽤来Signaling,另⼀条⽤来进⾏Stream,report和recovery的传输。
(1)Signaling的主要过程为:1.DISCOVER 2.GET_CAPABILITIES 3.SET_CONFIGURATION 4.OPEN 5.START。
>1. ⾸先使⽤Stream_End_Point_Discover命令发现ACP中的流端点,主要⼯作是要去查询远
端的蓝⽛设备(需要远端蓝⽛设备的地址,这个地址是唯⼀的)可以提供的SEP ,每个SEP
可以提供⼀些服务。
远端的蓝⽛设备会返回⼀个respond,respond包含⼀些信息,最重到是有多少个SEID,媒体服务类型等信 息并不⼗分重要,服务类型可以通过Get_Capablities来获得。然后从中选择将要建⽴的流端点。发送 Stream_End_Point_Discover命令之后,会获得很多个SEID,牛蒡去皮机
>2. 然后就要发送Get_Capabilites命令来获得每个SEP所能提供的服务。(⼀个SEID代表⼀个SEP)具体的服 务类型,以及字段detail 参见AVDTP 的⼿册。我们感兴趣的是,蓝⽛设备(例如蓝⽛头戴式设备)是否拥 有SBC解码的能⼒,A2DP规定,蓝⽛⽴体声⽿机必须⽀持SBC解码,其他的解码⽅式是可选的,有关SBC 的内容要参见A2DP协议。
>3. 再使⽤Set_Configuration命令对流端点进⾏配置,通过Get_Capabilites,可以知道 SEP 可
以⽀持的服务,然后根据服务类型再进⾏⼀下具体的配置。需要配置⾳频的声道,采样率等
信息。当然配置的时候,要给出SEID参数,指明对哪个SEP进⾏配置。
后桥壳
>4. 最后就是启动流Stream_Start,如果某个SEP 具有Audio Media的服务,那么打开⼀个stream,给出SEID参 数,stream 是对应某个SEP。开启stream之后,就可以利⽤write 系统调⽤向socket⾥写⾳频数据了,写的 时候不需要再指明具体的SEID。
链路建⽴好之后,就可以进⾏数据传输,建链的过程,属于AVDTP 协议的内容, ⽽传输的内容要符合A2DP的规定,当然A2DP 与AVDTP是密不可分的。
(2)State Machine如下,共有6个状态:IDLE、Configured、OPEN、STREAMING、Closing、Aborting。
雨水循环系统其中:
>1. IDLE状态指的是流连接没有建⽴但L2CAP信道已经打开;
树脂粘土
>2. Configured状态指SEP的配置完成;
>3. OPEN状态指流连接已经建⽴;
>4. STREAMING状态指参数已经配置完毕,进⾏流的分发。
>5. Closing状态指关闭SEP的状态
>6. Aborting状态指Abort流连接
(3)Procedure汇总