探索 Mediastreamer2 VoIP 引擎。 第 8 部分

文章素材取自我 禪頻道.

探索 Mediastreamer2 VoIP 引擎。 第 8 部分

RTP包結構

在過去 文章 我們正在使用 鯊魚 執行了在我們的接收器和發送器之間交換的 RTP 數據包的捕獲。 好吧,在這一篇中,我們將用不同的顏色繪製包的元素並討論它們的用途。

讓我們看一下同一個包裝,但帶有彩色邊距和解釋性標籤:
探索 Mediastreamer2 VoIP 引擎。 第 8 部分

在清單的底部,構成 RTP 數據包的字節是有色的,而這又是 UDP 數據包的有效負載(其標頭用黑色圓圈)。 彩色背景表示 RTP 標頭的字節,包含 RTP 數據包有效負載的數據塊以綠色突出顯示。 數據以十六進制格式顯示。 在我們的例子中,這是根據 u-law (mu-law) 壓縮的音頻信號,即一個樣本的大小為 1 個字節。 由於我們使用默認採樣率 (8000 Hz),在 50 Hz 的數據包速率下,每個 RTP 數據包應包含 160 字節的有效負載。 我們將通過計算綠色區域中的字節數來看到這一點,它們應該有 10 行。

根據標準,有效負載中的數據量必須是四的倍數,或者換句話說,它必須包含整數個四字節字。 如果恰好你的payload不匹配這個規則,那麼你需要在payload的末尾添加零值字節並設置Padding位。 該位位於 RTP 標頭的第一個字節中,呈綠松石色。 請注意,所有有效負載字節都是 0xFF,這就是 u-law 靜默的樣子。

RTP 數據包頭由 12 個強製字節組成,但在兩種情況下它可能更長:

  • 當數據包攜帶通過混合來自多個源(RTP 流)的信號獲得的音頻信號時,在標頭的前 12 個字節之後有一個表,其中包含源標識符列表,其有效負載用於創建此數據包的有效負載。 在這種情況下,在頭部第一個字節的低四位(字段 貢獻源標識符計數) 表示源數。 字段大小為 4 位,因此該表最多可包含 15 個源標識符。 其中每一個佔用4個字節。 在建立電話會議時使用此表。

  • 當標題有擴展名時。 在這種情況下,該位設置在標頭的第一個字節中 X. 在擴展頭中,在參與者表(如果有的話)之後,有一個單字擴展頭,後面是擴展詞。 擴展是字節的集合,可用於傳輸附加數據。 該標準沒有規定此數據的格式 - 它可以是任何格式。 例如,可能是接收RTP包的設備的一些額外設置。 然而,對於某些應用程序,已經開發了擴展報頭標準。 例如,這樣做是為了標準中的通信 ED-137(VoIP ATM 組件的互操作性標準).

現在讓我們更詳細地看一下標題字段。 下面是一張帶有 RTP 標頭結構的規範圖片,我也無法抗拒並塗上了相同的顏色。

探索 Mediastreamer2 VoIP 引擎。 第 8 部分
VER — 協議版本號(當前版本 2);

P - 在 RTP 數據包末尾補充空字節的情況下設置的標誌;

X - 標頭已擴展的標誌;

CC — constant header後面(words 1..3之後)包含證監會標識符的個數,該表未在圖中顯示;

M — 幀開始或通道中存在語音的標記(如果使用語音暫停檢測器)。 如果接收器不包含語音暫停檢測器,則該位應永久設置;

類型 - 指定有效載荷的格式;

序列號 - 數據包編號,用於恢復數據包播放的順序,因為實際情況是數據包到達接收方時的順序與發送順序錯誤。 初始值必須是隨機的,這樣做是為瞭如果 RTP 流被加密,將很難破解它。 此外,該字段允許您檢測丟失的數據包;

時間戳 - 時間戳。 時間以信號樣本測量,即如果一個burst包含160個樣本,那麼下一個burst的時間戳會多160個。時間戳的初始值必須是隨機的;

SSRC — 包源的標識符,它必須是唯一的。 最好在開始 RTP 流之前隨機生成它。

如果你開發自己的 RTP 數據包發送器或接收器,你將不得不多次查看你的數據包以提高生產率,我建議你學習如何在 TShark 中使用數據包過濾,它允許你只捕獲那些數據包你感興趣。 在網絡上有數十個 RTP 設備運行的環境中,這是非常有價值的。 在 TShark 命令行中,過濾選項是用“-f”選項指定的。 當我們想從端口 8010 捕獲數據包時,我們使用了這個選項:
-f "udp port 8010"
過濾參數本質上是一組“捕獲”數據包必須匹配的標準。 條件可以檢查數據包中某個字節的地址、端口、值。 條件可以與邏輯運算“AND”、“OR”等組合。 一個非常強大的工具。

如果要批量查看字段變化的動態,則需要復制輸出 鯊魚 如上一篇文章所示,通過將輸出傳遞到文件 鯊魚 在入口 開球. 接下來,打開日誌文件 更少,vim 或者其他可以快速處理大型文本文件並蒐索字符串的工具,您可以找出 RTP 流中數據包字段行為的所有細微差別。

如果需要監聽RTP流傳輸的信號,那麼需要使用版本 鯊魚 帶可視化界面 Wireshark的. 通過簡單的鼠標操作,您可以收聽和查看信號的波形。 但在一種情況下 - 如果它以 u-law 或 a-low 格式編碼。

下一個 文章 我們將與您進行雙工對講。 準備一副耳機和一個對話者。

來源: www.habr.com

添加評論