??RTP協議分析

?? RTP協議分析

?

一. RTP協議背景.......................................................................................................... 1

二. RTP協議原理及工作機制........................................................................................ 2

2.1RTP協議原理................................................................................................... 2

2.1.1 RTP協議原理....................................................................................... 2

2.1.2 RTCP協議原理..................................................................................... 2

2.2RTP數據包格式................................................................................................ 4

2.2.1 RTP數據包格式................................................................................... 4

2.2.2 RTCP數據包格式................................................................................. 5

BYE包表明一個或多個源將要離開。如果混合器收到BYE包,混合器應當發送這個BYE包,并保持SSRC/CSRC不變。如果混合器關閉,應向貢獻源列表中的所有SSRC,包括它自己的SSRC發送BYE包。BYE包可能會有選擇的包含8個字節的統計字段,其后跟上幾個字節的文本表明離開的原因。文本字符串編碼格式和SDES中描述的相同。??? 9

APP包是自定義包,無固定格式,............................................................................... 10

2.3RTP工作機制................................................................................................. 10

2.3.1 RTP工作機制..................................................................................... 10

2.3.2 RTCP工作機制................................................................................... 10

三. RTP協議關鍵技術指標.......................................................................................... 10

3.1 時間戳........................................................................................................... 10

3.2時延................................................................................................................ 11

3.3 抖動............................................................................................................... 11

簡單的RTP/RTCP的FAQ......................................................................................... 12

?

?

一.????RTP協議背景

流(Streaming)是近年在Internet上出現的新概念,其定義非常廣泛,主要是指通過網絡傳輸多媒體數據的技術總稱。流媒體包含廣義和狹義兩種內涵:廣義上的流媒體指的是使音頻和視頻形成穩定和連續的傳輸流和回放流的一系列技術、方法和協議的總稱,即流媒體技術狹義上的流媒體是相對于傳統的下載-回放方式而言的,指的是一種從Internet上獲取音頻和視頻等多媒體數據的新方法,它能夠支持多媒體數據流的實時傳輸和實時播放。通過運用流媒體技術,服務器能夠向客戶機發送穩定和連續的多媒體數據流,客戶機在接收數據的同時以一個穩定的速率回放,而不用等數據全部下載完之后再進行回放。

流式傳輸有順序流式傳輸(Progressive Streaming)和實時流式傳輸(Realtime Streaming)兩種方式。實時流式傳輸是實時傳送,特別適合現場事件,實時流式傳輸必須匹配連接帶寬,這意味著圖像質量會因網絡速度降低而變差,以減少對傳輸帶寬的需求。“實時”的概念是指在一個應用中數據的交付必須與數據的產生保持精確的時間關系,這需要相應的協議支持,這樣RTP和RTCP就相應的出現了。

?

實時傳輸協議RTP(Realtime Transport Protocol):是針對Internet上多媒體數據流的一個傳輸協議, 由IETF作為RFC1889發布,現在最新的為RFC3550。RTP被定義為在一對一或一對多的傳輸情況下工作,其目的是提供時間信息和實現流同步。RTP的典型應用建立在UDP上,但也可以在TCP等其他協議之上工作。RTP本身只保證實時數據的傳輸,并不能為按順序傳送數據包提供可靠的傳送機制,也不提供流量控制或擁塞控制,它依靠RTCP提供這些服務。

? 實時傳輸控制協議RTCP(Realtime Transport Control Protocol):負責管理傳輸質量,在當前應用進程之間交換控制信息,提供流量控制和擁塞控制服務。在RTP會話期間,各參與者周期性地傳送RTCP包,包中含有已發送的數據包的數量、丟失的數據包的數量等統計資料,因此,服務器可以利用這些信息動態地改變傳輸速率,甚至改變有效載荷類型。RTP和RTCP配合使用,能以有效的反饋和最小的開銷使傳輸效率最佳化,故特別適合傳送網上的實時數據。

?

?

二.????RTP協議原理及工作機制

?

讓我們先看一下RTP和RTCP在網絡層次中的位置,以便我們更加清楚的了解該協議,如下圖1-1所示:

?圖1-1 RTP&RTCP網絡層次關系圖

?

? 下面我們就從RTP以及RTCP的協議原理,數據包格式,工作機制三個方面來對該協議做一個基本的認識和了解:

2.1RTP協議原理

2.1.1 RTP協議原理

?

RTP協議原理比較簡單,負責對流媒體數據進行封包并實現媒體流的實時傳輸,即它按照RPT數據包格式來封裝流媒體數據,并利用與它綁定的協議進行數據包的傳輸,具體見本文2.2.1RTP數據格式;RTP本身只保證實時數據的傳輸,并不能為按順序傳送數據包提供可靠的傳送機制,也不提供流量控制或擁塞控制,它依靠RTCP提供這些服務.

?

2.1.2 RTCP協議原理

?

??RTCP原理是向會話中的所有成員周期性地發送控制包來實現的,應用程序通過接收這些控制數據包,從中獲取會話參與者的相關資料,以及網絡狀況、分組丟失概率等反饋信息,從而能夠對服務質量進行控制或者對網絡狀況進行診斷.

