-
Notifications
You must be signed in to change notification settings - Fork 115
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
RTX/RED/FEC handling #548
Comments
For a future re-design (and as already commented in several issues/threads):
|
To further explain the trouble: The simpler solution would be to have an RTX payload type as part of the original codec. Otherwise you get things like:
This adding a sub "rtx" dictionary in
I also disagree with @ibc FEC / RED that FEC must be defined codecs any more than RTX must be a codec. The same philosophy can exist as RTX. The difference would be that the payloadType set in the the FEC codec could match other codecs because FEC can be shared, whereas with RTX they cannot. In fact, I'd say FEC creates worst ambiguities as a codec than RTX. This is because RED+ULPFEC requires a set of cross referenced codecs to match, specifically with RED+ULPFEC. RED on the receiving side is supposed to be able to decode anything the sender throws at it (but still requires the codecs be defined). But on the sender side it's required to list the redundancy list per RFC 2198 with RED. The trouble is that RED on the sender can package the raw video codec by itself, or the ULPFEC version, but not at the same time as RED normally expected per that RFC (which is a list of redundancy codecs, not "either" "or" possible payloadType values as its currently used). Thus FEC left as as a codec it means:
I would say those ambiguities can all be removed by including an FEC sub-dictionary to the codec.
If flex-fec is used, then the mechanism could be defined as flex-fec and the payloadType would be specific the flex-fec codec's payload type with parameters defining the flex-fec's codec parameters, and multiple codecs could use the same FEC payload type. If red+ulpfec is the mechanism, then the "parameters" could include the definition for the ULPFEC codec payload type to used inside. Thus the only ambiguities remaining is enforcing a few basic rules:
But the need to have multiple cross references RTX, FEC codecs is eliminated and all the fmtp complexities with RTX apt and RED 2198. No matter what we do here, it's a design trade off scenario... |
AFAIU FEC protects a stream rather than a payload type, so what would happen if all but one |
FEC does protect the stream but it's not required that it be used in combination with every codec. In other words, you need not use a FEC in combination with a particular codec on the sender side (disallowed or not used). And on the receiver, it need not be expected to ever be seen. |
Clear. Thanks. |
Also, we should consider if CN and DTMF are other "codec features" that could operate in the same manner like RTX / FEC, or be left as "magic" cross referenced codec features. |
Related: w3c/ortc#497 While in theory there's no RTX/RED/ULPFEC specific to a kind, in practice, it's usage is very much not only specific to a kind but specific to a codec. This is another reason to have the "feature" codecs as defined within the context of a codec. I'm also not sure if FEC might need a mechanism list in capabilities (i.e. unlike ortc, capabilities in webrtc do not announce anything beyond the codec mimetype), not just a single mechanism; A browser might might want to announce support RED, RED+ULPFEC, and FlexFEC at the same time, or "either"/"or" the mechanisms exclusively on a particular codec. The Just some more food for thought on this issue.... |
@robin-raymond What about RTCRtpCodecCapabilities.codecs[]? Is "rtx" still included there? |
Fixed by #733 |
Currently, we have:
partial dictionary RTCRtpParameters {
sequence codecs;
};
dictionary RTCRtpCodecParameters {
unsigned short payloadType;
DOMString mimeType;
unsigned long clockRate;
unsigned short channels = 1;
DOMString sdpFmtpLine;
};
My assumption is that RTX (or RED or FEC, for that matter) are included in codecs[], and therefore that fmtp parameters such as "apt" and "rtxtime" will be included within sdpFmtpLine. It may be useful to make that statement explicit.
The text was updated successfully, but these errors were encountered: