什么是RTP協(xié)議
1、協(xié)議簡(jiǎn)介
RTP是針對(duì)Internet上多媒體數(shù)據(jù)流的一個(gè)傳輸協(xié)議??梢詫?shí)現(xiàn)一對(duì)一或一對(duì)多的傳輸情況。RTP的典型應(yīng)用建立在UDP上,但也可以在TCP或ATM等其他協(xié)議之上工作。
? RTP本身只保證實(shí)時(shí)數(shù)據(jù)的傳輸,并不能為按順序傳送數(shù)據(jù)包提供可靠的傳送機(jī)制,也不提供流量控制或擁塞控制。
2、工作機(jī)制
多媒體數(shù)據(jù)傳輸?shù)囊粋€(gè)尖銳的問(wèn)題就是不可預(yù)料數(shù)據(jù)到達(dá)時(shí)間。但是流媒體的傳輸是需要數(shù)據(jù)的適時(shí)的到達(dá)用以播放和回放。
? rtp協(xié)議就是提供了時(shí)間標(biāo)簽,序列號(hào)以及其它的結(jié)構(gòu)用于控制適時(shí)數(shù)據(jù)流的播放。發(fā)送端依照即時(shí)的采樣在數(shù)據(jù)包里設(shè)置了時(shí)間標(biāo)簽。在接受端收到數(shù)據(jù)包后,就依照時(shí)間標(biāo)簽按照正確的速率恢復(fù)成原始的適時(shí)的數(shù)據(jù)。
?? 在rtp協(xié)議中,一幀數(shù)據(jù)被分割成幾個(gè)包,這幾個(gè)包具有相同的時(shí)間標(biāo)簽,但是每一個(gè)包又具有不同的序號(hào)
3、協(xié)議頭
????????①版本(V)
????? 2位,標(biāo)識(shí)RTP版本。
②填充標(biāo)識(shí)(P)
????? 1位,如設(shè)置填充位,在包尾將包含附加填充字,它不屬于有效載荷。填充的最后一個(gè)字節(jié)指明可以忽略多少個(gè)填充比特。填充可能用于某些具有固定長(zhǎng)度的加密算法
③擴(kuò)展(X)
????? 1位,如設(shè)置擴(kuò)展位,固定頭后跟一個(gè)頭擴(kuò)展。
④CSRC計(jì)數(shù)(CC)
????? 4位,CSRC計(jì)數(shù)包括緊接在固定頭后CSRC標(biāo)識(shí)符個(gè)數(shù)。
⑤標(biāo)記(M)
????? 1位,標(biāo)志的解釋由具體協(xié)議規(guī)定。它用來(lái)允許在比特流中標(biāo)記重要的事件,如幀邊界
⑥載荷類(lèi)型(PT)
????? 7位,記錄后面資料使用哪種編碼,接收端找出相應(yīng)的?decoder?解碼出來(lái)。H264的為96
⑦系列號(hào)
???? ?16位,系列號(hào)隨每個(gè)RTP數(shù)據(jù)包而增加1,由接收者用來(lái)探測(cè)包損失。系列號(hào)初值是隨機(jī)的。
⑧時(shí)標(biāo)
????? 32位,時(shí)標(biāo)反映RTP數(shù)據(jù)包中第一個(gè)八進(jìn)制數(shù)的采樣時(shí)刻,采樣時(shí)刻必須從單調(diào)、線性增加的時(shí)鐘導(dǎo)出,以允許同步與抖動(dòng)計(jì)算。時(shí)標(biāo)可以讓receiver端知道在正確的時(shí)間將資料播放出來(lái)。
??????只有系列號(hào)而沒(méi)有時(shí)標(biāo),并不能完整按照順序的將data播放出來(lái),因?yàn)槿绻鹍ata中間有一段是沒(méi)有資料的,只有系列號(hào)的話(huà)會(huì)造成錯(cuò)誤.一般rtp頭以0x80 60開(kāi)頭
H264 over RTP基本上分三種類(lèi)型:
1.Single NAL unitpacket 也就是實(shí)際的NAL類(lèi)型,可以理解為一個(gè)包就是一幀H264數(shù)據(jù),這個(gè)在實(shí)際中是比較多的。
2. Aggregation packet 一包數(shù)據(jù)中含有多個(gè)H264幀。
3. Fragmentationunit??一幀數(shù)據(jù)被分為多個(gè)RTP包,這也是很常見(jiàn)的,特別是對(duì)于關(guān)鍵幀。