RTCP協議的功能是通過不同的RTCP數據報文(具體描述的見2.2.2RTCP數據包格式)來實現的,主要有如下幾種類型:

·????????SR(Sender Report) 發送端報告,所謂發送端是指發出RTP數據報的應用程序或者終端,發送端同時也可以是接收端。

·????????RR(ReceiverReport) 接收端報告,所謂接收端是指僅接收但不發送RTP數據報的應用程序或者終端。

·????????SDES 源描述,主要功能是作為會話成員有關標識信息的載體,如用戶名、郵件地址、電話號碼等,此外還具有向會話成員傳達會話控制信息的功能。

·????????BYE 通知離開,主要功能是指示某一個或者幾個源不再有效,即通知會話中的其他成員自己將退出會話。

·????????APP 由應用程序自己定義,解決了RTCP的擴展性問題,并且為協議的實現者提供了很大的靈活性。

RTCP數據報攜帶有服務質量監控的必要信息,能夠對服務質量進行動態的調整,并能夠對網絡擁塞進行有效的控制。由于RTCP數據報采用的是組播方式,因此會話中的所有成員都可以通過RTCP數據報返回的控制信息,來了解其他參與者的當前情況。

例如在流媒體應用場合下,發送媒體流的應用程序將周期性地產生發送端報告SR,該RTCP數據報含有不同媒體流間的同步信息,以及已經發送的數據報和字節的計數,接收端根據這些信息可以估計出實際的數據傳輸速率。另一方面,接收端會向所有已知的發送端發送接收端報告RR,該RTCP數據報含有已接收數據報的最大序列號、丟失的數據報數目、延時抖動和時間戳等重要信息,發送端應用根據這些信息可以估計出往返時延,并且可以根據數據報丟失概率和時延抖動情況動態調整發送速率,以改善網絡擁塞狀況,或者根據網絡狀況平滑地調整應用程序的服務質量。

RTCP具有以下四個功能:
1基本功能是提供數據傳輸質量的反饋.這是RTP作為一種傳輸協議的主要作用,它與其他協議的流量和阻塞控制相關.反饋可能對自適應編碼有直接作用,但是IP組播的實驗表明它對于從接收機得到反饋信息以診斷傳輸故障也有決定性作用.向所有成員發送接收反饋可以使"觀察員"評估這些問題是局部的還是全局的.利用類似多點廣播的傳輸機制,可以使某些實體,諸如沒有加入會議的網絡網絡業務觀察員,接收到反饋信息并作為第三類監視員來診斷網絡故障.反饋功能通過RTCP發射機和接收機報告實現.
2、RTCP為每個RTP源傳輸一個固定的識別符,稱為標稱名或CNAME.由于當發生沖突或程序重啟時SSRC可能改變,接收機要用CNAME來跟蹤每個成員.接收機還要用CNAME來關聯一系列相關RTP會話期中來自同一個成員的多個數據流,例如同步語音和圖象
.
3、前兩個功能要求所有成員都發送RTCP包,因此必須控制速率以使RTP成員數可以逐級增長.通過讓每個成員向所有成員發送控制包,各個成員都可以獨立地觀察會議中所有成員的數目
.
4、可選的功能是傳輸最少的會議控制信息,例如在用戶接口中顯示的成員識別.這最可能在"松散控制"的會議中起作用,在"松散控制"會議里,成員可以不經過資格控制和參數協商而加入或退出會議.RTCP作為一個延伸到所有成員的方便通路,必須要支持具體應用所需的所有控制信息通信.

2.2RTP數據包格式

2.2.1 RTP數據包格式

RTP報文頭格式(見RFC3550 Page12):

??? 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 12 3 4 5 6 7 8 9 0 1

??+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?? |V=2|P|X|?CC?? |M|???? PT?????| ??????sequence number???????? |

??+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?? |?????????????????????????? timestamp?????????????????????????? |

??+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?? |??????????synchronization source (SSRC) identifier??????????? |

??+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

?? |???????????contributing source (CSRC) identifiers???????????? |

?? |???????????????????????????? ....???????????????????????????? ?|

??+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?

以上域具體意義如下:
版本(V):2比特此域定義了RTP的版本.此協議定義的版本是2.(值1被RTP草案版本使用,值0用在最初"vat"語音工具使用的協議中.)
填料(P):1比特若填料比特被設置,此包包含一到多個附加在末端的填充比特,不是負載的一部分.填料的最后一個字節包含可以忽略多少個填充比特.填料可能用于某些具有固定長度的加密算法,或者在底層數據單元中傳輸多個RTP包
.
擴展(X):1比特若設置擴展比特,固定頭(僅)后面跟隨一個頭擴展
.
CSRC計數(CC):4比特 CSRC計數包含了跟在固定頭后面CSRC識別符的數目
.
標志(M):1比特標志的解釋由具體協議規定.它用來允許在比特流中標記重要的事件,如幀范圍.規定該標志在靜音后的第一個語音包時置位.


