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

Justin Uberti <juberti@google.com> Fri, 14 April 2017 22:45 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 1DC2B129B05 for <rtcweb@ietfa.amsl.com>; Fri, 14 Apr 2017 15:45:58 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.7
X-Spam-Level:
X-Spam-Status: No, score=-2.7 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, URIBL_BLOCKED=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 oVbOcETB8yML for <rtcweb@ietfa.amsl.com>; Fri, 14 Apr 2017 15:45:53 -0700 (PDT)
Received: from mail-it0-x235.google.com (mail-it0-x235.google.com [IPv6:2607:f8b0:4001:c0b::235]) (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 9686C129A9D for <rtcweb@ietf.org>; Fri, 14 Apr 2017 15:45:53 -0700 (PDT)
Received: by mail-it0-x235.google.com with SMTP id 70so1887411ita.0 for <rtcweb@ietf.org>; Fri, 14 Apr 2017 15:45:53 -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=8qUhDpx/2c6wCXBJawnCM5Y7vCu60Wbnd8QJGxM+xR8=; b=XdhNh37aEGsrxzxMvZx0soFziQJRvX0dYBkChIl+p0Fr5wcAw04tPo1TnhGL70Jfi2 Sk/0whSZBDpDLLjrZJ7fRQusH+5SXrQGyiFb12fikE0l61jj/xEubFyeh8Bw++NiC6Qj S3qchBiE+UT2Z/jHOieX2i6tI9TlHggtEjGlFHjG71fHDUsXDgsMkN/0/Z2SutURiyjh aJhX+3J5HsC5oFGX9I3L85x62il+WQq/dfUHXEgsJdXCmWnfzVyQLW0kxaVpzvCBbtRE JQr/v28OZO8Uod07huboDFP2qfWG+lY06/37dqTC/s6as9/S/38fXArsVSTMNlAs4ViY XzWw==
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=8qUhDpx/2c6wCXBJawnCM5Y7vCu60Wbnd8QJGxM+xR8=; b=XHDz0yVNx4i5kSf8GY+XeA81jgVi3dgZN8OJB1cBiFTI9fr/S93YNR6F4zat6o/qx2 m701Ucah8m4woelmUgGanoECRhqtnXaoy/DS54RbvxCW45xBXSl+bSfi2k/vfSwJxD9O 81STfxBZdCU/NtvJMg4fK2tgFHpJLmjmvuyoVsZBpOeKPYTJMtXNsjm1ai0v8AyoOwI+ zJbF4fDGHneAmzae9K0Hn+qGeMucDx0yoYzi11ALhZkhYFTOktDzCYiQol5QfKOf4ALb kW0CowKE0CjDOtZypyN2+uIBJK0BL3wu+74LijOEjEopTzFNI4qIEkDy8qnJsFGSNFRg sPEA==
X-Gm-Message-State: AN3rC/4ozR58MY078uIyj3EpTdQa8Dj1dWOoL53G5kqN/GCCi7KnvBdP mbhkgeoffhk77gRyTDGUU0SfScGiS0VL
X-Received: by 10.36.173.91 with SMTP id a27mr941179itj.60.1492209952734; Fri, 14 Apr 2017 15:45:52 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.107.138.143 with HTTP; Fri, 14 Apr 2017 15:45:32 -0700 (PDT)
In-Reply-To: <D50DC080.6C653%mzanaty@cisco.com>
References: <D50DC080.6C653%mzanaty@cisco.com>
From: Justin Uberti <juberti@google.com>
Date: Fri, 14 Apr 2017 15:45:32 -0700
Message-ID: <CAOJ7v-1wm-gRgsP+sA=W1GvRu6KrHYx=jjNQ+U=-T6w3x4yYgA@mail.gmail.com>
To: "Mo Zanaty (mzanaty)" <mzanaty@cisco.com>
Cc: "rtcweb@ietf.org" <rtcweb@ietf.org>
Content-Type: multipart/alternative; boundary="94eb2c1fd0b42a40d0054d2834fd"
Archived-At: <https://mailarchive.ietf.org/arch/msg/rtcweb/2TD8zciJfei6iceS0uQXoxZmFb4>
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: Fri, 14 Apr 2017 22:45:58 -0000

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.


> 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.


> 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?

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.


> 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