RE: Separate proposal on layering/simulcast (was part of the "big proposal")

I believe that layerId needs to be a DOMString, and layerDependencies needs to be a sequence of DOMStrings. 

The reason is that if it is an int, then it is really only possible to reference layer dependencies within an individual RTPReceiver or RTPSender object. 

However, RFC 5583 describes scenarios in which there would be dependencies between different RTPReceiver or RTPSender objects. 

For example, consider a scenario where an H.264 base layer is being offered on port 4000, with an H.264/SVC enhancement layer on port 4002. 


========== Parental Guidance Suggested ============== 

         v=0
         o=svcsrv 289083124 289083124 IN IP4 host.example.com
         s=LAYERED VIDEO SIGNALING Seminar
         t=0 0
         c=IN IP4 192.0.2.1/127
         a=group:DDP L1 L2 L3
         m=video 40000 RTP/AVP 96 97
         b=AS:90
         a=framerate:15
         a=rtpmap:96 H264/90000
         a=rtpmap:97 H264/90000
         a=mid:L1
         m=video 40002 RTP/AVP 98 99
         b=AS:64
         a=framerate:15
         a=rtpmap:98 H264-SVC/90000
         a=rtpmap:99 H264-SVC/90000
         a=mid:L2
         a=depend:98 lay L1:96,97; 99 lay L1:97
         m=video 40004 RTP/AVP 100 101
         b=AS:128
         a=framerate:30
         a=rtpmap:100 H264-SVC/90000
         a=rtpmap:101 H264-SVC/90000
         a=mid:L3
         a=depend:100 lay L1:96,97; 101 lay L1:97 L2:99
________________________________________
From: Peter Thatcher [pthatcher@google.com]
Sent: Tuesday, April 15, 2014 11:10 AM
To: public-ortc@w3.org
Subject: Separate proposal on layering/simulcast (was part of the "big proposal")

Here's a simplified proposal for how to add layering/simulcast support without getting too mixed up with quality (there will be a separate proposal for that).


dictionary RTCRtpEncodingParameters {
 // ... existing ssrc, codec, fec, rtx

 // These are to setup layer dependencies.

 // If there are no layer dependencies

// (they are independent),

// then it's effectively simulcast.

 int layerId;
 sequence<int> layerDependencies;  // Just the IDs


 // Disable is different than omitting the layer,

// because it can keep resources available to re-enable

// more quickly than re-adding.
 // Plus, it still sends RTCP.
 // Default is active.
 bool active = true;


 // Relative spatial resolution (0.5, 0.25, etc).

 double scale;

}

And here are some examples:

Example of 3-layer SVC
var encodings =[{
  layerId: 0,
  scale: 0.25
}, {
  layerId: 1,
  layerDependencies: [0]
  scale: 0.5
}, {
  layerId: 2,
  layerDependencies: [0, 1]
  scale: 1.0
}]

Example of 3-layer SVC with all but bottom layer disabled
var encodings1 =[{
  layerId: 0,
  scale: 0.25
}, {
  layerId: 1,
  layerDependencies: [0],
  scale: 0.5,
  active: false
}, {
  layerId: 2,
  layerDependencies: [0, 1],
  scale: 1.0,
  active: false
}];

Example of 3-layer simlucast
var encodings =[{
  layerId: 0,
  scale: 0.25
}, {
  layerId: 1,
  scale: 0.5
}, {
  layerId: 2,
  scale: 1.0
}]

Example of 3-layer simulcast with all but bottom layer disabled
var encodings1 =[{
  layerId: 0,
  scale: 0.25
}, {
  layerId: 1,
  scale: 0.5,
  active: false
}, {
  layerId: 2,
  scale: 1.0,
  active: false
}];

Received on Wednesday, 16 April 2014 17:39:38 UTC