Asterisk播放mp4(2)——音頻封裝

Asterisk現(xiàn)有版本不支持播放視頻文件(支持視頻通話),無法滿足發(fā)送視頻通知故硅、視頻IVR等場景庶灿。本系列文章,通過學習音視頻的相關(guān)知識和工具吃衅,嘗試實現(xiàn)一個通過Asterisk播放mp4視頻文件的應用往踢。

在音視頻媒體領(lǐng)域中,要區(qū)分容器格式和編碼格式徘层。我理解峻呕,容器(container)是包含了描述媒體流的信息和媒體流數(shù)據(jù)的介質(zhì)(文件或網(wǎng)絡通道)利职,其中可以包含多路媒體流。編碼格式描述的是媒體流中如何記錄數(shù)據(jù)瘦癌,例如:聲音采樣眼耀,一幀圖片等。本文學習音頻流處理時常用的容器佩憾,包括4個部分:WAV格式哮伟,MP3格式,RTP音頻傳輸和制作樣本數(shù)據(jù)妄帘。

WAV格式

WAV是微軟開發(fā)的一種音頻文件格式楞黄,符合RIFF(資源互換文件格式)規(guī)范。RIFF抡驼,全稱Resource Interchange File Format鬼廓,是一種按照標記區(qū)塊存儲數(shù)據(jù)的通用文件存儲格式。符合RIFF規(guī)范的文件中致盟,碎税,最小存儲單位為“塊”(Chunk),每個塊(Chunk)包含三個部分:塊標識(4字節(jié)馏锡,如果不夠4字節(jié)雷蹂,在右邊以空格填充),塊長度(4字節(jié)杯道,數(shù)據(jù)塊的長度匪煌,不包括塊標識和塊長度的8個字節(jié),采用小子節(jié)序)和數(shù)據(jù)党巾。RIFF格式規(guī)定萎庭,只有 RIFF及LIST塊可以含有子塊,其它的塊不允許包含子塊齿拂。WAV文件至少由3個塊構(gòu)成驳规,分別是RIFF、fmt 和Data署海。所有基于壓縮編碼的WAV文件必須含有fact塊吗购。此外所有其它塊都是可選的。塊fmt叹侄,Data及fact均為RIFF塊的子塊巩搏。

image.png

MP3格式

MP3截掉了大量的冗余信號和無關(guān)的信號昨登,編碼器通過混合濾波器組將原始聲音變換到頻率域趾代,利用心理聲學模型,估算剛好能被察覺到的噪聲水平丰辣,再經(jīng)過量化撒强,轉(zhuǎn)換成Huffman編碼禽捆,形成MP3位流。MP3是一種有損壓縮飘哨,壓縮比在1:10到1:12之間胚想。

理解MP3,首先需要搞清版本(version)和層(layer)的概念芽隆,版本包括:MPEG-1(ISO/IEC 11172-3)浊服,MPEG-2(ISO/IEC 13818-3)和MPEG-2.5(不是官方標準);層包括:Layer-1胚吁,Layer-2和Layer-3旁壮。MP3的版本和層不是迭代升級的關(guān)系妄均,而是為了適應不同使用場景,最主要的指標就是針對不同的采樣率。

MPEG-1: Specifies the coded representation of high quality audio for storage media and the method for decoding of high quality audio signals. Is intended for application to digital storage media providing a total continuous transfer rate of about 1,5 Mbit/s for both audio and video bitstreams, such as CD, DAT and magnetic hard disc, and for sampling rates of 32 kHz, 44,1 kHz, and 48 kHz.

MPEG-2: In order to achieve better audio quality at very low bit rates (<64 kbit/s per audio channel), in particular if compared with ITU-T (formerly CCITT) Recommendation G.722 performance, three additional sampling frequencies are provided for ISO/IEC 11172-3 layers I, II and III. The additional sampling frequencies (Fs) are 16 kHz, 22,05 kHz and 24 kHz.

MPEG-2.5: 由于MPEG-2定義的最低的采樣率為16kHz音五,于是Fraunhofer(是個德國的研究所)便對此進行擴展,將原來MPEG-2所支持的低采樣率再除以2获高,得到: 8, 11.025, 和 12 kHz 驯杜,稱為 "MPEG 2.5"。

