為什麼要使用RTP

2021-06-20 09:31:31 字數 2507 閱讀 5088

1.      維基百科的相關解釋

像tcp這樣的可靠傳輸協議,通過超時和重傳機制來保證傳輸資料流中的每乙個bit的正確性,但這樣會使得無論從協議的實現還是傳輸的過程都變得非常的複雜。而且,當傳輸過程中有資料丟失的時候,由於對資料丟失的檢測(超時檢測)和重傳,會資料流的傳輸被迫暫停和延時。

2.  為什麼rtp可以解決上述時延問題

rtp協議是一種基於udp的傳輸協議,rtp本身並不能為按順序傳送資料報提供可靠的傳送機制,也不提供流量控制或擁塞控制,它依靠rtcp提供這些服務。這樣,對於那些丟失的資料報,不存在由於超時檢測而帶來的延時,同時,對於那些丟棄的包,也可以由上層根據其重要性來選擇性的重傳。比如,對於i幀、p幀、b幀資料,由於其重要性依次降低,故在網路狀況不好的情況下,可以考慮在b幀丟失甚至p幀丟失的情況下不進行重傳,這樣,在客戶端方面,雖然可能會有短暫的不清晰畫面,但卻保證了實時性的體驗和要求。

3. 多播功能

4.  rtp包頭中的流**特性

首先,我們看看rtp的包頭。

v ― 版本。識別 rtp 版本。

p ― 填充。設定1時,資料報包含乙個或多個附加填充位元,填充位元不屬於有效載荷。

x ― 擴充套件位。設定1時,在固定頭後面,跟隨乙個頭擴充套件。

csrc count ― 包含 csrc 識別符號(在固定頭後)的數目。

m ― 標誌。標誌由描述檔案(profile)檔案定義。允許在位元流中標記重要的事件,如幀邊界。

payload type ― 負載型別。由具體的應用決定其解釋。某些profile 檔案規定了從 payload 編碼到 payload格式的預設靜態對映。另外的 payload type 編碼也可以通過非 rtp 方法實現動態定義。

sequence number ― 序列號。每傳送乙個 rtp 資料報,序列號增加1。接收端可以據此檢測丟包和重建包序列。

timestamp ―時間戳。反映了rtp 資料報中第乙個位元組的取樣時間。時鐘頻率依賴於負載資料格式,並在描述檔案(profile)中進行描述。

ssrc ― 同步源。該識別符號隨機生成,旨在確保在同乙個 rtp 會話中不存在兩個同步源具有相同的 ssrc 識別符號。

csrc ― 貢獻源識別符號。識別該資料報中的有效載荷的貢獻源。

從rtp包頭的規定中,我們可以非常清晰地看出,在rtp協議中,新增了非常多專為流**傳輸所使用的特性,更加有助於應用於流**的傳輸。

5. rtp的profile機制

rtp為具體的應用提供了非常大的靈活性,它將傳輸協議與具體的應用環境、具體的控制策略分開,傳輸協議本身只提供完成實時傳輸的機制,開發者可以根據不同的應用環境,自主選擇合適的配置環境、以及合適的控制策略。

對於上面說的合適的配置環境,主要是指rtp的相關配置和負載格式的定義。rtp協議為了廣泛地支援各種多**格式(如 h.264, mpeg-4, mjpeg, mpeg),沒有在協議中體現出具體的應用配置,而是通過profile配置檔案以及負載型別格式說明檔案的形式來提供。對於任何一種特定的應用,rtp定義了乙個profile檔案以及相關的負載格式說明,相關的檔案如下所示:

《rtp profile for audio and video conferences with minimal control》(rfc3551)

《rtp payload format for h.264 video》(rfc3984)

《rtp payload format for mpeg-4 audio/visual streams》(rfc3016)

說明,如果應用程式不使用專有的方案來提供有效載荷型別(payload type)、順序號或者時間戳,而是使用標準的rtp協議,應用程式就更容易與其他的網路應用程式配合執行,這是大家都希望的事情。例如,如果有兩個不同的公司都在開發網際網路**軟體,他們都把rtp合併到他們的產品中,這樣就有希望:使用不同公司**軟體的使用者之間能夠進行通訊。

6. rtp其他的一些良好特性

(1)rtp協議在設計上考慮到安全功能,支援加密資料和身份驗證功能。

(2)有較少的首部開銷

tcp和xtp相對rtp來說具有過多的首部開銷(tcp和xtp3.6是40位元組,xtp4.0是32位元組,而rtp只有12位元組)

(3)……(等待補充)

7. 相關資源列表

(1)維基百科對rtp的介紹:

(2)維基百科對流**的介紹:

(3)stackoverflows論壇關於rtp vs tcp的討論

(4)關於rtp的負載型別和時間戳的講解

(5) rtp faq

some frequently asked questions about rtp

為什麼要使用blog

有哥們問我,你為什麼使用blog?我總結了一下,覺得有如下幾個原因。1對自己的督促 有了blog,就會經常記得寫點東西 就會經常翻翻網上的新文章,了解一下新技術,不至於迷失在忙碌的生活中 如果把自己的所感所想所學寫出了,自己對自己也會有個概念,不至於迷迷糊糊 還有,畢竟是掛在網上的文字,心中難免擔心...

為什麼要使用XML

xml 代表擴充套件標記語言 extensible markup language 是由 world wide web consortium w 3c 的 xml工作組定義的。這個工作組是這樣描述該語言的 擴充套件標記語言 xml 是 sgml 的子集,其目標是允許普通的 sgml 在web 上以目...

為什麼要使用Nginx?

有人說這些基準測試是不準確的,因為在這樣那樣的環境下,做的比較不一致。我傾向同意基準測試只是告訴了我們其中一部分情況,你能做的是消除偏見 有人見過所有人都同意乙個基準測試是公平的嗎?我是沒見過。我們投資的一些公司把web平台切換到nginx後,可以顯著的解決擴充套件問題。nginx明顯有效的實現了今...