零. 概述
主要介紹下藍牙協議堆疊(bluetooth stack)傳統藍牙音頻協議之 音視頻分布傳輸協議的封包格式介紹,包括Signaling command,media packet格式介紹,
一. 宣告
本專欄文章我們會以連載的方式持續更新,本專欄計劃更新內容如下:

第一篇:藍牙綜合介紹 ,主要介紹藍牙的一些概念,產生背景,發展軌跡,市面藍牙介紹,以及藍牙開發板介紹,
第二篇:Transport層介紹,主要介紹藍牙協議堆疊跟藍牙芯片之前的硬體傳輸協議,比如基于UART的H4,H5,BCSP,基于USB的H2等
第三篇:傳統藍牙controller介紹,主要介紹傳統藍牙芯片的介紹,包括射頻層(RF),基帶層(baseband),鏈路管理層(LMP)等
第四篇:傳統藍牙host介紹,主要介紹傳統藍牙的協議堆疊,比如HCI,L2CAP,SDP,RFCOMM,HFP,SPP,HID,AVDTP,AVCTP,A2DP,AVRCP,OBEX,PBAP,MAP等等一系列的協議吧,
第五篇:低功耗藍牙controller介紹,主要介紹低功耗藍牙芯片,包括物理層(PHY),鏈路層(LL)
第六篇:低功耗藍牙host介紹,低功耗藍牙協議堆疊的介紹,包括HCI,L2CAP,ATT,GATT,SM等
第七篇:藍牙芯片介紹,主要介紹一些藍牙芯片的初始化流程,基于HCI vendor command的擴展
第八篇:附錄,主要介紹以上常用名詞的介紹以及一些特殊流程的介紹等,
另外,開發板如下所示,對于想學習藍牙協議堆疊的最好人手一套,以便更好的學習藍牙協議堆疊,相信我,學完這一套視頻你將擁有修改任何協議堆疊的能力(比如Linux下的bluez,Android下的bluedroid),

-------------------------------------------------------------------------------------------------------------------------
CSDN學院鏈接(進入選擇你想要學習的課程):https://edu.csdn.net/lecturer/5352?spm=1002.2001.3001.4144
藍牙交流扣扣群:970324688
Github代碼:https://github.com/sj15712795029/bluetooth_stack
入手開發板:https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-22329603896.18.5aeb41f973iStr&id=622836061708
藍牙學習目錄:https://blog.csdn.net/XiaoXiaoPengBo/article/details/107727900
--------------------------------------------------------------------------------------------------------------------------
二. AVDTP封包格式
2.1 AVDTP Signal封包格式

以上就是Signal的header format,可以看到分3種封包格式:
1)單一封包
2)開始封包,一般用于封包大小>MTU的拆包的第一個封包
3)繼續封包和結束封包,一般用于封包大小>MTU的繼續封包和結束封包
下面我們來講下引數:
Transaction Label:傳輸標示,4bit,INT角色來填寫一個值,ACP必須回送一樣的值
Packet Type:封包型別,有以下幾種

Message Type:訊息型別,有以下幾種

Signal Identifier:信令識別符號,有以下幾種值

NOSP = Number Of Signal Packets:Start封包會告知后續有多少個封包要傳輸

2.2 AVDTP Media封包格式

其中有12byte是強制的一定要存在的,也就是上圖淺灰色,也有可選存在的,也就是上圖深灰色,下面我們來看下各個的field的概念


Version:RTP版本,一般值是2,還有兩個值但是一般不用,
值為1就是RTP的草案版本值為0是在最開始的”vat”音頻工具中使用
Padding:在包末尾填充1個或者多個byte表示填充,這部分忽略
Extension:擴展位,此為如果是1,那么在固定頭部后面加一個byte擴展位
CSRC count:標示后買呢的CSRC有多少Byte
Marker (M):marke是由一個 profile定義 的,用來 允許 標識在 像報文流 中界定 幀界 等
的 事件,一個profile 可能定義了附加 的標識位或者通過修改payload type域中的位數量來指定沒有標識位,
Payload Type (PT):有效荷載型別,占7位,用于說明RTP報文中有效載荷的型別,如GSM音頻、JPEM影像等,在流媒體中大部分是用來區分音頻流和視頻流的,這樣便于客戶端進行決議,
Sequence Number:占16位,用于標識發送者所發送的RTP報文的序列號,每發送一個報文,序列號增1,這個欄位當下層的承載協議用UDP的時候,網路狀況不好的時候可以用來檢查丟包,同時出現網路抖動的情況可以用來對資料進行重新排序,序列號的初始值是隨機的,同時音頻包和視頻包的sequence是分別記數的,
Time Stamp:時間戳
實際上,時間戳增加一并不是我們通常意義上的過了一個微秒,而是增加了一個采樣間隔那么長的時間,舉個例子來說,不同的采集有不同的采樣頻率,比如一般的音頻是8K的采樣頻率,也就是一毫秒采集8次資料,也就是每次采樣間隔是1/8MS,而timestamp增加1也就意味著增加了一個采樣間隔,也就是過了1/8MS,換個例子,如果令一種編碼的采樣頻率是16K,那么timestamp增加1也就意味著系統過了1/16MS,也就是說,再同一個系統中,對不同編碼,雖然使用同一個時鐘,但timestamp的增長速度是不同的,在這個例子中,采樣頻率是16K的編碼要比8K的快兩倍,請記住這個區別,
SSRC:占32位,用于標識同步信源,該識別符號是隨機選擇的,參加同一視頻會議的兩個同步信源不能有相同的SSRC,
CSRC list:每個CSRC識別符號占32位,可以有0~15個,每個CSRC標識了包含在該RTP報文有效載荷中的所有特約信源,
后續的Media payload就是音頻資料了
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/207690.html
標籤:其他