Layer-1的編碼器最為簡單窿侈,編碼器的輸出數(shù)據(jù)率為384 kb/s炼幔,主要用于小型數(shù)字盒式磁帶(digital compact cassette,DCC)史简。

Layer-2的編碼器的復雜程度屬中等江掩,編碼器的輸出數(shù)據(jù)率為256 kb/s~192 kb/s,其應用包括數(shù)字廣播聲音(digital broadcast audio乘瓤,DBA)环形、數(shù)字音樂、CD-I(compact disc-interactive)和VCD(video compact disc)等衙傀。

Layer-3的編碼器最為復雜抬吟,編碼器的輸出數(shù)據(jù)率為64 kb/s,主要應用于ISDN上的聲音傳輸统抬。

MP3文件結(jié)構(gòu)

MP3文件大體上分為三個部分:ID3v2(不影響對音頻的解析火本,放音時可以跳過) + 音頻數(shù)據(jù)(MP3編碼的幀序列,每個幀包含幀頭和數(shù)據(jù)兩部分聪建,幀和幀相互獨立) + ID3v1(文件尾部128字節(jié)钙畔,可選)。

ID3v2

ID3v2標簽用于記錄mp3文件的元數(shù)據(jù)金麸,標簽頭中標記是否包含擴展頭(Extended Header)擎析,填充(Padding)等部分。ID3v2標簽至少包含1個標簽幀(frame)挥下,每幀描述了文件的某個信息揍魂,例如:作者桨醋,專輯等等。ID3v2標簽內(nèi)部采用大字節(jié)序现斋。

image.png

音頻數(shù)據(jù)

每個音頻數(shù)據(jù)幀由4個部分組成:幀頭(4字節(jié)喜最,必須),CRC(2字節(jié)庄蹋,可選)瞬内,邊信息(9,17或32字節(jié)限书,必須)遂鹊,VBR頭(8-120字節(jié),可選)蔗包,音頻編碼數(shù)據(jù)(必須)秉扑。

Side Infomation(邊信息): If joint stereo is used in M/S (middle/side) mode, the left and right channels aren't encoded separately. Instead, a "middle" channel is encoded as the sum of the left and right channels, while a " side" channel is stored as the difference between the left and the right. During the decoding process, side information is read back out of the frame and applied to the bitstream so that the original signal can be reconstructed as accurately as possible. The side information is essentially a set of instructions on how the whole puzzle should be re-assembled on the other end.

MP3有兩種編碼方式:1,CBR(固定位率)调限,幀的大小在整個文件中都是是固定的舟陆;2,VBR(可變位率)耻矮,VBR是XING公司推出的算法秦躯,所以在MP3的FRAME里會有“Xing"這個關(guān)鍵字(也有用"Info"來標識的),它存放在MP3文件中的第一個有效幀的數(shù)據(jù)區(qū)里裆装,它標識了這個MP3文件是VBR的踱承。同時第一個幀里存放了MP3文件的幀的總個數(shù),這就很容易獲得播放總時間哨免,同時還有100個字節(jié)存放了播放總時間的100個時間分段的幀索引茎活,假設(shè)4分鐘的MP3歌曲,240S琢唾,分成100段载荔,每兩個相鄰INDEX的時間差就是2.4S,所以通過這個INDEX采桃,只要前后處理少數(shù)的FRAME懒熙,就能快速找出我們需要快進的幀頭。其實這第一幀就相當于文件頭了普办。不過現(xiàn)在有些編碼器在編碼CBR文件時也像VBR那樣將信息記入第一幀工扎,比如著名的lame,它使用"Info"來做CBR的標記衔蹲。

RTP音頻傳輸

RTP全名是Real-time Transport Protocol(實時傳輸協(xié)議)肢娘。RTP用來為IP網(wǎng)上的語音、圖像、傳真等多種需要實時傳輸?shù)亩嗝襟w數(shù)據(jù)提供端到端的實時傳輸服務蔬浙。RTP為端到端的實時傳輸提供時間信息和流同步,但并不保證服務質(zhì)量贞远,服務質(zhì)量由RTCP來提供畴博。我理解RTP就是一種容器,核心是解決通過網(wǎng)絡實時傳遞數(shù)據(jù)的問題蓝仲。

RTP幀頭

12個字節(jié)是固定的RTP幀頭俱病,每個幀都會攜帶;貢獻源列表(CSRC List):0~15項(實際的數(shù)量由CC字段指定)袱结,每項32比特亮隙,用來標志對一個RTP混合器產(chǎn)生的新包有貢獻的所有RTP包的源;再后面就是攜帶的數(shù)據(jù)(payload)垢夹。

RTP頭中各個字段的信息將在后續(xù)的文章中詳細解析溢吻,這里先關(guān)注一下PT(payload type)字段。PT指明了RTP傳遞的數(shù)據(jù)類型果元,值0-95是有預定義的(RFC3551)促王,例如:8是pcma,0是pcmu等而晒,96-127是動態(tài)指定的蝇狼。通過asterisk建立通話的過程中,要通過sip傳遞sdp倡怎,sdp中指定了要建立的rtp通道的相關(guān)參數(shù)迅耘,例如:端口,媒體類型和媒體參數(shù)等监署,sdp中指定的媒體類和rtp頭中的PT字段相對應颤专。

rfc3551

除了關(guān)注Payload type外,還要注意MTU(最大傳輸單元钠乏,Maximum Transmission Unit)血公,它是數(shù)據(jù)鏈路層的概念,用于限制數(shù)據(jù)包的大谢菏臁(例如:IP包)累魔,如果數(shù)據(jù)包大于這個值就會拆包或丟棄,取值一般是1500(或1492)字節(jié)够滑。一個RTP包中垦写,IP+UDP+RTP頭=20+8+12=40字節(jié)。這樣一個RTP最大的載荷數(shù)據(jù)為1460字節(jié)彰触。

制作樣本數(shù)據(jù)

WAV格式

生成一段10秒鐘音頻文件梯投,編碼格式為pcm_s16le,容器格式為wav:

ffmpeg -lavfi sine -t 10 -f wav -c:a pcm_s16le sine-10s-s16le.wav

生成的文件大小為882078字節(jié),我們知道10秒鐘44.1k采樣率單聲道pcm_s16le編碼的裸流大小為882000分蓖,那么wav容器編碼就是增加78字節(jié)的文件頭尔艇。下面我們看看這78字節(jié)的內(nèi)容:

image.png
  • RIFF塊
子節(jié)位置 字節(jié)數(shù) 字段 數(shù)值 解析
0-3 4 塊標識 5249 4646 ASCII碼,大寫RIFF么鹤,指明塊是RIFF塊终娃。
4-7 4 塊大小 9675 0d00 小字節(jié)序,882070蒸甜,數(shù)據(jù)塊大小棠耕。
8-11 4 格式 5741 5645 ASCII碼,大寫WAVE柠新,說明文件格式

文件的大小是882078窍荧,要減去12個字節(jié),還剩882066字節(jié)需要解析恨憎。

  • fmt子塊
子節(jié)位置 字節(jié)數(shù) 字段 數(shù)值 解析
12-15 4 塊標識 666d 7420 ASCII碼蕊退,小寫fmt,注意最后1個字節(jié)填充的是空格(20)憔恳,指明塊是fmt塊咕痛。
16-19 4 塊大小 1000 0000 小字節(jié)序,16喇嘱,數(shù)據(jù)塊大小茉贡。不同音頻編碼格式數(shù)據(jù)塊的長度并不相同,詳細內(nèi)容看參考鏈接者铜。
20-21 2 音頻格式(AudioFormat) 0100 小字節(jié)序腔丧,1,PCM/非壓縮格式作烟。(其他格式的定義查看參考資料)
22-23 2 聲道數(shù)(NumChannels) 0100 小字節(jié)序愉粤,1,單聲道拿撩。有幾個聲道就是幾衣厘。
24-27 4 采樣率(SampleRate) 44ac 0000 小字節(jié)序,44100压恒。
28-31 4 傳輸速率(ByteRate) 8858 0100 小字節(jié)序影暴,88200,每個采樣2個字節(jié)探赫,所以每秒要傳輸88200字節(jié)型宙。
32-33 2 數(shù)據(jù)塊對齊單位(BlockAlign) 0200 小字節(jié)序,2伦吠,該數(shù)值為:聲道數(shù)×位數(shù)/8妆兑。
34-35 2 采樣位數(shù)(BitsPerSample) 0010 小字節(jié)序魂拦,8,每個采樣8位二進制搁嗓。

