- 論壇徽章:
- 0
|
RTP(Real-timeTransportProtocol)是用于Internet上針對(duì)多媒體數(shù)據(jù)流的一種傳輸協(xié)議。RTP被定義為在一對(duì)
一或一對(duì)多的傳輸情況下工作,其目的是提供時(shí)間信息和實(shí)現(xiàn)流同步。RTP通常使用UDP來(lái)傳送數(shù)據(jù),但RTP也可以在TCP或ATM等其他協(xié)議之上工作。
當(dāng)應(yīng)用程序開(kāi)始一個(gè)RTP會(huì)話時(shí)將使用兩個(gè)端口:一個(gè)給RTP,一個(gè)給RTCP。RTP本身并不能為按順序傳送數(shù)據(jù)包提供可靠的傳送機(jī)制,也不提供流量控
制或擁塞控制,它依靠RTCP提供這些服務(wù)。通常RTP算法并不作為一個(gè)獨(dú)立的網(wǎng)絡(luò)層來(lái)實(shí)現(xiàn),而是作為應(yīng)用程序代碼的一部分。實(shí)時(shí)傳輸控制協(xié)議RTCP。
RTCP(Real-timeTransportControlProtocol)和RTP一起提供流量控制和擁塞控制服務(wù)。在RTP會(huì)話期間,各參與者
周期性地傳送RTCP包。RTCP包中含有已發(fā)送的數(shù)據(jù)包的數(shù)量、丟失的數(shù)據(jù)包的數(shù)量等統(tǒng)計(jì)資料,因此,服務(wù)器可以利用這些信息動(dòng)態(tài)地改變傳輸速率,甚至
改變有效載荷類型。RTP和RTCP配合使用,它們能以有效的反饋和最小的開(kāi)銷(xiāo)使傳輸效率最佳化,因而特別適合傳送網(wǎng)上的實(shí)時(shí)數(shù)據(jù)。
6.2.2 RTP控制協(xié)議-- RTCP
RTCP協(xié)議將控制包周期發(fā)送給所有連接者,應(yīng)用與數(shù)據(jù)包相同的分布機(jī)制。低層協(xié)議提供數(shù)據(jù)與控制包的復(fù)用,如使用單獨(dú)的UDP端口號(hào)。RTCP執(zhí)行下列四大功能:
主要是提供數(shù)據(jù)發(fā)布的質(zhì)量反饋。是作為RTP傳輸協(xié)議的一部分,與其他傳輸協(xié)議的流和阻塞控制有關(guān)。反饋對(duì)自適應(yīng)編碼控制直接起作用,但I(xiàn)P組播經(jīng)驗(yàn)表
明,從發(fā)送者收到反饋對(duì)診斷發(fā)送錯(cuò)誤是致關(guān)重要的。給所有參加者發(fā)送接收反饋報(bào)告允許問(wèn)題觀察者估計(jì)那些問(wèn)題是局部的,還是全局的。諸如IP組播等發(fā)布機(jī)
制使網(wǎng)絡(luò)服務(wù)提供商類團(tuán)體可能接收反饋信息,充當(dāng)?shù)谌奖O(jiān)控者來(lái)診斷網(wǎng)絡(luò)問(wèn)題。反饋功能由RTCP發(fā)送者和接收者報(bào)告執(zhí)行。
RTCP帶有稱作規(guī)范名字(CNAME)的RTP源持久傳輸層標(biāo)識(shí)。如發(fā)現(xiàn)沖突,或程序重新啟動(dòng),既然SSRC標(biāo)識(shí)可改變,接收者需要CNAME跟蹤參加者。接收者也需要CNAME 與相關(guān)RTP連接中給定的幾個(gè)數(shù)據(jù)流聯(lián)系
前兩種功能要求所有參加者發(fā)送RTCP包,因此,為了RTP擴(kuò)展到大規(guī)模數(shù)量,速率必須受到控制。讓每個(gè)參加者給其它參加者發(fā)送控制包,就大獨(dú)立觀察參加者數(shù)量。該數(shù)量用語(yǔ)計(jì)算包發(fā)送的速率。
第四個(gè)可選功能是傳送最小連接控制信息,如參加者辨識(shí)。最可能用在"松散控制"連接,那里參加者自由進(jìn)入或離開(kāi),沒(méi)有成員控制或參數(shù)協(xié)調(diào),RTCP充當(dāng)通往所有參加者的方便通道,但不必支持應(yīng)用的所有控制通訊要求。高級(jí)連接控制協(xié)議超出本書(shū)范圍。
在IP組播場(chǎng)合應(yīng)用RTP時(shí),前3個(gè)功能是必須的,推薦用于所有情形。RTP應(yīng)用設(shè)計(jì)人員必須避免使用僅在單播模式下工作的機(jī)制,那將導(dǎo)致無(wú)法擴(kuò)展規(guī)模。
6.2.2.1 RTCP 包格式
下面定義幾個(gè)攜帶不同控制信息的RTCP包類型:
SR:
發(fā)送報(bào)告,當(dāng)前活動(dòng)發(fā)送者發(fā)送、接收統(tǒng)計(jì)。
RR:
接收?qǐng)?bào)告,非活動(dòng)發(fā)送者接收統(tǒng)計(jì)。
SDES:
源描述項(xiàng),包括CNAME。
BYE:
表示結(jié)束。
APP:
應(yīng)用特定函數(shù)。
類似于RTP數(shù)據(jù)包,每個(gè)RTCP包以固定部分開(kāi)始,緊接著的是可變長(zhǎng)結(jié)構(gòu)元素,但以一個(gè)32位邊界結(jié)束。包含安排要求和固定部分中長(zhǎng)度段,使RTCP包
可堆疊。不需要插入任何分隔符將多哥RTCP包連接起來(lái)形成一個(gè)RTCP組合包,以低層協(xié)議用單一包發(fā)送出去。由于需要低層協(xié)議提供提供整體長(zhǎng)度來(lái)決定組
合包的結(jié)尾,在組合包中沒(méi)有單個(gè)RTCP包顯式計(jì)數(shù)。
組合包中每個(gè)RTCP包可獨(dú)立處理,不需要根據(jù)包組合順序。但未了執(zhí)行協(xié)議功能,強(qiáng)加如下約束:
接收統(tǒng)計(jì)(在SR或RR中)應(yīng)該經(jīng)常發(fā)送,只要帶寬允許,因此每個(gè)周期發(fā)送的組合RTCP 包應(yīng)包含報(bào)告包。
新接收者需要接收CNAME,并盡快識(shí)別源,開(kāi)始聯(lián)系媒介進(jìn)行同步,因此每個(gè)包應(yīng)該包含SDES CNAME。
出現(xiàn)在組合包前面的是包類型數(shù)量,其增長(zhǎng)應(yīng)該受到限制,以提高常數(shù)位數(shù)量,提高成功確認(rèn)RTCP包對(duì)錯(cuò)誤地址RTP數(shù)據(jù)包或其他無(wú)關(guān)包的概率。
因此,所有RTCP包至少必須以兩個(gè)包組合形式發(fā)送,推薦格式如下:
加密前綴(Encryption prefix):
僅當(dāng)組合包被加密,才加上一個(gè)32位隨機(jī)數(shù)用于每個(gè)組合包發(fā)送。
SR或RR:
組合包中第一個(gè)RTCP包必須總為一個(gè)報(bào)告包,方便頭的確認(rèn)。即使沒(méi)有數(shù)據(jù)發(fā)送,也沒(méi)有接收到數(shù)據(jù),也要發(fā)送一個(gè)空RR,那怕組合包中RTCP包為BYE。
附加RR:
如報(bào)告統(tǒng)計(jì)源數(shù)目超過(guò)31,在初始報(bào)告包后應(yīng)該有附加RR 包。
SDES:
包含CNAME 項(xiàng)的SDES包必須包含在每個(gè)組合RTCP包中。如應(yīng)用要求,其他源描述項(xiàng)可選,但受到帶寬限制。
BYE或APP:
其它RTCP包類型可以任意順序排列,除了BYE應(yīng)作為最后一個(gè)包發(fā)送,包類型出現(xiàn)可不止一次。
建議轉(zhuǎn)換器或混合器從多個(gè)源組合單個(gè)RTCP包。如組合包整體長(zhǎng)度超過(guò)網(wǎng)絡(luò)路徑最大傳輸單元,可分成多個(gè)較短組合包用低層協(xié)議以單個(gè)包形式發(fā)送。注意,每
個(gè)組合包必須以SR或RR包開(kāi)始。附加RTCP包類型可在Internet Assigned Numbers Authority
(IANA)處注冊(cè)。
6.2.2.2 RTCP傳輸間隔
RTP設(shè)計(jì)成允許應(yīng)用自動(dòng)擴(kuò)展,連接數(shù)可從幾個(gè)到上千個(gè)。例如,音頻會(huì)議中,數(shù)據(jù)流量是內(nèi)在限制的,因?yàn)橥粫r(shí)刻只有一兩個(gè)人說(shuō)話;對(duì)組播,給定連接數(shù)據(jù)
率仍是常數(shù),獨(dú)立于連接數(shù),但控制流量不是內(nèi)在限制的。如每個(gè)參加者以固定速率發(fā)送接收?qǐng)?bào)告,控制流量將隨參加者數(shù)量線性增長(zhǎng),因此,速率必須按比例下
降。
一旦確認(rèn)地址有效,如后來(lái)標(biāo)記成未活動(dòng),地址的狀態(tài)應(yīng)仍保留,地址應(yīng)繼續(xù)計(jì)入共享RTCP帶寬地址的總數(shù)中,時(shí)間要保證能掃描典型網(wǎng)絡(luò)分區(qū),建議為30分鐘。注意,這仍大于RTCP報(bào)告間隔最大值的五倍。
這個(gè)規(guī)范定義了除必需的CNAME外的幾個(gè)源描述項(xiàng),如NAME(人名)和EMAIL(電子郵件地址)。它也為定義新特定應(yīng)用RTCP包類型的途徑。給附
加信息分配控制帶寬應(yīng)引起注意,因?yàn)樗鼘⒔档徒邮請(qǐng)?bào)告和CNAME發(fā)送的速率而損害協(xié)議的性能。建議分配給單個(gè)參加者用于攜帶附加信息的RTCP帶寬不要
超過(guò)20%。而且并沒(méi)有有意讓所有SDES項(xiàng)包含在每個(gè)應(yīng)用中。
6.2.2.3 發(fā)送者與接收者報(bào)告
RTP接收者使用RTCP報(bào)告包提供接收質(zhì)量反饋,報(bào)告包根據(jù)接收者是否是發(fā)送者而采用兩種格式中的一種。除包類型代碼外,發(fā)送者報(bào)告與接收者報(bào)告間唯一
的差別是發(fā)送者報(bào)告包含一個(gè)20個(gè)字節(jié)發(fā)送者信息段。如某地址在發(fā)出最后或前一個(gè)報(bào)告間隔期間發(fā)送數(shù)據(jù)包,就發(fā)布SR;否則,就發(fā)出RR;SR和RR都可
沒(méi)有或包括多個(gè)接收?qǐng)?bào)告塊。發(fā)布報(bào)告不是為列在CSRC列表上的起作用的源,每個(gè)接收?qǐng)?bào)告塊提供從特殊源接收數(shù)據(jù)的統(tǒng)計(jì)。既然最大可有31個(gè)接收?qǐng)?bào)告塊嵌
入在SR 或 RR包中,
丟失包累計(jì)數(shù)差別給出間隔期間丟掉的數(shù)量,而所收到擴(kuò)展的最后一個(gè)系列號(hào)的差別給出間隔期間希望發(fā)送的包數(shù)量,兩者之比等于經(jīng)過(guò)間隔期間包丟失百分比。如兩報(bào)告連續(xù),比值應(yīng)該等于丟失段部分;否則,就不等。每秒包丟失綠可通過(guò)NTP時(shí)標(biāo)差除以丟失部分得到。
從發(fā)送者信息,第三方監(jiān)控器可計(jì)算載荷平均數(shù)據(jù)速率與沒(méi)收到數(shù)據(jù)間隔的平均包速率,兩者比值給出平均載荷大小。如假設(shè)包丟失與包大小無(wú)關(guān),那么特殊接收者收到的包數(shù)量給出此接收者收到的表觀流量。
6.2.2.4 SDES: 源描述RTCP包
SDES 包為三層結(jié)構(gòu),由頭與數(shù)據(jù)塊組成,數(shù)據(jù)塊可以沒(méi)有,也可有多個(gè),組成項(xiàng)描述塊所表明的源。項(xiàng)描述如下:
版本(V)、填充(P)、長(zhǎng)度:
如SR包中所描述。
包類型(PT):
8位,包含常數(shù)202,識(shí)別RTCP SDES包。
源計(jì)數(shù)(SC):
5位,包含在SDES包中的SSRC/CSRC塊數(shù)量,零值有效,但沒(méi)有意義。
源描述項(xiàng)內(nèi)容如下:
CNAME: 規(guī)范終端標(biāo)識(shí)SDES項(xiàng)
CNAME標(biāo)識(shí)屬性如下:
如發(fā)生沖突或重啟程序,由于隨機(jī)分配的SSRC標(biāo)識(shí)可能發(fā)生變化,需要CNAME項(xiàng)提供從SSRC標(biāo)識(shí)到仍為常量的源標(biāo)識(shí)的綁定。
象SSRC標(biāo)識(shí),CNAME標(biāo)識(shí)在RTP連接的所有參加者中應(yīng)是唯一的。
為了提供一套相關(guān)RTP連接中某個(gè)參加者所采用的跨多媒體工具間的綁定,CNAME應(yīng)固定為那個(gè)參加者。
為方便第三方監(jiān)控,CNAME應(yīng)適合程序或人員定位源。
NAME:用戶名稱SDES項(xiàng)
這是用于描述源的真正的名稱,如"John Doe, Bit Recycler,
Megacorp",可是用戶想要的任意形式。對(duì)諸如會(huì)議應(yīng)用,這種名稱也許是參加者列表顯示最適宜的形式,它將是除CNAME外發(fā)送最頻繁的項(xiàng)目。設(shè)置
可建立這樣的優(yōu)先級(jí)別。NAME值至少在連接期間仍希望保持為常數(shù)。它不該成為連接的所有參加者中唯一依賴。
EMAIL:電子郵件地址SDES項(xiàng)
郵件地址格式由RFC822規(guī)定,如"John.Doe@megacorp.com"。連接期間,電子郵件仍希望保持為常數(shù)。
PHONE:電話號(hào)碼SDES項(xiàng)
電話號(hào)碼應(yīng)帶有加號(hào),代替國(guó)際接入代碼,如"+1 908 555 1212"即為美國(guó)電話號(hào)碼。
LOC:用戶地理位置SDES項(xiàng)
根據(jù)應(yīng)用,此項(xiàng)具有不同程度的細(xì)節(jié)。對(duì)會(huì)議應(yīng)用,字符串如"Murray Hill, New
Jersey"就足夠了。然而,對(duì)活動(dòng)標(biāo)記系統(tǒng),字符串如"Room 2A244, AT&T BL
MH"也許就適用。細(xì)節(jié)留給實(shí)施或用戶,但格式和內(nèi)容可用設(shè)置指示。在連接期間,除移動(dòng)主機(jī)外,LOC值期望仍保留為常數(shù)。
TOOL:應(yīng)用或工具名稱SDES項(xiàng)
是一個(gè)字符串,表示產(chǎn)生流的應(yīng)用的名稱與版本,如"videotool 1.2"。這部分信息對(duì)調(diào)試很有用,類似于郵件或郵件系統(tǒng)版本SMTP頭。TOOL值在連接期間仍保持常數(shù)。
NOTE: 通知/狀態(tài)SDES項(xiàng)
該項(xiàng)的推薦語(yǔ)法如下所述,但這些或其它語(yǔ)法可在設(shè)置中顯式定義。NOTE 項(xiàng)旨在描述源當(dāng)前狀態(tài)的過(guò)渡信息,如"on the phone,
can't
talk",或在講座期間用于傳送談話的題目。它應(yīng)該只用于攜帶例外信息,而不應(yīng)包含在全部參加者中,因?yàn)檫@將降低接收?qǐng)?bào)告和CNAME發(fā)送的速度,因此
損害協(xié)議的性能。特殊情況下,它不應(yīng)作為用戶設(shè)置文件的項(xiàng)目,也不是自動(dòng)產(chǎn)生。
當(dāng)其為活動(dòng)時(shí),由于NOTE項(xiàng)對(duì)顯示很重要,其它非CNAME項(xiàng)(如NAME)傳輸速率將會(huì)降低,結(jié)果使NOTE項(xiàng)占用RTCP部分帶寬。若過(guò)渡信息不活
躍,NOTE項(xiàng)繼續(xù)以同樣的速度重復(fù)發(fā)送幾次,但以一個(gè)串長(zhǎng)為零的字符串通知接收者。然而,如對(duì)小倍數(shù)的重復(fù)或約20-30
RTCP間隔也沒(méi)有接收到,接收者也應(yīng)該考慮NOTE項(xiàng)是不活躍的。
PRIV: 專用擴(kuò)展SDES項(xiàng)
該項(xiàng)用于定義實(shí)驗(yàn)或應(yīng)用特定的SDES擴(kuò)展,它包括由長(zhǎng)字符串對(duì)組成的前綴,后跟填充該項(xiàng)其他部分和攜帶所需信息的字符串值。前綴長(zhǎng)度段為8位。前綴字符
串是定義PRIV項(xiàng)人員選擇的名稱,唯一對(duì)應(yīng)應(yīng)用接收到的其它PRIV項(xiàng)。應(yīng)用實(shí)現(xiàn)者可選擇使用應(yīng)用名稱,如有必要,外加附加子類型標(biāo)識(shí)。另外,推薦其它
人根據(jù)其代表的實(shí)體選擇名稱,然后,在實(shí)體內(nèi)部協(xié)調(diào)名稱的使用。
注意,前綴消耗了總長(zhǎng)為255個(gè)八進(jìn)制項(xiàng)的一些空間,因此,前綴應(yīng)盡可能的短。這個(gè)設(shè)備和受到約束的RTCP帶寬不應(yīng)過(guò)載,其目的不在于滿足所有應(yīng)用的全
部控制通訊要求。SDES PRIV前綴沒(méi)在IANA處注冊(cè)。如證實(shí)某些形式的PRIV項(xiàng)具有通用性,
IANA應(yīng)給它分配一個(gè)正式的SDES項(xiàng)類型,這樣就不再需要前綴。這簡(jiǎn)化了應(yīng)用,并提高了傳輸?shù)男省?br />
6.2.2.5 BYE:斷開(kāi)RTCP包
如混合器接收到一個(gè)BYE包,混合器轉(zhuǎn)發(fā)BYE包,而不改變SSRC/CSRC
標(biāo)識(shí)。如混合器關(guān)閉,它也應(yīng)該發(fā)出一個(gè)BYE包,列出它所處理的所有源,而不只是自己的SSRC標(biāo)識(shí)。作為可選項(xiàng),BYE包可包括一個(gè)8位八進(jìn)制計(jì)數(shù),后
跟很多八進(jìn)制文本,表示離開(kāi)原因,如:"camera malfunction"或"RTP loop
detected"。字符串具有同樣的編碼,如在SDES
中所描述的。如字符串填充包至下32位邊界,字符串就不以空結(jié)尾;否則,BYE包以空八進(jìn)制填充。
6.2.2.6 APP:定義應(yīng)用的RTCP包
APP包用于開(kāi)發(fā)新應(yīng)用和新特征的實(shí)驗(yàn),不要求注冊(cè)包類型值。帶有不可識(shí)別名稱的APP包應(yīng)被忽略掉。測(cè)試后,如確定應(yīng)用廣泛,推薦重新定義每個(gè)APP包,而不用向IANA注冊(cè)子類型和名稱段。
本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u2/89627/showart_2049919.html |
|