Re: [rtcweb] Review of draft-ietf-rtcweb-fec

Justin Uberti <juberti@google.com> Sat, 22 April 2017 19:40 UTC

Return-Path: <juberti@google.com>
X-Original-To: rtcweb@ietfa.amsl.com
Delivered-To: rtcweb@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id BDAC012954C for <rtcweb@ietfa.amsl.com>; Sat, 22 Apr 2017 12:40:21 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.701
X-Spam-Level:
X-Spam-Status: No, score=-2.701 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=google.com
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id nYdyTmjIMiEN for <rtcweb@ietfa.amsl.com>; Sat, 22 Apr 2017 12:40:18 -0700 (PDT)
Received: from mail-it0-x231.google.com (mail-it0-x231.google.com [IPv6:2607:f8b0:4001:c0b::231]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id D0584126C25 for <rtcweb@ietf.org>; Sat, 22 Apr 2017 12:40:17 -0700 (PDT)
Received: by mail-it0-x231.google.com with SMTP id 70so19590090ita.0 for <rtcweb@ietf.org>; Sat, 22 Apr 2017 12:40:17 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=vqyU0VCBmFCHNqWaNTWrzs2OfUS5/+tU1LcF1Pg/bKo=; b=NVOQY5EllrV/hDdxj29jOkH9WNakK5VyvPaK8WRUDSTcVbK+S4818JBJI9JUz6Fp8T fKi5/MyWs9bBl0z6ZdOM1SY6iMaiylyh32MoWR2r8kxCvNqE4nEj5MHxt9uD97FgKKcq yqAItrqJDawN/WNGmp+8Hqkk9cJr75e0DM3PXqpoOG7x6FUuQmmJOB57P/isVlo4FNhV 4L7NQxYa+k1PeGB82O9sOgSL6cy4NpA9KZJwFqYvIDOHkAnvIOhQge+OFTITjY4CFVje vJwtsZwBVFtc5GMl2+zRqw1JjbjBXnqwIKd2BnpUXQK2e5FXoXkWZTwPxrZce1B+APQH 92nQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=vqyU0VCBmFCHNqWaNTWrzs2OfUS5/+tU1LcF1Pg/bKo=; b=gppy+2dT85UeGjLZzE0vv6FyyB+BxDhTJQi1lhOJlnqrQ0ktmRJF2yJ9rpZJIlBngK qVZsJ6RRdFiLhqvqzGi0Ki7FfBHyyN1jRqPTYllNPg/s+xwSYhpwDyr68J8Fbw/2AWvx Kd8cpcV+3/44aK7kYZ8TxTMcszyGa8bhGNgdviemTEz98JRLFL+fdKK6D2Lw9EzFrrz/ L0eXLpD+WKPlkTndHmv/L9yzWMQ5aLMpDw9Y36x2gN7hTbCCEnXAX0PyoKBi1iswtKvO X5IC6//nGJShCfdBQLbq1vswLMkZMmBMWsHBuTM64AkR5VTfQpzaXJqGmjHdN9y94cIm FcGw==
X-Gm-Message-State: AN3rC/77ySRcY556SWgVOzMb9x8ZiT7bNsJSFs6p5sl9mMmkT1okJHGn LI5BFZihlRT9zPtMIDf34f2Kir+ytjvr
X-Received: by 10.36.15.203 with SMTP id 194mr5703345ito.60.1492890016946; Sat, 22 Apr 2017 12:40:16 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.107.138.143 with HTTP; Sat, 22 Apr 2017 12:39:56 -0700 (PDT)
In-Reply-To: <D51A7BA3.6C9D5%mzanaty@cisco.com>
References: <D50DC080.6C653%mzanaty@cisco.com> <CAOJ7v-1wm-gRgsP+sA=W1GvRu6KrHYx=jjNQ+U=-T6w3x4yYgA@mail.gmail.com> <D51A7BA3.6C9D5%mzanaty@cisco.com>
From: Justin Uberti <juberti@google.com>
Date: Sat, 22 Apr 2017 12:39:56 -0700
Message-ID: <CAOJ7v-299a_Rq2YTke2viyPDWrQYCbf2XUH8HvNxW2tisXfdRQ@mail.gmail.com>
To: "Mo Zanaty (mzanaty)" <mzanaty@cisco.com>
Cc: "rtcweb@ietf.org" <rtcweb@ietf.org>
Content-Type: multipart/alternative; boundary="001a11449e0826da0e054dc68bc8"
Archived-At: <https://mailarchive.ietf.org/arch/msg/rtcweb/SlsXiFV3DAlYYSC4ZgmU9s2BWJM>
Subject: Re: [rtcweb] Review of draft-ietf-rtcweb-fec
X-BeenThere: rtcweb@ietf.org
X-Mailman-Version: 2.1.22
Precedence: list
List-Id: Real-Time Communication in WEB-browsers working group list <rtcweb.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/rtcweb>, <mailto:rtcweb-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/rtcweb/>
List-Post: <mailto:rtcweb@ietf.org>
List-Help: <mailto:rtcweb-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/rtcweb>, <mailto:rtcweb-request@ietf.org?subject=subscribe>
X-List-Received-Date: Sat, 22 Apr 2017 19:40:22 -0000

On Mon, Apr 17, 2017 at 12:07 PM, Mo Zanaty (mzanaty) <mzanaty@cisco.com>
wrote:

> Agreed on all responses, except some further clarifications inline, see
> Mo:.
>
> From: Justin Uberti <juberti@google.com>
> Date: Friday, April 14, 2017 at 6:45 PM
> To: mzanaty <mzanaty@cisco.com>
> Cc: "rtcweb@ietf.org" <rtcweb@ietf.org>
> Subject: Re: Review of draft-ietf-rtcweb-fec
>
> Thanks for this detailed review.
>
> On Fri, Apr 7, 2017 at 7:17 PM, Mo Zanaty (mzanaty) <mzanaty@cisco.com>
> wrote:
>
>> Here is my review of draft-ietf-rtcweb-fec-04.
>>
>> 4.1. Recommended Mechanism (for audio FEC), first paragraph says:
>>
>> *OLD:*
>> "When using the Opus codec, use of the built-in Opus FEC mechanism is
>> RECOMMENDED. This provides reasonable protection of the audio stream
>> against typical losses, with modest overhead. Note that as indicated
>> above the built-in Opus FEC only provides single-frame redundancy; if
>> multi-packet protection is needed, the built-in FEC *should be*
>> *combined with [RFC2198] redundancy to protect the N-2th, N-3rd, etc.*
>> *packets."*
>>
>> The last sentence about multi-packet protection should not be recommended
>> due to overhead. Packing multiple full-size Opus frames, each with their
>> own built-in prior-frame FEC, into RED packets is akin to packing multiple
>> PCMU frames into RED packets. The latter is discouraged 3 paragraphs later:
>>
>> "When using constant-bitrate codecs, e.g. PCMU, use of [RFC2198]
>> redundant encoding MAY be used, but note that this will result in a
>> potentially significant bitrate increase, and that suddenly
>> increasing bitrate to deal with losses from congestion may actually
>> make things worse."
>>
>> These same warnings would apply to multi-packet Opus RED. Therefore I
>> suggest rewording the first paragraph as follows.
>>
>> *NEW:*
>> "When using the Opus codec, use of the built-in Opus FEC mechanism is
>> RECOMMENDED. This provides reasonable protection of the audio stream
>> against typical losses, with modest overhead. Note that as indicated
>> above the built-in Opus FEC only provides single-frame redundancy; if
>> multi-packet protection is needed, the built-in FEC *MAY be*
>> *combined with [RFC2198] redundancy to protect prior packet pairs,*
>> *but note this will result in significant bitrate increase which may*
>> *aggravate congestion losses."*
>>
>
> This isn't quite as bad as full PCMU frames, because Opus frames will
> typically be smaller, but I agree it is inconsistent.
>
> https://github.com/juberti/draughts/issues/38
>
>
>>
>> 4.2. Negotiating Support, first sentence says:
>>
>> *OLD:*
>> *"Support for redundant encoding* MUST be indicated by offering "red"..."
>>
>> This may be misinterpreted as mandating that WebRTC endpoints MUST offer
>> "red", rather than merely indicating that if they choose to support
>> redundant encoding (which is only RECOMMENDED for VBR codecs without
>> internal FEC in the prior section), then it MUST be indicated by offering
>> "red". I suggest rewording this as:
>>
>> *NEW:*
>> *"If redundant encoding is supported, it* MUST be indicated by offering
>> "red"..."
>>
>> The intent here was that all clients should support receipt of 2198, even
> if they don't support sending a redundant encoding (which is only, as you
> say, RECOMMENDED). IOW, "red" would be a MTI format.
>
> Mo: MTI "red" only if you support VBR codecs without internal FEC (which
> are optional not MTI audio codecs), right? If so, I would explicitly
> indicate this via *"Support for redundant encoding of VBR codecs without
> internal FEC MUST.*.."
> Or do you mean MTI regardless of codecs, like even for Opus? That would
> surprise me, to make "red" MTI when it is not recommended for the MTI audio
> codecs, and no browser advertises "red" for audio.
>