負載類型(PT):7比特此域定義了負載的格式,由具體應用決定其解釋.協議可以規定負載類型碼和負載格式之間一個默認的匹配.其他的負載類型碼可以通過非RTP方法動態定義.RTP發射機在任意給定時間發出一個單獨的RTP負載類型;此域不用來復用不同的媒體流.
序列號(
sequence number):16比特 每發送一個RTP數據包,序列號加一,接收機可以據此檢測包損和重建包序列.序列號的初始值是隨機的(不可預測),以使即便在源本身不加密時(有時包要通過翻譯器,它會這樣做),對加密算法泛知的普通文本攻擊也會更加困難.


時間標志(timestamp):32比特 時間標志反映了RTP數據包中第一個比特的抽樣瞬間.抽樣瞬間必須由隨時間單調和線形增長的時鐘得到,以進行同步和抖動計算.時鐘的分辨率必須滿足要求的同步準確度,足以進行包到達抖動測量.時鐘頻率與作為負載傳輸的數據格式獨立,在協議中或定義此格式的負載類型說明中靜態定義,也可以在通過非RTP方法定義的負載格式中動態說明.若RTP包周期性生成,可以使用由抽樣時鐘確定的額定抽樣瞬間,而不是讀系統時鐘.例如,對于固定速率語音,時間標志鐘可以每個抽樣周期加1.若語音設備從輸入設備讀取覆蓋160個抽樣周期的數據塊,對于每個這樣的數據塊,時間標志增加160,無論此塊被發送還是被靜音壓縮.
時間標志的起始值是隨機的,如同序列號.多個連續的RTP包可能由同樣的時間標志,若他們在邏輯上同時產生.如屬于同一個圖象幀.若數據沒有按照抽樣的順序發送,連續的RTP包可以包含不單調的時間標志,如MPEG交織圖象幀.


同步源(SSRC):32比特 SSRC域用以識別同步源.標識符被隨機生成,以使在同一個RTP會話期中沒有任何兩個同步源有相同的SSRC識別符.盡管多個源選擇同一個SSRC識別符的概率很低,所有RTP實現工具都必須準備檢測和解決沖突.若一個源改變本身的源傳輸地址,必須選擇新的SSRC識別符,以避免被當作一個環路源.


有貢獻源(CSRC)列表:0到15項,每項32比特 CSRC列表識別在此包中負載的有貢獻源.識別符的數目在CC域中給定.若有貢獻源多于15個,僅識別15個.CSRC識別符由混合器插入,用有貢獻源的SSRC識別符.例如語音包,混合產生新包的所有源的SSRC標識符都被陳列,以期在接收機處正確指示交談者.

注意:12個字節出現在每個RTP包中,僅僅在被混合器插入時,才出現CSRC識別符列表.

?

RTP報文擴展頭格式(見RFC3550Page18):

?

? 0?????????????????? 1?????????????????? 2?????? ????????????3

??? 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 12 3 4 5 6 7 8 9 0 1

??+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?? |?????defined by profile?????? |?????????? length????????????? |

?? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?? |??????????????????????? header extension?????????????????????? |

?? |???????????????????????????? ....????????????????????????????? |

?

若RTP頭中的擴展比特位X置1,則一個長度可變的頭擴展部分被加到RTP固定頭之后,.頭擴展包含16比特的長度域,指示擴展項中32比特字的個數,不包括4個字節擴展頭(因此零是有效值).RTP固定頭之后只允許有一個頭擴展.為允許多個互操作實現獨立生成不同的頭擴展,或某種特定實現有多種不同的頭擴展,擴展項的前16比特用以識別標識符或參數.這16比特的格式由具體實現的上層協議定義.基本的RTP說明并不定義任何頭擴展本身。

?

2.2.2 RTCP數據包格式

?

?RTCP包括五種數據包類型(RFC3550 Page69):

abbrev.?name???????????????? value(該值RTCP頭格式中的PT類型字段)

?? SR??????sender report????????? 200 發送者報告

?? RR??????receiver report??????? 201 接收者報告

?? SDES????source description???? 202 源描述

?? BYE?????goodbye??????????????? 203 退出報告

??APP????? application-defined??? 204 自定義報告

現在我們就SR報文為例詳細描述一下RTCP報文格式(RFC3550Page35):

?

??????? 0??????????????????1?????????????????? 2?????????????????? 3

??????? 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9 0 1

??????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

header|V=2|P|??? RC?? |??PT=SR=200?? |???????????? length??????????? |

??????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? |???????????????????????? SSRC of sender??????????????????????? |

??????+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

sender |??????????? ??NTP timestamp, most significant word???????????? |

info??+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? |???????????? NTP timestamp, least significantword???????????? |

??????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? |???????????????????????? RTP timestamp???????????????????????? |

??????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? |???????????????????? sender's packet count???????????????????? |

?????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? |????????????????????? sender's octet count???????????????????? |

??????+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

report |???????????????? SSRC_1 (SSRC of firstsource)??? ?????????????|

block?+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

? 1??? |fraction lost |?????? cumulative numberof packets lost?????? |

??????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? |?????????? extended highest sequence numberreceived?????????? |

??????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? |????????????????????? interarrival jitter????????????????????? |

