R #1 - IETF

FEC Dependency Examples
A Review of Existing Tools
Ali C. Begen
[email protected]
FEC Framework Flexibility
• Requirement:
One FEC Framework instance per FEC scheme
• We’d like to support flexible grouping
– A source flow MAY be protected by multiple instances
– Within an instance, multiple repair flows MAY exist
– Source flows MAY be grouped prior to FEC protection
• If multiple repair flows are associated with a source flow,
we’d like to support
– Additive repair flows so that they MAY be used together
– Prioritization among the repair flows
Ali C. Begen ([email protected])
2
Can We Do This with Existing Tools?
_____| FEC FRAMEWORK
/
| 4: Repair Flow
/
| 5: Repair Flow
/
SOURCE FLOWS
/
__| FEC FRAMEWORK
1: Source Flow |___/ |---' | 6: Repair Flow
2: Source Flow | |____
3: Source Flow
|
\
| FEC FRAMEWORK
\ | 7: Repair Flow
\_| 8: Repair Flow
| 9: Repair Flow
Ali C. Begen ([email protected])
3
Tools Available to US
• RFC 3388 – Grouping of Media Lines in SDP
• RFC 4756 – FEC Grouping Semantics in SDP
• draft-ietf-mmusic-decoding-dependency
Ali C. Begen ([email protected])
4
draft-ietf-mmusic-decoding-dependency
• Goal:
Propose a generic solution for SDP grouping semantics for
signaling decoding dependency
• Two Decoding Dependencies (DDP) are defined:
– LAY: Layered coding
• Strict dependence
• Directed graph
– MDC: Multiple description coding
• No dependence but there is a mutual benefit
• Not a directed graph
• The mechanism is transport protocol independent
Ali C. Begen ([email protected])
5
Requirements
• All media streams in a DDP group MUST have the same
decoding dependency
 We cannot mix LAY and MDC in one DDP group
• In offer/answer model, the media streams MUST have the
same dependency structure
Ali C. Begen ([email protected])
6
Example: LAY
a=group:DDP 1 2
m=video 40000 RTP/AVP 94 194
a=rtpmap:94 H264/90000
a=rtpmap:194 H264/90000
a=mid:1
m=video 40002 RTP/AVP 95 195
a=rtpmap:95 SVC/90000
a=rtpmap:195 SVC/90000
a=mid:2
a=depend:95 lay 1:94,195 lay 1:194
• In other words
– PT 95 depends on PT 94
– PT 195 depends on PT 194
Ali C. Begen ([email protected])
7
Example: LAY
a=group:DDP 1 2 3 4
m=video 40000 RTP/AVP 94
a=mid:1
m=video 40002 RTP/AVP 95
a=mid:2
a=depend:95 lay 1:94
m=video 40004 RTP/AVP 96
a=mid:3
a=depend:96 lay 1:94
m=video 40006 RTP/AVP 97
a=mid:4
a=depend:97 lay 1:94 3:96  Multiple dependencies
• In other words
– PT 95 depends on PT 94
– PT 96 depends on PT 94
– PT 97 depends on both PT 94 and 96
Ali C. Begen ([email protected])
8
Example: MDC
a=group:DDP 1 2 3
m=video 40000 RTP/AVP 94
a=mid:1
a=depend:94 mdc 2:95 3:96
m=video 40002 RTP/AVP 95
a=mid:2
a=depend:95 mdc 1:94 3:96
m=video 40004 RTP/AVP 96
a=mid:3
a=depend:96 mdc 1:94 2:95
• In other words
– PT 94, 95 and 96 don’t depend on each other
– They help each other to improve quality (i.e., they are additive)
Ali C. Begen ([email protected])
9
RFC 4756 – FEC Grouping Semantics
a=group:FEC 1
m=audio 30000
a=mid:1
m=audio 30002
a=mid:2
m=audio 30004
a=mid:3
2 3
RTP/AVP 0
RTP/AVP 100
RTP/AVP 102
• “a=group:FEC” line MAY have
– One or more source flows sharing the FEC flow(s) – We want this
– One or more repair flows – We want this
Ali C. Begen ([email protected])
10
RFC 3388 – Grouping Requirements
• RFC 3388 states that
An “m” line identified by its “mid” attribute MUST NOT appear in
more than one “a=group” line using the same semantics
• So, what about the example given in slide 3?
a=group:FEC 1 2 4 5
a=group:FEC 1 6
a=group:FEC 2 3 7 8 9
 This is not allowed by RFC 3388
 But we can write
