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 個。
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