??????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? |???????????????????????? last SR (LSR)???????????????????????? |

??????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? |?????????????????? delay since last SR(DLSR)????????????????? |

?????? +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

report |???????????????? SSRC_2 (SSRC of secondsource)??????????????? |

block?+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

? 2???:??????????????????????????????...????????????????? ???????????:

??????+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

?????? |????????????????? profile-specificextensions????????????????? |

??????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?

每個RTCP包的開始部分是與RTP數據包相類似的固定部分,隨后是一塊結構化單元,它隨負載類型不同長度發生變化,但是總以32比特終止.

發射機報告包由3部分組成,若定義,可能跟隨第4個面向協議的擴展部分.
第一部分:

8字節長.該域有以下意義:
版本(V):2比特 RTP版本識別符,在RTCP包內的意義與RTP包中的相同.此協議中定義的版本號為
2.
填料(P):1比特若設置填料比特,該RTCP包在末端包含一些附加填料比特,并不是控制信息的基本部分.填料的最后一個比特統計了多少個字節必須被忽略.某些有固定塊大小的加密算法可能需要填料比特.在復合RTCP包中,復合包作為一個整體加密,填料比特只能加在最后一個單包的后面
.
接收報告塊計數(RC):5比特該包中所含接收報告塊的數目.零值有效
.
包類型(PT):8比特包含常數200,用以識別這個為RTCP SR包
.
長度:16比特 以32比特字為單位,該RTCP包的長度減一,包括頭和任何填料.(偏移量1保證零值有效,避免了在掃描RTCP包長度時可能發生的無限循環,同時以32比特為單位避免了對以4為倍數的有效性檢測
.)
SSRC:32比特 SR包發起者的同步源標識符.


第二部分:

發射機信息,20比特長,在每個發射機報告包中出現.它概括了從此發射機發出的數據傳輸情況.此域有以下意義:
NTP時間標志:64比特 指示了此報告發送時的壁鐘時刻,它可以與從其它接收機返回的接收報告塊中的時間標志結合起來,測量到這些接收機的環路時沿.接收機必須期望此時間標志的準確度遠低于NTP時間標志的分辨率.測量的不確定度不可知,因此也無需指示.某個發射機,能夠跟蹤逝去時間但是無法跟蹤壁鐘時間,可以用加入會議后的逝去時間代替.假定該值小于68年,則最高比特為零.允許用抽樣時鐘估計逝去壁鐘時間.無法用壁鐘時間或逝去時間的可以設置此項為零
.
RTP時間標志:32比特 與以上的NTP時間標志對應同一時刻,但是與數據包中的RTP時間標志具有相同的單位和偏移量.這個一致性可以用來讓NTP時間標志已經同步的源間進行媒體內/間同步,還可以讓與媒體無關的接收機估計標稱RTP時鐘頻率.注意在大多數情況下此時間標志不等于任何臨近的RTP包中的時間標志.然而,通過"RTP時間標志計數器"和"由在抽樣點上周期性檢測壁鐘時間得到的實際時間"兩者之間的關系,可以通過相應的NTP時間標志計算得到此RTP時間標志
.
發送的報文數:32比特從開始傳輸到此SR包產生時該發射機發送的RTP數據包總數.若發射機改變SSRC識別符,該計數器重設
.
發送的字節文數:32比特從開始傳輸到此SR包產生時該發射機在RTP數據包發送的字節總數(不包括頭和填料).若發射機改變SSRC識別符,該計數器重設.此域可以用來估計平均負載類型數據速率.


第三部分:

零到多個接收報告塊,塊數等于從上一個報告以來該發射機收聽到的其它源的數目.每個接收報告塊傳輸關于從某個同步源來的數據包的接收統計信息.若某個源因沖突而改變其SSRC識別符,接收機并不延續統計數字.這些統計數字是:
SSRC_n(源識別符):32比特 在此接收報告塊中信息所屬源的SSRC識別符
.
丟包率:8比特自從前一SR包或RR包發射以來,從SSRC_n傳來的RTP數據包的損失比例,以固定點小數的形式表示,小數點在此域的左側,等于將損失比例乘256后取整數部分.該值定義為損失包數被期望接收的包數除,在下一段中定義.若由于復制而導致包損為負值,損失比例值設為零.注意在收到上一個包后,接收機無法告之以后的包是否丟失,若在上一個接收報告間隔內從某個源發出的所有數據包都丟失,那么將不為此源發送接收報告塊
.
累計包丟失數:24比特從開始接收到現在,從源SSRC_n發到本源的RTP數據包的丟包總數.該值定義為期望接收的包數減去實際接收的包數,接收的包括復制的或遲到的.由于遲到的包不算作損失,在發生復制時包損可能為負值.期望接收的包數定義為擴展的上一接收序號(隨后定義)減去最初接收序號
.
接收到的擴展的最高序列號:32比特低16比特包含從源SSRC_n來的最高接收序列號,高16比特用相應的序列號周期計數器擴展該序列號.注意在同一會議中的不同接收機,若啟動時間明顯不同,將產生不同的擴展項
.
到達間隔抖動:32比特RTP數據包到達時刻統計方差的估計值,以時間標志為單位測量,用無符號整數表達.到達時刻抖動J定義為一對包中接收機相對發射機的時間跨度差值的平均偏差(平滑后的絕對值).如以下等式所示,該值等于兩個包相對傳輸時間的差值,相對傳輸時間是指包的RTP時間標志和到達時刻接收機時鐘,以同一單位的差值.若Si是包i的RTP時間標志,Ri是包i以RTP時間標志單位的到達時刻值,對于兩個包i和j,D可以表達為

