音視頻流媒體開發(fā)【七十】- RTSP流媒體5-RTP之AAC封包和解包

音視頻流媒體開發(fā)-目錄
iOS知識點-目錄
Android-目錄
Flutter-目錄
數(shù)據(jù)結(jié)構(gòu)與算法-目錄
uni-pp-目錄

官??檔:
https://www.rfc-editor.org/rfc/rfc3640.html

ffmpeg:
封包:rtpenc_aac.c
解包:rtpdec_mpeg4.c

對aac進?rtp封包

過程?較簡單:
  1. 需要將aac的前7個(或9個)字節(jié)的ADTS去掉,即是跳過adts header;
  2. 添加RTP Header嘀趟;
  3. 添加2字節(jié)的AU_HEADER_LENGTH百新;
  4. 添加2字節(jié)的AU_HEADER;
  5. 從第17字節(jié)開始就是payload(去掉ADTS的aac數(shù)據(jù))數(shù)據(jù)了

?頻aac封包格式

RTP承載aac的格式由兩部分組成:
  • 2個字節(jié)的AU-headers-length
  • n個AU-header允耿,每個2字節(jié)
  • n個AU,是aac去掉adts的載荷
image.png

注意:?個RTP包中可以有?個AU-headers-length 和 n個AU-header和 n個AU(AU每包實際?頻數(shù)據(jù)流)

1. AU-headers-length

頭兩個字節(jié)表示au-header的?度,單位是bit距潘。 ?個AU-header?度是兩個字節(jié)(16bit)因為可以有多個au-header所以AU-headers-length的值是 16的倍數(shù),?般?頻都是單個?頻數(shù)據(jù)流的發(fā)送只搁,所以AU-headers-length的值是16

//AU_HEADER_LENGTH
bytes[12] = 0x00; //?位
bytes[13] = 0x10; //低位 只有?個AU_HEADER

因為單位是bit, 除以8就是auHeader的字節(jié)?度音比;?因為單個auheader字節(jié)?度2字節(jié),所以再除以2就是auheader的個數(shù)氢惋。

2. AU-header

au-header的?13個bits就是?個au 的字節(jié)?度:

//AU_HEADER
bytes[14] = (byte)((len & 0x1fe0) >> 5); //?位
bytes[15] = (byte)((len & 0x1f) << 3); //低位

這樣就能得到多個au的?度

3. AU 實際的?頻數(shù)據(jù)

RTSP/SDP中的AAC配置

當(dāng)RTSP的?頻使?AAC格式時, SDP的內(nèi)容差不多是這樣的

v=0
o=- 16128587303007558182 16128587303007558182 IN IP4 WINDOWS-75IDU9Q
s=Unnamed
i=N/A
c=IN IP4 0.0.0.0
t=0 0
a=tool:vlc 3.0.5
a=recvonly
a=type:broadcast
a=charset:UTF-8
a=control:rtsp://192.168.2.195:8554/
m=audio 0 RTP/AVP 96
b=AS:128
b=RR:0
a=rtpmap:96 mpeg4-generic/22050
a=fmtp:96 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=138856e500; sizeLength=13; indexLength=3; indexDeltaLength=3; Profile=1;
a=control:rtsp://192.168.2.195:8554/trackID=4
m=video 0 RTP/AVP 96
b=AS:800
b=RR:0
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1;profile-level-id=42c01e;sprop-parameter-sets=Z0LAHtoCQKeX/8CgAJ/EAAADAZAAAF2qPFi6gA==,aM43IA==;
a=control:rtsp://192.168.2.195:8554/trackID=5

這些參數(shù)是由RFC規(guī)范定義的

https://tools.ietf.org/html/rfc3640

streamtype對于AAC, 固定為5
profile-level-id固定為1. (我也不知道這個值怎么?成)
本?著重說明config, SizeLength, IndexLength, IndexDeltaLength的作?
config是16進制的, 前兩個字節(jié) 1388 , 表示采樣率為22050, 1個channel, 后?的 56e500 , 我也不知道是什么?.

前兩個字節(jié)的為ios-14996-3中定義的AudioSpecificConfig, 前13個bits的格式為

samplingFrequencyIndex的取值

1388 轉(zhuǎn)換成2進制為 0001 0011 1000 1000
audioObjectType為 00010 , 即 2
samplingFrequencyIndex為 0111 , 即 7 , 對應(yīng)的采樣頻率為 22050
channelConfiguration為 0001 , 表示channel數(shù)量為1
sizeLength=13; indexLength=3; indexDeltaLength=3涉及到?頻的AU Header.
AU Header解決了?個RTP包容納多個?頻包的問題

AU-Header包含以下信息
1. 當(dāng)前的RTP包含了多少個?頻包?
2. 每個?頻包的??是多少?
3. 時間戳是多少?

AU-Header數(shù)據(jù)段的格式為


其它的值都是可選的, 如果sdp中沒有出現(xiàn)相關(guān)的參數(shù)(或者為0), 則表示它們不出現(xiàn).
以最簡單的情況舉例, 假設(shè)aac數(shù)據(jù)?度為200字節(jié), 只有?個au-header.
200 的?進制為 0000011001000 . (補?為13 bits)
AU-headers-length 值為16, 因為只有?個au-header, au-header中只有AU-size和AU-Index, 共占?16bits

整個au-header數(shù)據(jù)段的內(nèi)容為

0000 0000 0000 1000 0000011001000 000

通常情況下, ?個rtp中只有?個aac包, 不需要加再AU-Header, 那么sdp中的aac參數(shù)可以簡化為

a=fmtp:96 streamtype=5; profile-level-id=1; mode=AAC-hbr; config=138856e500;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洞翩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子焰望,更是在濱河造成了極大的恐慌骚亿,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柿估,死亡現(xiàn)場離奇詭異循未,居然都是意外死亡,警方通過查閱死者的電腦和手機秫舌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門的妖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人足陨,你說我怎么就攤上這事嫂粟。” “怎么了墨缘?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵星虹,是天一觀的道長零抬。 經(jīng)常有香客問我,道長宽涌,這世上最難降的妖魔是什么平夜? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮卸亮,結(jié)果婚禮上忽妒,老公的妹妹穿的比我還像新娘。我一直安慰自己兼贸,他們只是感情好段直,可當(dāng)我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著溶诞,像睡著了一般鸯檬。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上螺垢,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天喧务,我揣著相機與錄音,去河邊找鬼甩苛。 笑死蹂楣,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的讯蒲。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼肄扎,長吁一口氣:“原來是場噩夢啊……” “哼墨林!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起犯祠,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤旭等,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后衡载,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搔耕,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年痰娱,在試婚紗的時候發(fā)現(xiàn)自己被綠了弃榨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡梨睁,死狀恐怖鲸睛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坡贺,我是刑警寧澤官辈,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布箱舞,位于F島的核電站,受9級特大地震影響拳亿,放射性物質(zhì)發(fā)生泄漏晴股。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一肺魁、第九天 我趴在偏房一處隱蔽的房頂上張望队魏。 院中可真熱鬧,春花似錦万搔、人聲如沸胡桨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昧谊。三九已至,卻和暖如春酗捌,著一層夾襖步出監(jiān)牢的瞬間呢诬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工胖缤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留尚镰,地道東北人。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓哪廓,卻偏偏與公主長得像狗唉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子涡真,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容