a=group:FEC 1 2 3 4 5 6 7 8 9
 “group:FEC” line does not indicate any particular association
Ali C. Begen ([email protected])
11
Pro-MPEG CoP3 2-D (Parity) Codes
R #1 (PT:90, mid:5)
S #1 (PT:80, mid:1)
FEC #1
R #2 (PT:91, mid:6)
• Column and Row FEC are additive and do not depend each other
• We could write
a=group:FEC 1 5 6  Group source & repair flows
a=group:DDP 5 6  Group repair flows
a=mid:1 % Source flow
a=mid:5 % Column FEC
a=mid:6 % Row FEC
a=depend:90 mdc 6:91
a=depend:91 mdc 5:90
 This works
Ali C. Begen ([email protected])
12
DVB Hybrid FEC (CoP3 Column + Raptor)
R #1 (PT:90, mid:5)
S #1 (PT:80, mid:1)
FEC #1
R #2 (PT:91, mid:6)
• DVB uses a hybrid combination of CoP3 Column and Raptor codes
• The Hybrid Decoding Procedure:
– If there are missing source packet(s)
• Decode CoP3 Column FEC packets
• Decode Raptor FEC packets
• Convert CoP3 packets to Raptor packets and try decoding again
• While CoP3 packets are used for recovery before Raptor packets,
there is no dependency between the repair flows
 They can be considered “additive”
 So, we can use an SDP similar to the one in the previous slide
Ali C. Begen ([email protected])
13
Protecting a Group of Source Flows
R #1 (PT:90, mid:5)
S #1 (PT:80, mid:1)
FEC #1
S #2 (PT:81, mid:2)
R #2 (PT:91, mid:6)
• We could write
a=group:FEC 1 2 5 6  Group source & repair flows
a=group:DDP 5 6  Group repair flows
a=mid:1 % Source flow #1
a=mid:2 % Source flow #2
a=mid:5 % Repair flow #1
a=mid:6 % Repair flow #2
a=depend:90 mdc 6:91
R #1 (PT:90, mid:5)
R #2 (PT:91, mid:6)
a=depend:91 mdc 5:90
OR
a=depend:91 lay 5:90
R #1 (PT:90, mid:5)
R #2 (PT:91, mid:6)
 This works, too
Ali C. Begen ([email protected])
14
Protecting a Group of Source Flows
R #1 (PT:90, mid:5)
S #1 (PT:80, mid:1)
R #2 (PT:91, mid:6)
FEC #1
S #2 (PT:81, mid:2)
•
The following IS NOT allowed (per decoding-dependency draft)
a=group:FEC
a=group:DDP
a=depend:90
a=depend:91
a=depend:92
•
R #3 (PT:92, mid:7)
1 2
5 6
mdc
mdc
lay
5 6 7
7
6:91
5:90  We cannot mix lay and mdc in one DDP
5:90
The following IS NOT allowed, either (per RFC 3388)
a=group:FEC
a=group:DDP
a=group:DDP
a=depend:90
a=depend:91
a=depend:92
Ali C. Begen ([email protected])
1 2
5 6
5 7
mdc
mdc
lay
5 6 7
 mid:5 MUST NOT appear twice in a DDP line
6:91
5:90
5:90
15
Protecting by Multiple FEC Schemes
R #1 (PT:90, mid:5)
S #1 (PT:80, mid:1)
FEC #1
R #2 (PT:91, mid:6)
FEC #2
R #3 (PT:92, mid:7)
• E.g.: FEC#1  CoP2 Column+Row FEC, FEC#2  Reed-Solomon
a=group:FEC 1 5 6 7  Group source & repair flow
a=group:DDP 5 6  Group repair flows
a=mid:1 % Source flow #1
a=mid:5 % Repair flow #1
a=mid:6 % Repair flow #2
a=mid:7 % Repair flow #3
a=depend:90 mdc 6:91
a=depend:91 mdc 5:90
 This works, too
Ali C. Begen ([email protected])
16
Conclusion
• decoding-dependency draft offers
– A signaling mechanism for “lay” dependencies
– A signaling mechanism for “mdc” dependencies (additiveness)
• But, it does not support
– Using “lay” and “mdc” in the same DDP group
– Prioritization of streams
Ali C. Begen ([email protected])
17