D(i,j) =(Rj - Ri) - (Sj - Si) = (Rj - Sj) - (Ri - Si)
到達時刻抖動可以在收到從源SSRC_n來的每個數據包i后連續計算,利用該包和前一包i-1的偏差D(按到達順序,而非序號順序),根據公式J(i) = J(i-1) + (|D(i-1,i)| -J(i-1))/16

計算.無論何時發送接收報告,都用當前的J值.
此處描述的抖動計算允許與協議獨立的監視器對來自不同實現的報告進行有效的解釋
.
上一SR報文 (LSR):32比特 接收到的來自源SSRC_n的最新RTCP發射機報告(SR)的64位NTP時間標志的中間32位.若還沒有接收到SR,該域值為零
.
自上一SR的時間延時(DLSR):32比特 是從收到來自SSRC_n的SR包到發送此接收報告塊之間的延時,以1/65536秒為單位.若還未收到來自SSRC_n的SR包,該域值為零
.
假設SSRC_r為發出此接收報告塊的接收機.源SSRC_n可以通過記錄收到此接收報告塊的時刻A來計算到SSRC_r的環路傳輸時延.可以利用最新的SR時間標志(LSR)域計算整個環路時間A-LSR,然后減去此DLSR域得到環路傳播時延
.
可以用此來近似測量到一族接收機的距離,盡管有些連接可能有非常不對稱的時延.

?

RR:接收者報告RTCP

??????? 0?????????????????? 1?????????????????? 2?????????????????? 3

??????? 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 90 1 2 3 4 5 6 7 8 9 0 1

??????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

header|V=2|P|??? RC?? |??PT=SR=201?? |???????????? length??????????? |

??????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? |???????????????????????? SSRC of sender??????????????????????? |

??????+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

report |???????????????? SSRC_1 (SSRC of firstsource)???????????????? |

block?+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

? 1??? |fraction lost |?????? cumulative numberof packets lost?????? |

?????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? |?????????? extended highest sequence numberreceived?????????? |

??????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? |????????????????????? interarrival jitter????????????????????? |

??????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? |???????????????????????? last SR (LSR)???????????????????????? |

??????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? |?????????????????? delay since last SR(DLSR)????????????????? |

??????+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

report |???????????????? SSRC_2 (SSRC of secondsource)??????????????? |

block?+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

??2??? :?????????????????????????????? ...???????????????????????????? :

??????+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

?????? |????????????????? profile-specificextensions????????????????? |

?????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?

接收機報告包(RR)與發射機報告包基本相同,除了包類型域包含常數201和沒有發射機信息的5個字(NTP和RTP時間標志和發射機包和字節計數).余下區域與SR包意義相同.若沒有發送和接收據報告,在RTCP復合包頭部加入空的RR包(RC=0)。

?

SDES:源描述RTCP

源描述(SDES)包由一個頭及0個或多個塊組成。每個塊都由塊中所標識的數據源的標識符及其后的各個描述構成。

?????? 0 ??????????????1??????????????2 ?????????????3

?????? 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 67 8 9 0 1

?????? +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

header|V=2|P| SC ???| PT=SDES=202 ???| ????length??????????????????? ?|

?????? +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

chunk |SSRC/CSRC_1 |

1???? ?+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? | SDES items |

?????? | ... |

?????? +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

chunk |SSRC/CSRC_2 |

2 ?????+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

?????? | SDES items |

?????? | ... |

?????? +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+



BYE:退出RTCP

0 1 2 3

0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 78 9 0 1

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|V=2|P| SC | PT=BYE=203 | length |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

| SSRC/CSRC |

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

: ... :

+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+

(opt) | length | reason for leaving ...

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

BYE包表明一個或多個源將要離開。如果混合器收到BYE包,混合器應當發送這個BYE包,并保持SSRC/CSRC不變。如果混合器關閉,應向貢獻源列表中的所有SSRC,包括它自己的SSRC發送BYE包。BYE包可能會有選擇的包含8個字節的統計字段,其后跟上幾個字節的文本表明離開的原因。文本字符串編碼格式和SDES中描述的相同。

?

APP包是自定義包,無固定格式,

?

2.3RTP工作機制

?

2.3.1 RTP工作機制

?

? RTP根據應用程序的要求將流媒體數據包封裝成RTP數據包并進行發送;它靠上層的調用以及依賴網絡層發送來實現;

工作時,RTP協議從上層接收流媒體信息碼流(如H.263),裝配成RTP數據包發送給下層,下層協議提供RTP和RTCP的分流。如在UDP中,RTP使用一個偶數號端口,則相應的RTCP使用其后的奇數號端口。RTP數據包沒有長度限制,它的最大包長只受下層協議的限制。

?

2.3.2 RTCP工作機制

?

?RTCP報文不封裝音視頻數據,而是封裝發送端或者接收端的統計報表信息;

? 在RTP會話期間,每個參與者周期性(這個周期看到2種說法,一個是1秒一個是5秒,暫時用的是5秒每次)的向其它參與者發送RTCP控制信息包,如下圖1-2所示:

圖1-2RTCP工作示意圖

?

?因為網絡的情況很不穩定,如果網絡情況好我們可以減少語音的延遲時間,也可以增大視頻的發送幀率或質量。若網絡狀況不好我們可以增大語音延遲時間以保證語音連續,也可減少視頻的發送幀率或質量,以減少網絡的阻塞。

RTCP包的發送率根據與會者的數量來調整.

三.????RTP協議關鍵技術指標

3.1 時間戳

?

時間戳字段是RTP首部中說明數據包時間的同步信息,是數據能以正確的時間順序恢復的關鍵。時間戳的值給出了分組中數據的第一個字節的采樣時間(Sampling Instant),要求發送方時間戳的時鐘是連續、單調增長的,即使在沒有數據輸入或發送數據時也是如此。在靜默時,發送方不必發送數據,保持時間戳的增長,在接收端,由于接收到的數據分組的序號沒有丟失,就知道沒有發生數據丟失,而且只要比較前后分組的時間戳的差異,就可以確定輸出的時間間隔。

  RTP規定一次會話的初始時間戳必須隨機選擇,但協議沒有規定時間戳的單位,也沒有規定該值的精確解釋,而是由負載類型來確定時鐘的顆粒,這樣各種應用類型可以根據需要選擇合適的輸出計時精度。

  在RTP傳輸音頻數據時,一般選定邏輯時間戳速率與采樣速率相同,但是在傳輸視頻數據時,必須使時間戳速率大于每幀的一個滴答。如果數據是在同一時刻采樣的,協議標準還允許多個分組具有相同的時間戳值,如多個分組屬于同一畫像。

RTCP中的SR(Sender Report發送端報告)控制分組包含NTP(網絡時間,是以1900-1-1零時為起點的系統絕對時間)時間戳和RTP時間戳(封裝數據時候打上的時間戳與媒體幀上打上的時間戳不同)可用于同步音視頻媒體流。其實現機制如下:

RTP時間戳是依據鄰近的RTP數據包中的時間戳結合NTP時間差得到的,用公式表達為:

RTP_tsi = tsi + NTPi-NTP'i

其中:

RTP_tsi表示RTCP中的RTP時間戳;tsi表示鄰近的RTP包中的時間戳;NTPi表示RTCP的網絡時間戳;NTP'i表示鄰近的RTP包對應的網絡時間戳;下標表示第i個源。

RTP_tsj=tsj+NTPj—NTP'j 表示第j個源的RTP時間戳;

因此,i和源j之間的相對時差可以表示為:

(RTP_tsi – tsi) -( RTP_tsj - tsj) = (NTPi –NTP'i)- (NTPj—NTP'j);

由于NTP同步,差值可以反映出兩個源的相對時差。因為要同步不同來源的媒體流,必須使得同步他們的絕對時間基準,而NTP時間戳正是這樣的絕對時間基準[4]。而對于同一來源的媒體流,應用RTP的時間戳來保證其同步。

?

3.2時延

?

影響時延的因素有多個方面:編解碼、網絡、防抖動緩沖、報文隊列等都影響時延,其中有些是固定時延,如編解碼網絡速率等;有些是變化的,如防抖動緩沖和隊列調度等,固定的時延可以通過改變編解碼方式和提高網絡速率來改變,而變化的時延通常采用提高轉發效率來提高;

假設SSRC_r為發出一個接收報告塊的接收機.源SSRC_n可以通過記錄收到接收報告塊的時刻A來計算到SSRC_r的環路傳輸時延.可以利用最新的SR時間標志(LSR)域計算整個環路時間A-LSR,然后減去此DLSR域得到環路傳播時延.

?

3.3 抖動

?

在視頻電話中,語音、視頻數據都是使用UDP協議傳送的,但這種協議傳輸的數據包在網絡層不能保證其發送順序,需要應用層進行排序。在網絡的傳輸中都會有延時,且隨著網絡負載的變化,延時的長短也不相同,對于語音數據,如果接收方收到后立即播放,很容易造成語音的抖動。

?

RTP數據包到達時刻統計方差的估計值,以時間標志為單位測量,用無符號整數表達

到達時刻抖動J定義為一對包中接收機相對發射機的時間跨度差值的平均偏差(平滑后的絕對值).如以下等式所示,該值等于兩個包相對傳輸時間的差值,相對傳輸時間是指包的RTP時間標志和到達時刻接收機時鐘,以同一單位的差值.若Si是包i的RTP時間標志,Ri是包i以RTP時間標志單位的到達時刻值,對于兩個包i和j,D可以表達為
D(i,j) =(Rj - Ri) - (Sj - Si) = (Rj - Sj) - (Ri - Si)
?
到達時刻抖動可以在收到從源SSRC_n來的每個數據包i后連續計算,利用該包和前一包i-1的偏差D(按到達順序,而非序號順序),根據公式