fmt子塊一共24個字節(jié)芯勘,882066減24,還有882042個字節(jié)需要解析腺逛。

  • LIST子塊
子節(jié)位置 字節(jié)數(shù) 字段 數(shù)值 解析
36-39 4 塊標識 4c49 5354 ASCII碼荷愕,大寫LIST,指明塊是LIST塊屉来。
40-43 4 塊大小 1a00 0000 小字節(jié)序路翻,26狈癞,數(shù)據(jù)塊大小茄靠。
44-47 4 塊類型 494e 464f ASCII碼,大寫INFO蝶桶。這個塊是用來描述文件信息的慨绳,并不影響解析,大體知道就行真竖。
48-51 4 塊標識 4953 4654 ASCII碼脐雪,大寫ISFT,創(chuàng)建文件的軟件恢共。
52-55 4 塊大小 0e00 0000 小字節(jié)序战秋,14,數(shù)據(jù)塊大小讨韭。
56-69 14 塊數(shù)據(jù) 4c61-3000 Lavf58.29.100

LIST子塊一共34個字節(jié)脂信,882042減34,還有882008個字節(jié)需要解析透硝。

  • data子塊
子節(jié)位置 字節(jié)數(shù) 字段 數(shù)值 解析
70-73 4 塊標識 6461 7461 ASCII碼狰闪,小寫data,指明塊是data塊濒生。
74-77 4 塊大小 5075 0d00 小字節(jié)序埋泵,882000,數(shù)據(jù)塊大小罪治,和裸流字節(jié)數(shù)一致丽声。

至此,78個字節(jié)的文件頭解析完畢觉义。由此可以進一步理解:容器是媒體流的描述信息和數(shù)據(jù)流恒序,只有提供了描述信息,解析程序才知道如何讀取數(shù)據(jù)流谁撼。

MP3格式

ffmpeg -lavfi sine -t 10 -f mp3 -c:a mp3 sine-10s.mp3

image.png

生成的mp3文件是單聲道歧胁,采樣率44.1k滋饲。文件大小80475字節(jié),是WAV格式882078字節(jié)的1/11喊巍,極大減少了存儲空間屠缭。

ID3v2頭

image.png
  • 標簽頭
子節(jié)位置 字節(jié)數(shù) 字段 數(shù)值 解析
0-2 3 標簽頭標識 4944 33 ASCII碼,ID3崭参,必須以此開頭呵曹,說明是ID3v2標簽。
3-4 2 版本號 04 00 4何暮,0奄喂,表示為ID3v2.4.0版本。
5 1 標識字節(jié) 00 具體解釋查看參考資料海洼。其中第6位(左邊第2位)指明是否包含擴展頭跨新,第4位(左邊第4位)指明是否包含尾(footer)。
6-9 4 標簽大小 0000 0023 每個字節(jié)去掉首位后的28位二進制數(shù)坏逢。

The ID3v2 tag size is the sum of the byte length of the extended
header, the padding and the frames after unsynchronisation. If a
footer is present this equals to ('total size' - 20) bytes, otherwise
('total size' - 10) bytes.

ID3標簽的大小是35字節(jié)域帐,加上10字節(jié)的頭,所以總長度是45個字節(jié)是整。

  • 標簽幀
子節(jié)位置 字節(jié)數(shù) 字段 數(shù)值 解析
10-13 4 幀ID 5453 5345 ASCII碼肖揣,TSSE(Software/Hardware and settings used for encoding)
14-17 4 幀大小 0000 000f 15字節(jié),不包含幀頭的10字節(jié)浮入。
18-19 2 標志 0000 描述幀的特征龙优,不影響解析,可以不深究事秀。
20-34 15 幀數(shù)據(jù) 034c ... 3030 00 Lavf58.29.100