This makes sense to me. As indicated above, there isn't enough rationale to
mandate "red" support.

However, I am thinking of making "red" support SHOULD strength, since at
present it's our best available tool for handling burst losses.

https://github.com/juberti/draughts/issues/39


>
>
>> Same comment for Opus in the following paragraph:
>>
>> *OLD:*
>> *"For Opus, a receiver MUST indicate that it is prepared to use*
>> *incoming FEC data with* the "useinbandfec=1" parameter..."
>>
>> *NEW:*
>> *"For Opus, a receiver that it is prepared to use incoming FEC data*
>> *MUST include* the "useinbandfec=1" parameter..."
>>
>
> Similarly here - for WebRTC, the intent was to mandate support for
> receiving and using Opus FEC.
>
> Mo: Ok, this one makes sense to be MTI.
>
>
>> 5.1. Recommended Mechanism (for video FEC) says:
>>
>> *OLD:*
>> "For video content, use of a separate FEC stream with the RTP payload
>> format described in [I-D.ietf-payload-flexible-fec-scheme] is
>> RECOMMENDED. The receiver can demultiplex the incoming FEC stream by
>> SSRC and correlate it with the primary stream *via the SSRC field*
>> *present in the FEC header."*
>>
>> Flex FEC moved the SSRC binding from the FEC header to the CSRC list.
>> Only the retransmission format still has the SSRC field in the FEC header.
>> Reword as:
>>
>> *NEW:*
>> "For video content, use of a separate FEC stream with the "flexfec" RTP
>> payload
>> format described in [I-D.ietf-payload-flexible-fec-scheme] is
>> RECOMMENDED. The receiver can demultiplex the incoming FEC stream by
>> SSRC and correlate it with the primary stream*(s) via the CSRC(s)*
>> *in the RTP header of the FEC repair packet, or via the SSRC field*
>> *in the FEC header for retransmissions."*
>>
>
> OK.  https://github.com/juberti/draughts/issues/40
>
>>
>> The next paragraph suggests multiple source streams is a problem.
>>
>> *OLD:*
>> "Support for protecting multiple primary streams with a single FEC
>> stream is complicated by WebRTC's 1-m-line-per-stream policy, which
>> does not allow for a m-line dedicated specifically to FEC."
>>
>> But Flex FEC already supports this with SSRC(s) of primary stream(s) as
>> CSRC(s) of the FEC stream, so *strike the above OLD paragraph.*
>>
>> It's still not clear how this should work. Which m= lines would carry FEC
> info for which other m= lines?
>
> Mo: Flex FEC can protect multiple primary streams as long as they are in
> the same RTP session (SSRC space), e.g. when bundled. There is no SDP
> association between source and repair streams for Flex FEC. The association
> is at the RTP level with SSRCs, so a Flex FEC packet can protect any RTP
> packet(s) in the same RTP session. In SDP, any bundled m= line(s) can
> declare the flexfec PT. JSEP requires all of them to declare it, which
> seems best.
>
> If we are going to support this, I think we need to detail in this
> document how it should work, and it may have downstream ramifications on
> JSEP.
>
> Mo: JSEP says the FEC PT must be included in all m= lines, which seems
> best/correct.
>