J(i) =J(i-1) + (|D(i-1,i)| - J(i-1))/16

計算.無論何時發送接收報告,都用當前的J值.

?

為了更好的解決抖動的問題,最好能實現抖動緩存(原理比較簡單,在此不做詳細描述),一是保證語通道讀取數據包的順序正確,二是控制接收方按照采集的時間順序播放語音,減少語音的抖動;另外提供QoS和資源預留使語音數據獲得優先發送和獲得固定的帶寬也是解決抖動問題的主要手段。

?

四 簡單的RTP/RTCP的FAQ

1.RTP大多建立在UDP之上,是無連接,無保證質量的傳輸協議,效率很高,但是我們為了保證視頻通話等應用的質量,引入RTCP----RTP的控制協議,有效改善傳輸質量.

2.假如視頻數據從A發送到B,因此我們需要建立2個socket,一個負責從A發送RTP視頻數據包到B,一個負責收發RTCP數據包.通過RTCP控制包中的信息判斷網絡狀況更改碼率適應網絡帶寬.A端周期性發送SR--發送者報告包給B端,B端周期性回復SR包,往A端發送RR--接收者報告包,告知A端接收狀況,這樣A端可以估算出現在的網絡狀況,調整A端發送速度,改善視頻質量.具體的調整算法要經過網絡測試獲得,不是固定不變的.

3.上面說的是單播情況下RTP與RTCP的配合,如果建立在多播情況下,如多方通話,視頻會議等的時候,RTCP的作用更加大,因為RTCP中的源描述包,就是各個與話人存在的證明,一個身份的標識,加入通話,則需要周期性發送SDES源描述包,退出通話需要發送BYE包,刪除相應的SDES,其次RTCP的發送周期會隨著人數的增減而動態變化,以改善通話質量.

4.在RTP/RTCP應用中,會創建多個socket,頻繁的調用socket,當復用socket的時候,同一socket會兼有收發功能,那么收發就很有可能沖突,需要對socket的調用做判斷,先判斷其是否準備好.

服務端單線程模型

Socket()->bind()->select()->recvfrom()->sendto()->close()

客戶端模型

Socket()->sendto->recvfrom()->close()

?

5.當程序被異常終止的時候,未調用最后的close()關閉起先申請的socket,那么服務器端在再一次啟動的時候,bind()的時候就會失敗,因為上一次申請的時候講原來的端口已經綁定到起先的socket上了,未釋放,所以會出錯.所以在使用socket的時候,關閉socket很重要.可以捕獲異常的信號量,強制關閉整個程序以釋放申請的socket

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/253164.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253164.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253164.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mongodb 部署

安裝mongodb-3.4 1)將安裝包上傳至服務器 2)對壓縮文件進行解壓 tar -zxvf mongodb-linux-x86_64-suse12-v3.4-latest.tar.gz 3)把解壓出來的文件修改一下名字,并挪到指定安裝路徑 sudo mv mongodb-linux-x86_64-suse12-3.4.6-22-…

如何選擇一款優秀的兒童讀寫臺燈?

如何選擇一款優秀的兒童閱讀臺燈?除了品牌、外觀、材質、價格等因素外,最關鍵的是技術參數。 先說結論,滿足如下幾點參數,當數優選: 1-光通量:500lm以上 2-顯色指數:≥95 3-色溫&#xff1a…

Python與操作系統有關的模塊

Os模塊Python的標準庫中的os模塊主要涉及普遍的操作系統功能。可以在Linux和Windows下運行,與平臺無關。os.sep 可以取代操作系統特定的路徑分割符。os.name字符串指示你正在使用的平臺。比如對于Windows,它是’nt’,而對于Linux/Unix用戶&am…

數據對拍代碼 c++

碼了一晚上才碼出這個,有點簡陋,待更新 注意:1、數據路徑自己在代碼中修改,直接重定向即可 2、要配置好環境,將cb安裝路徑里的MinGW\bin路徑放到path中 3、三份代碼記得先編譯一遍,再運行這份代碼 #include…

LCD顯示相關知識

無論是筆記本電腦還是桌面系統,采用的LCD顯示屏都是由不同部分組成的分層結構。位于最后面的一層是由熒光物質組成的可以發射光線的背光層。背光層發出的光線在穿過第一層偏振過濾層之后進入包含成千上萬水晶液滴的液晶層。液晶層中的水晶液滴都被包含在細小的單元格…

屏幕防藍光設計方向

屏幕防藍光設計方向,會有哪些呢? 初步想到的如下: 1- 背光燈珠類型; 藍光激發還是全光譜sunlike燈珠; 2-玻璃鍍膜; 3-屏幕貼膜; 4-軟件設置; 除了第一項外,其余均多…

快速冪,矩陣乘法,矩陣快速冪

