2018年2月9日 星期五

RTP

RTP (Real-time Transport Protocol) 是用來傳送即時影音資料的傳輸層協定,規範在 RFC 3550,一般是放在 UDP 上面,使用偶數通訊埠。下一個奇數通訊埠用來傳搭配的 RTCP

RTP header
 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 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X|  CC   |M|     PT      |       sequence number         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           timestamp                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           synchronization source (SSRC) identifier            |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|            contributing source (CSRC) identifiers             |
|                             ....                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
CSRC 以後為 option
  • V (version):RTP 版本,目前為 2。
  • P (padding):表示尾端填充了一些多餘的位元組,長度由最後位元組決定,這些不算是 payload 的一部分。有些需要固定區塊大小的加密演算法、或者下層協定資料單元可放多個 RTP 資料單元時需要。
  • X (extension):表示 RTP header 最後有加擴充,內含長度。
  • CC (CSRC count):CSRC 數目,位於 SSRC 之後。
  • M (marker bit):由 profile 定義用途,用來標記封包串流中的重大事件,例如 frame boundaries。profile 可以改變 PT 位元數目來定義更多 marker 位元或不用 marker 位元。在 voice activity detector 啟用時使用,只有當封包包含 silence 期間後第一個語音封包時設為 1,幫助 decoder 分辨是有 silence 還是有掉封包。
  • PT (payload type):代碼對應到 payload 使用的影音編碼格式,在 RFC 3551對應表,包括靜態及動態的對應方式。如果是動態方式,使用非 RTP 得知代碼。
  • sequence number:每傳一個 RTP 封包加一,讓接收端偵測封包遺失或順序錯誤。
  • timestamp:第一個 octet 的時間,解析度看應用。一開始應該用亂數。連續封包如果是同一時間,使用同樣 timestamp,例如同一個 video 的 frame。連續封包可能 timestamp 變小,例如 MPEG 的 interpolated video frame。
    • 例如 A/u-law 每 20ms 一個封包時,每個封包 timestamp 會增加 160。
  • SSRC (Synchronization Source) Identifier:來源的亂數編號。
  • CSRC:混音時會將來源的 SSRC 加到 CSRC 列表,最多 15 個。
extension 格式
 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 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      defined by profile       |           length              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        header extension                       |
|                             ....                              |
參考: http://albert-oma.blogspot.tw/2012/05/rtp.html

SIP header Via

所有 SIP 訊息 都要有 Via,縮寫 v。一開始的 UAC 和後續途經的每個 proxy 都會疊加一個 Via 放傳送的位址,依序作為回應的路徑。 格式 sent-protocol sent-by [ ;branch= branch ][ ; 參數 ...] s...