OK, this is a welcome development. I will update this section accordingly
to give an overview of how this should work, which will be a nontrivial
update.

https://github.com/juberti/draughts/issues/45

>
>
>> 8. Adaptive Use of FEC, first paragraph says:
>>
>> *OLD:*
>> "...methods like *RTX [RFC4588]*, which only transmits redundant data
>> when..."
>>
>> Flex FEC also supports retransmissions, so reword as:
>>
>> *NEW:*
>> "...methods like *RTX [RFC4588] or the "flexfec" retransmission format*,
>> which only transmits redundant data when..."
>>
>
>> Same comment in the next paragraph.
>>
>> *OLD:*
>> "Given this, WebRTC implementations SHOULD consider using *RTX*
>> instead..."
>>
>> *NEW:*
>> "Given this, WebRTC implementations SHOULD consider using *RTX or*
>> *the "flexfec" retransmission format* instead..."
>>
>>
> https://github.com/juberti/draughts/issues/41
>
>
>> 9. Security Considerations
>>
>> Add a final paragraph on the order of FEC and SRTP operations.
>>
>> *NEW:*
>> *"SRTP [RFC3711] defines the default order of FEC and SRTP as FEC
>> followed by SRTP at the sender, and SRTP followed by FEC at the receiver.
>> DTLS-SRTP [RFC5764] uses this same default order for all SRTP Protection
>> Profiles."*
>>
>
> https://github.com/juberti/draughts/issues/42
>
>>
>> Editorial:
>>
>> Abstract and Introduction should use WebRTC "endpoint" as defined in
>> -overview.
>> Abstract: "... FEC ... used by WebRTC *applications*" -> WebRTC
>> *endpoints*
>> Introduction: "... FEC ... for WebRTC *client implementations*" ->
>> WebRTC *endpoints*
>> Or you could be very generic and just say WebRTC implementations
>> everywhere.
>>
>
> I think WebRTC implementations is best, since these are guidelines for
> WebRTC implementors, not application implementors.
>
> https://github.com/juberti/draughts/issues/43
>