A2DP协议笔记

(2013-07-30 10:07:54)

标签:

a2dp

bluetooth

src

sink

分类: Bluetooth
1.概述

    A2DP(Advanced Audio Distribution Profile)是蓝牙的音频传输协议,典型应用为蓝牙耳机。A2DP协议的音频数据在ACL Link上传输,这与SCO上传输的语音数据要区别。A2DP不包括远程控制的功能,远程控制的功能参考协议AVRCP。AVDTP则定义了蓝牙设备之间数据流句柄的参数协商,建立和传输过程以及相互交换的信令实体形式,该协议是A2DP框架的基础协议。A2DP与相关协议的附属关系如下图:
A2DP在协议栈中的位置如下图所示:

注意下数据包装的过程。
2.A2DP的一些定义
GAVDP定义了两种角色:
Initiator (INT) – This is the device that initiates a
signaling procedure.【发起signaling的】
Acceptor (ACP) – This is the device that shall
respond to an incoming request from
the INT.【响应signaling的】
A2DP在此基础上具体实现了连个角色:
Source (SRC) – A device is the SRC when it acts as a
source of a digital audio
stream that
is delivered to the SNK of the piconet.【输出音频stream的】
Sink (SNK) – A device is the SNK when it acts as a
sink of a digital audio stream delivered
from the SRC on the same piconet.【接受音频stream的】
这里需要注意的是:一般在A2DP中Source和Sink的角色是固定的,而GAVDP的这两个角色是可以互换的,只要是发起signaling的一方就为initiator。
一个Source和Sink的实例:
3.A2DP协议的限制
(1)不支持synchronized point-to-multipoint distribution。
(2)在Source和Sink端存在延迟。
(3)音频数据的速率必须足够小于蓝牙的传输速率。
(4)不提供任何数据保护的方法
 
4.编码
   
传输音频数据必须在Source端编码,在Sink端解码。A2DP规定了下面几种编码类型:

SBC是强制支持的(Mandatory Codec),其余三种可选(Optional
Codec),除了这些外,也可以有厂家自己的编码形式(Vendor Specific A2DP Codecs)。

 
5.SBC编码格式
 
 SBC是A2DP规定的强制支持的编码格式,这里我们具体只讨论这一种编码格式:

参数Sampling Frequency:
 
 
Sink端必须支持44100和48000这两种frequency,Source端支持一种就行。
 
参数Channel Mode:
参数Block Length:
  
参数Subbands:
参数Allocation Method:
 
参数Minimum / Maximum Bitpool
Value:
6.Media Packet Header与Media
payload:
 
  在第一部分数据的包装中可以看出,在每一个Media payload上都会加上Media
packrt header。主要包括以下几个部分:
Timestamp (TS),Payload Type
(PT),Marker (M) bit【置为全0】,Extension (X)
bit【不使用,置为全0】。具体在AVDTP协议中定义,这里不详述。
Media payload的格式如下:

其中Media Payload的Header部分的格式如下:

F bit – Set to 1 if the SBC frame is fragmented,
otherwise set to 0.
S bit – Set to 1 for the starting packet of a fragmented SBC
frame, otherwise set to 0.
L bit – Set to 1 for the last packet of a fragmented SBC
frame, otherwise set to 0
RFA – 置为0.
Number of frames (4 bits) – If the F bit is set to 0, this
field indicates the number of
frames contained in this packet. If the F bit is set to 1,
this field indicates the number
of remaining fragments, including the current fragment. Thus
the last counter value
shall be one. For example, if there are three fragments then
the counter has value 3,
2 and 1 for subsequent fragments. This field is expressed by 4
bit UiMsbf.
 
7.A2DP的通信过程
A2DP规定Sink个Source端有三种状态:IDLE、OPEN和STREAM,通过下图的流程进行状态转换:

Connection Establishment:

前提是L2CAP首先建立signaling Channel.
Start Streaming:
OPEN状态下经过Start Stream 过程就转换到STREAMING状态。
Connection Release:
在OPEN和STREAMING状态下都可以通过Stream Release过程变为IDLE状态。
Suspend:
只能从STREAMING状态通过Stream Suspend过程变为OPEN。
Change Parameters:
分享:



 

0

喜欢

阅读(437)┊
评论 (0)┊ 收藏(0)
┊转载(0) ┊
喜欢▼
┊打印┊举报
已投稿到:

ZT A2DP协议笔记的更多相关文章

  1. A2DP协议笔记

    1.概述     A2DP(Advanced Audio Distribution Profile)是蓝牙的音频传输协议,典型应用为蓝牙耳机.A2DP协议的音频数据在ACL Link上传输,这与SCO ...

  2. ZT 蓝牙的AVDTP协议笔记

    我的电子杂烩饭 http://blog.sina.com.cn/wuchuchu2012 [订阅][手机订阅] 首页 博文目录 图片 关于我 个人资料 Tifnan Qing 微博 加好友 发纸条 写 ...

  3. ZT 蓝牙的AVCTP协议笔记

    蓝牙的AVCTP协议笔记 (2013-07-31 08:52:41) 转载▼ 标签: bluetooth avctp command response 分类: Bluetooth 1.概述     A ...

  4. 蓝牙的AVDTP协议笔记

    1.概述    AVDTP(AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL)是用来描述音频/视频在蓝牙设备间的传输的协议,是A2DP协议的基础协议,其在协议栈中 ...

  5. 蓝牙HID协议笔记【转】

    蓝牙HID协议笔记 转自:http://blog.sina.com.cn/s/blog_69b5d2a50101emll.html 1.概述     The Human Interface Devic ...

  6. LLDP协议、STP协议 笔记

    参考: 数据链路层学习之LLDP 生成树协议 LLDP协议.STP协议 笔记 LLDP 提出背景: 随着网络技术的发展,接入网络的设备的种类越来越多,配置越来越复杂,来自不同设备厂商的设备也往往会增加 ...

  7. MQTT协议笔记之订阅

    前言 记忆不太好的时候,只能翻看以前的文章/笔记重新温习一遍,但找不到MQTT协议有关订阅部分的描述,好不容易从Evernote中找到贴出来,这样整个MQTT协议笔记,就比较齐全了. SUBSCRIB ...

  8. MQTT协议笔记之发布流程

    MQTT协议笔记之发布流程 前言 这次要讲到客户端/服务器的发布消息行为,与PUBLISH相关的消息类型,会在这里看到. PUBLISH 客户端发布消息经由服务器分发到所有对应的订阅者那里.一个订阅者 ...

  9. MQTT协议笔记之头部信息

    前言 记忆不太好的时候,只能翻看以前的文章/笔记重新温习一遍,但找不到MQTT协议有关订阅部分的描述,好不容易从Evernote中找到贴出来,这样整个MQTT协议笔记,就比较齐全了. SUBSCRIB ...

随机推荐

  1. FocusBI:租房分析&星型模型

    微信公众号:FocusBI关注可了解更多的商业智能.数据仓库.数据库开发.爬虫知识及沪深股市数据推送.问题或建议,请关注公众号发送消息留言;如果你觉得FocusBI对你有帮助,欢迎转发朋友圈或在文章末 ...

  2. [PY3]——内置数据结构(2)——元组及其常用操作

    定义和初始化 #tuple() 使用工厂函数tuple定义一个空元组 #() 使用圆括号定义一个空元组 #(1,2,3) 使用圆括号定义有初始值的元组 #tuple(可迭代对象) 把可迭代对象转换为一 ...

  3. JavaScript自增、自减

    JavaScript自增.自减运算符与表达式语法 var i++; var-- 声明变量 i-- 变量名 ++ -- 自增运算符 JavaScript自增.自减运算符与表达式 JavaScript自增 ...

  4. 理解Flexbox:你需要知道的一切

    这篇文章介绍了Flexbox模块所有基本概念,而且是介绍Flexbox模块的很好的一篇文章,所以这篇文章非常的长,你要有所准备. 学习Flexbox的曲线 @Philip Roberts在Twitte ...

  5. get/post 接口调用

    content-type:  application/~~~~~ /// <summary> /// Post数据到网站 /// </summary> /// <para ...

  6. 使用PowerShell为SSAS Role添加Membership

    PowerShell, SSAS, Role, Membership 上篇随笔使用PowerShell创建SSAS Role贴出了如何使用PowerShell批量创建Role,由于个人项目需求,创建R ...

  7. 01.CLR的执行模型

    在非托管的C/C++中,可以进行一些底层的操作     "公共语言运行时"(CLR)是一个可由多种编程语言使用的"运行时"          CLR的核心功能包 ...

  8. hdu 1026 Ignatius and the Princess I 搜索,输出路径

    Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (J ...

  9. 4.spring di

    spring di,即依赖注入,从应用的浅显意义来讲就是对属性赋值 1.用setter赋值,在spring的applicationContext.xml配置文件的bean下的property标签 属性 ...

  10. Inter网关做Team的方法

    1.到Inter官网上找到相关驱动程序 2.在安装过程中,要求勾选高级网络 3.驱动安装完成后,打开网卡的属性窗口,在“分组”选项卡中,勾中,并输入Team名称 4.选择需要做Team的网卡 5.选择 ...