快速冪利用二進制 復雜度 log級 #include <cstdio> #include <iostream> #include <string> #include <bits/stdc.h>using namespace std; typedef long long ll; typedef unsigned long long ull;int q_power(int a,int b,int c) {int r1;a%c;while (…

標準C++類std::string的內存共享和Copy-On-Write(寫時拷貝)

標準C&#xff0b;&#xff0b;類std::string的內存共享&#xff0c;值得體會&#xff1a; 詳見大牛&#xff1a;https://www.douban.com/group/topic/19621165/ 顧名思義&#xff0c;內存共享&#xff0c;就是兩個乃至更多的對象&#xff0c;共同使用一塊內存&#xff1b; 1.關…

常用類一一枚舉類一一定義和調用

package test;public class EnumTest {/**枚舉* */public static void main(String[] args) {// TODO Auto-generated method stubStudent stu new Student();stu.setName("李華");stu.setSex(Genders.MALE);stu.setAge(24);System.out.println(stu.getSex());}} pa…

HDbaseT 高清傳輸更簡單——只需一根網線

HDbaseT支持最高20Gbps的傳輸速率&#xff0c;能更好的支持未來的3D和2K4K視頻格式&#xff0c;傳輸采用普通的CAT5e/6網絡線纜&#xff0c;連接器也采用普通的 RJ45接頭&#xff0c;而傳輸距離達到了100米&#xff0c;除了提供視頻信號傳輸功能外&#xff0c;還具有網絡連接以…

2017年

2017年對自己來說這一年是最需要成長的一年&#xff0c;肩上的責任越來越大了。轉載于:https://www.cnblogs.com/jimmy1293/p/6543533.html

解決 | 此數據庫文件跟當前sql server實例不兼容 sql server2008無法連接到(local)...

最近在搞ASP.NET&#xff0c;因實驗室VS版本跟PC不一樣可能&#xff0c;拷回來一打開就這樣子&#xff1a; 眉頭一皺的我打開我的古董SQL&#xff0c;自從用了MySQL就沒碰它了我的鍋。。。果然。。連接的時候。。。不慌&#xff0c;(win 10)打開控制面板\系統和安全\管理工具 -…

IP大時代下,網絡槍機技術發展現狀

來源&#xff1a;a&s《評測&選型》 作者&#xff1a;海康威視程瑋 在視頻監控行業內&#xff0c;有很多里程碑式的產品&#xff0c;我們可以從這些產品中了解視頻監控的發展趨勢。2000年左右&#xff0c;第一臺DVR面世奠定了視頻監控行業從CCTV走向數字化的基礎&#x…

JVM調優總結(3):垃圾回收面臨的問題

如何區分垃圾 上面說到的“引用計數”法&#xff0c;通過統計控制生成對象和刪除對象時的引用數來判斷。垃圾回收程序收集計數為0的對象即可。但是這種方法無法解決循環引用。所以&#xff0c;后來實現的垃圾判斷算法中&#xff0c;都是從程序運行的根節點出發&#xff0c;遍歷…

RoHS、無鉛制程、無鹵 的基本介紹

一、RoHS是歐盟對電子電器產品不能超標含有某些有害物質的禁令&#xff1b;在具體產品生產中&#xff0c;從原材料的選擇、采購到制程中可能會污染產品&#xff08;和產品接觸&#xff09;的生產輔助材料&#xff0c;都必須不能超標含有&#xff08;有最大允許濃度&#xff09;…

springCloud分布式事務實戰(九)改造ThemeMicroService 支持分布式事務

&#xff08;1&#xff09; 添加jar <!-- springCloud 事務 關鍵點1 --><dependency><groupId>com.codingapi</groupId><artifactId>transaction-springcloud</artifactId><version>${lcn.last.version}</version><exclu…

日常的一天學習

今天的學習仍然沒有特別明確的計劃&#xff0c;也許自己不應該再徘徊&#xff0c;專心做java編程挺好的啊&#xff0c;也許還能找到不錯的工作&#xff0c;可是自己始終還是想成為一個研究安全的人&#xff0c;只是不知道自己在畢業的時候能不能成長到靠安全來養活自己。 早上主…

庖丁解牛-----Live555源碼徹底解密(根據MediaServer講解Rtsp的建立過程)

live555MediaServer.cpp服務端源碼講解(testRelay.cpp,http://blog.csdn.net/smilestone_322/article/details/18923139) int main(int argc, char** argv) { // Begin by setting up our usage environment: TaskScheduler* scheduler BasicTaskScheduler::createNew(); Usa…

運放搭建主動濾波電路

主動低通濾波電路 R1R216K R3R4100K C1C20.01uF 放大倍數AvR4/(R3R4) Freq1KHz 主動高通濾波電路 C12*C20.02uF,C20.01uF R1R2110K 6dBLow-cutFreq100Hz

deployd使用

安裝node,用npm 安裝deployd , npm install deployd -g。 cd進入文件夾&#xff0c;輸入 dpd create deploydDemo&#xff0c;然后 dpd -p 5500 deploydDemo\app.dpd&#xff08;5500是你開啟的mongodb創建的服務&#xff09;&#xff0c;接著在瀏覽器中輸入 http://localhost:…