10個字節(jié)的頭和15字節(jié)的數(shù)據(jù)彤断,共25個字節(jié)。

  • 填充(Padding)

在ID3v2標簽在尾部填充了10個空字節(jié)(0x00)秽晚,把差的10個字節(jié)湊齊瓦糟。

數(shù)據(jù)第1幀

image.png
  • 幀頭

幀頭32個字節(jié),ff fb 40 c0赴蝇,由11個部分組成菩浙,用如下方式AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM(00_0000)標記。

A_11 B_2 C_2 D_1 E_4 F_2 G_1 H_1 I_2 J_2 K_1 L_1 M_2
1111 1111 111 11 01 1 0100 00 0 0 11 00 0 0 00
標記 位數(shù) 位置 描述
A 11 31-21 1111 1111 1 同步信息句伶,所有位均為1劲蜻,表示幀開始。
B 2 20-19 11 版本考余,MPEG1先嬉。
C 2 18-17 01 層,Layer3楚堤。
D 1 16 1 CRC校驗疫蔓,等于1含懊,不校驗。
E 4 15-12 0100 傳輸率衅胀,等于0100岔乔,56kbps。需要查對照表(看參考資料)滚躯。
F 2 11-10 00 采樣率雏门,等于00,44.1kHz掸掏。
G 1 9 0 填充位茁影,等于0,不需要丧凤。
H 1 8 0 保留字
I 2 7-6 11 聲道模式募闲,11-單聲道
J 2 5-4 00 擴充模式,無
K 1 3 0 版權(quán)息裸,0-不合法
L 1 2 0 原版標識蝇更,0-非原版
M 2 1-0 00 強調(diào)方式沪编,等于00呼盆,未定義。

需要注意采樣率(11-10位)是和版本和層有對應關(guān)系的蚁廓,其取值對照含義如下表:

bits MPEG1 MPEG2 MPEG2.5
00 44100 22050 11025
01 48000 24000 12000
10 32000 16000 8000
11 reserv. reserv. reserv.
  • 邊(Side Info)

17字節(jié)访圃,首幀中數(shù)據(jù)全是0,還沒有找到詳細的解釋相嵌。真正的數(shù)據(jù)幀這部分信息都是有對應值的腿时,解碼器要根據(jù)這些信息才能把數(shù)據(jù)解出來。

  • VBR頭(Info(Xing))
位置 長度 說明
0 4 496e 666f ASCII碼饭宾,Info批糟。VBR頭是Xing公司提出的,所以也有用Xing作為標識的情況看铆。
4 4 0000 000f 標志顯示當前字段的標志徽鼎,與邏輯或邏輯相結(jié)合。字段是強制性的弹惦。0x00000001 - 包含幀數(shù)字段否淤;0x00000002 - 包含字節(jié)數(shù)字段;0x00000004 - 包含TOC部分 棠隐;0x00000008 - 包含質(zhì)量指示(0-100)石抡。說明后面的4個部分內(nèi)容都有。
8 4 0000 0180 384 幀數(shù)量 Number of Frames as Big-Endian DWORD (optional)
8 or 12 4 0001 3a2e 80430 幀字節(jié)數(shù)(去掉ID3標簽) Number of Bytes in file as Big-Endian DWORD (optional)
8, 12 or 16 100 - 100 TOC entries for seeking as integral BYTE
8, 12, 16, 108, 112 or 116 4 0000 0000 Quality indicator as Big-Endian DWORDfrom 0 - best quality to 100 - worst quality
幀頭 邊信息 VBR標記 填充
4字節(jié) 17字節(jié) 120 字節(jié) 41字節(jié)

VBR頭后面存儲編碼器的信息助泽,比如 lame 在其后就是存儲其版本啰扛,把第1幀填滿嚎京。

后續(xù)數(shù)據(jù)幀

MP3中每幀的采樣數(shù)和版本和層的對照是固定的,如下表:

MPEG1 MPEG2 MPEG2.5
Layer1 384 384 384
Layer2 1152 1152 1152
Layer3 1152 576 576

根據(jù)該表可知每幀的采樣數(shù)是1152個隐解,采樣率是44100挖藏,每幀字節(jié)數(shù):56(比特率)/44.1(采樣率)x1152(幀采樣數(shù))/8 = 182字節(jié)(截斷小數(shù)部分)。首幀的地址為2d厢漩,向后182個字節(jié)e3膜眠,是第2幀的開始位置。通過這種方式就可以找到后面每一幀的起始地址溜嗜。

第2幀的起始地址0x00e3宵膨,幀頭為ff fb 50 c4

A_11 B_2 C_2 D_1 E_4 F_2 G_1 H_1 I_2 J_2 K_1 L_1 M_2
1111 1111 111 11 01 1 0101 00 0 0 11 00 0 1 00

傳輸率和首幀的值不同炸宵,為0101辟躏,對應64kbps,計算幀大小為208字節(jié)(截斷小數(shù)部分)土全。

第3幀的起始地址0x01b3捎琐,幀頭為ff fb 52 c4

A_11 B_2 C_2 D_1 E_4 F_2 G_1 H_1 I_2 J_2 K_1 L_1 M_2
1111 1111 111 11 01 1 0101 00 1 0 11 00 0 1 00

和第1幀填充位值不同裹匙,等于1瑞凑,需要填充。幀大小為截斷后加1概页,等于209籽御。

第4幀的起始地址0x0284,和計算結(jié)果一致惰匙。

轉(zhuǎn)換為PCM

我們研究的目標是通過asterisk進行媒體的播放技掏,mp3是一種有損壓縮,那么將mp3轉(zhuǎn)碼為pcm后失真是否嚴重项鬼?下面將ffmpeg生成的mp3格式的sine波形轉(zhuǎn)換為pcm_s16le哑梳,看看波形的變化。

ffmpeg -i sine-10s.mp3 -f s16le -c:a pcm_s16le sine-mp32s16le-10s.s16le

MP3轉(zhuǎn)s16le和原始數(shù)據(jù)對比

紅色為原始pcm_s16le的數(shù)據(jù)绘盟,藍色為mp3轉(zhuǎn)換的結(jié)果鸠真。

MP3轉(zhuǎn)換的結(jié)果
原始pcm_s16le

雖然MP3確實導致了數(shù)據(jù)的損失,但是總體上還是很好的保持了波形奥此。(MP3確實很厲害弧哎,只是原始數(shù)據(jù)的1/10不到,但是損失很兄苫ⅰ3纺邸)

8k采樣率的MP3

前面用ffmpeg默認生成的mp3文件的采樣率是44.1k,而且按照mp3的規(guī)范我們知道不同采樣率會對應不同的版本和層蠢终,那么ffmpeg是否能生成一個采樣率是電話系統(tǒng)常用的8k采樣率的mp3序攘?

ffmpeg -lavfi sine -t 10 -ar 8000 -f mp3 -c:a mp3 sine-8k-10s.mp3

image.png

文件的大小為10413字節(jié)茴她,小了很多。

8k MP3

首幀的頭為ff e3 38 c0程奠,解析如下:

A_11 B_2 C_2 D_1 E_4 F_2 G_1 H_1 I_2 J_2 K_1 L_1 M_2
1111 1111 111 00 01 1 0011 10 0 0 11 00 0 0 00

版本域(B)的值是00丈牢,對應的是MPEG version2.5;層域(C)的值是01瞄沙,對應的是Layer3己沛;比特率域(E)的值是0011,對應的是24kbps距境;采樣率域(F)的值是10申尼,對應的是8000

從這個結(jié)果看垫桂,我們可以將從電話系統(tǒng)收到的8k音頻數(shù)據(jù)保存為8k的mp3文件师幕。

RTP音頻流

ffmpeg -lavfi sine -f rtp rtp://127.0.0.1:5005

Ffmpeg輸出

注意這時輸出的sdp信息,payload type的值是97诬滩,對應的參數(shù)是PCMU/44100/1霹粥,含義是編碼格式PCMU,采樣率44100疼鸟,單聲道后控。

下面改變一下輸出的參數(shù):

ffmpeg -lavfi sine -ar 8000 -c:a pcm_alaw -f rtp rtp://127.0.0.1:5005

Ffmpeg輸出

前面提到過8是預定義的媒體類型,對應的是pcma/8000/1愚臀。

下面我們通過wireshark抓包看一下通過RTP傳送的數(shù)據(jù)什么樣忆蚀。執(zhí)行如下命令 矾利,啟動nc監(jiān)聽端口5005姑裂,ffmpeg向端口發(fā)送RTP包(直接用過濾器生成波形無法控制播放速率,導致收到的結(jié)果不爭取男旗,所以改成播放生成好的文件舶斧,添加-re參數(shù)播放速率),啟動wireshark抓包:

ffmpeg -lavfi sine -t 10 -ar 8000 -f alaw -c:a pcm_alaw sine-8k-10s.alaw

nc -lu 5005

ffmpeg -re -ar 8000 -f alaw -i sine-8k-10s.alaw -c:a pcm_alaw -f rtp rtp://127.0.0.1:5005

將抓包結(jié)果解碼為RTP包察皇,在協(xié)議列(Protocol)選中一個UDP的格子:

wireshark解碼UDP
Wireshark解碼UDP
UDP解碼為RTP
查看媒體流分析結(jié)果

下面我們查看一幀RTP數(shù)據(jù)的內(nèi)部:

RTP包數(shù)據(jù)
alaw文件中的數(shù)據(jù)

由上兩圖可以看到茴厉,RTP Payload中的數(shù)據(jù)和原始alaw文件中數(shù)據(jù)完全一致,說明Payload中的數(shù)據(jù)是Payload type指定的格式什荣。Payload的大小是320字節(jié)矾缓,也就是攜帶了320個采樣,也就是0.0.4秒的時長稻爬。 前面提到過嗜闻,Payload的大小受MTU的限制,所以ffmpeg發(fā)送數(shù)據(jù)時會控制每個RTP包中包含的采樣數(shù)桅锄。

參考資料

wav文件格式分析與詳解

MP3 wiki

ID3v2.3 詳細

ID3v2.4

解釋音頻幀頭的資料

MP3 Inside

RTP: A Transport Protocol for Real-Time Applications

RTP Profile for Audio and Video Conferences with Minimal Control

什么是MTU琉雳?為什么MTU值普遍都是1500样眠? 6

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市翠肘,隨后出現(xiàn)的幾起案子檐束,更是在濱河造成了極大的恐慌,老刑警劉巖束倍,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件被丧,死亡現(xiàn)場離奇詭異,居然都是意外死亡绪妹,警方通過查閱死者的電腦和手機晚碾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喂急,“玉大人格嘁,你說我怎么就攤上這事±纫疲” “怎么了糕簿?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長狡孔。 經(jīng)常有香客問我懂诗,道長,這世上最難降的妖魔是什么苗膝? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任殃恒,我火速辦了婚禮,結(jié)果婚禮上辱揭,老公的妹妹穿的比我還像新娘离唐。我一直安慰自己,他們只是感情好问窃,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布亥鬓。 她就那樣靜靜地躺著,像睡著了一般域庇。 火紅的嫁衣襯著肌膚如雪嵌戈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天听皿,我揣著相機與錄音熟呛,去河邊找鬼褐墅。 笑死鄙才,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的凛虽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼偿短,長吁一口氣:“原來是場噩夢啊……” “哼欣孤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昔逗,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤降传,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后勾怒,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體婆排,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年笔链,在試婚紗的時候發(fā)現(xiàn)自己被綠了段只。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡鉴扫,死狀恐怖赞枕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坪创,我是刑警寧澤炕婶,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站莱预,受9級特大地震影響柠掂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜依沮,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一涯贞、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧危喉,春花似錦宋渔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至列粪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谈飒,已是汗流浹背岂座。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留杭措,地道東北人费什。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像手素,于是被迫代替她去往敵國和親鸳址。 傳聞我的和親對象是個殘疾皇子瘩蚪,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355