WebRTCの順方向誤り訂正符号化−XOR FEC


FEC Format


WebRTCは、RFC 5109で定義XORを適用してRTPデータを保護する、ネットワークのパケット損失に抵抗する.プロトコルによって定義されるパッケージ構造は次のとおりです.
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RTP Header (12 octets or more) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FEC Header (10 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FEC Level 0 Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FEC Level 0 Payload |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FEC Level 1 Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| FEC Level 1 Payload |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cont. |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

RTPヘッダはRFC 3550で定義RTPメッセージ構造のヘッダである.このRTP PacketがFECパケットである場合、M-Markerは0である必要がある、FECにとってMarkerは無意味である.SSRC−SSRCは、このFECによって保護されるRTPパケットのSSRCと一致しなければならず、両者が同源であることを示す.TimeStamp-Timestampのクロック周波数は、このFECが保護するメディアデータのクロック周波数と一致しなければならない.Payload−FECパケットのPayload typeは、SDPによって与えられたものを協議する必要がある.このFECをサポートするシステムについては、受信FECパケットを簡単に破棄すればよく、データグラムの処理に影響を与える.
ここには複数のFEC Level Headerがあり、ULP保護に用いられ、ULPは多様なインターリーブの保護方式を生成することができ、比較的複雑である.ただし、WebRTCはULPをサポートするものではなく、FEC Level 0を使用してデータを保護するしかない.
FECヘッダの定義:
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|E|L|P|X| CC |M| PT recovery | SN base |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| TS recovery |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| length recovery |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

E-1 bit、予約ビットは、FEC Level HeaderにおけるMASKがLong Maskであるか否かを示すために0 L-1 bitである必要があり、通常のMASK長は16 bits、1つのFECパケットGroupのパケット数は最大16個、Long MASK長は48 bits、1つのFECパケットGroupのパケット数は最大48個である.P-1 bits,X-1 bits,CC-4 bits,M-1 bitは,RTPヘッダ内の対応するフィールドの保護ビットを生成するために用いられる.PT recovery-7 bitsパケットpayload typeの保護ビットTS recovery-32 bits、データレポートTimestampの保護ビットSN base-パケット内の最小sequence.Length recovery-16 bits,データ長の保護ビット,パケット長はCSRC List,payload,paddingの全長
ULP Level 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Protection Length | mask |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| mask cont. (present only when L = 1) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Protection length-FECデータ長MASK-前述のように、MASKは、16 bitsのshort mask、または48 bitsのlong maskである、sequenceに対応するrtpデータが、このFECパケットが保護すべきData Groupに属するか否かを単一bitビットで定義する.その対応関係は簡単で,SNベースからの連続する16 or 48個のパケットがそれぞれmaskのビットビットビットに対応し,1はこのパケットが保護され,0はこのパケットが保護されていないことを示す.

Red Packet


WebRTCが対応するパケットGroupに対してFECパケットを生成する後、パケットとFECパケットの両方をRed Packetとして再符号化して転送する.Red Packetについては、ご覧くださいhttp://blog.csdn.net/volvet/article/details/53573359
Reference: 1. rfc2198 - RTP Payload for Redundant Audio Data 2. rfc5109 - RTP Payload Format for Generic Forward Error Correction