Skip to content
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

Sender preference for flexfec over RTX #702

Closed
wants to merge 7 commits into from
Closed

Conversation

aboba
Copy link
Contributor

@aboba aboba commented May 18, 2017

Fix for Issue #694

@ibc
Copy link
Contributor

ibc commented Jun 20, 2017

Summarizing the text in the PR:

If when send(parameters) is called, "flexfec" is specified in parameters.encodings[j].fec.mechanism and parameters.encodings[j].rtx is set or "rtx" is included in parameters.codecs[k].name, then "flexfec" is used for retransmission of encoding j.

IMHO the preference of "or" over the former "and" is a bit unclear.

Said that, I don't fully understand how this works. If FLEXFEC is in use, which should be the value of the ssrc fields in both encoding.rtx and encoding.fec? The same value?

@aboba
Copy link
Contributor Author

aboba commented Jun 21, 2017

@ibc For "flexfec" the value in fec.mechanism would be "flexfec" and I'd suggest that fec.ssrc should used for all packets, whether they are doing forward error correction or retransmission. rtx.ssrc would therefore only apply to the "rtx" codec. I think this permits a receiver to enable both "flexfec" and "rtx" with or without explicit SSRCs.

@ibc
Copy link
Contributor

ibc commented Jun 22, 2017

For "flexfec" the value in fec.mechanism would be "flexfec" and I'd suggest that fec.ssrc should used for all packets, whether they are doing forward error correction or retransmission.

Sure, that's how FLEXFEC works.

rtx.ssrc would therefore only apply to the "rtx" codec. I think this permits a receiver to enable both "flexfec" and "rtx" with or without explicit SSRCs.

Complex, but it may work. This is, both FLEXFEC and RTX packets (with same or different SSRCs) may be used at the same time.

Today fec.ssrc and rtx.ssrc are typically the same but I think they could conceivably be different, no?

I don't fully follow you here. Today FEC is used by encapsulating UPLFEC into RED packets, and using RTX in a different SSRC.

Anyhow, the text says:

If when send(parameters) is called, "flexfec" is specified in parameters.encodings[j].fec.mechanism and parameters.encodings[j].rtx is set or "rtx" is included in parameters.codecs[k].name, then "flexfec" is used for retransmission of encoding j.

By reading it it seems that, in order to use FLEXFEC retransmission, encoding.rtx must be set. But at the same time you say:

rtx.ssrc would therefore only apply to the "rtx" codec.

So I'm confused. How to signal that I want to use FLEXFEC for (also) retransmission and, at the same time, I don't want to use RTX?

@vr000m
Copy link

vr000m commented Jun 22, 2017

rtx.ssrc would therefore only apply to the "rtx" codec.

So I'm confused. How to signal that I want to use FLEXFEC for (also) retransmission and, at the same time, I don't want to use RTX?

I dont think the endpoints need an explicit signaling/indication for enabling RTX in FLEXFEC, the sender would send FLEXFEC packets with a single protected packet.

@ibc
Copy link
Contributor

ibc commented Jun 22, 2017

I dont think the endpoints need an explicit signaling/indication for enabling RETX in FLEXFEC, the sender would send FLEXFEC packets with a single protected packet.

Agreed, but then the text above does not seem correct IMHO:

If when send(parameters) is called, "flexfec" is specified in parameters.encodings[j].fec.mechanism and parameters.encodings[j].rtx is set or "rtx" is included in parameters.codecs[k].name, then "flexfec" is used for retransmission of encoding j.

By reading that it seems that, in order to use FLEXFEC (also) for retransmission, encoding.rtx must be set or "rtx" must be included in codecs. But the fact is that we don't need encoding.rtx to be set neither "rtx" included in codecs, am I wrong?

@aboba
Copy link
Contributor Author

aboba commented Jun 23, 2017

@ibc There is no setting to turn off retransmission support in "flexfec". That seems to suggest that retransmission support and use is required in "flexec". So setting fec.ssrc and fec.mechanism is enough. All we're trying to do here is clarify what happens if "rtx" is added to codecs[] and encodings[].rtx is set in addition, to make it clear that "rtx" settings are ignored.

@ibc
Copy link
Contributor

ibc commented Jun 24, 2017

All we're trying to do here is clarify what happens if "rtx" is added to codecs[] and encodings[].rtx is set in addition,

Fine then.

to make it clear that "rtx" settings are ignored.

But we still want to be able to receive RTX packets and process, right?

@aboba aboba added the 1.1 label Oct 9, 2017
@aboba
Copy link
Contributor Author

aboba commented Oct 12, 2017

On reflection, this is really an issue relating to legal values of encodings.fec and encodings.rtx. Closing.

@aboba aboba closed this Oct 12, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants