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

Justin Uberti <juberti@google.com> Wed, 05 July 2017 02:48 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 BF35712EC69 for <rtcweb@ietfa.amsl.com>; Tue, 4 Jul 2017 19:48:09 -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 FfC1aZAJwA-U for <rtcweb@ietfa.amsl.com>; Tue, 4 Jul 2017 19:48:06 -0700 (PDT)
Received: from mail-io0-x235.google.com (mail-io0-x235.google.com [IPv6:2607:f8b0:4001:c06::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 C342412EBFD for <rtcweb@ietf.org>; Tue, 4 Jul 2017 19:48:05 -0700 (PDT)
Received: by mail-io0-x235.google.com with SMTP id h134so78961902iof.2 for <rtcweb@ietf.org>; Tue, 04 Jul 2017 19:48:05 -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=AoyvhqMTrpLQwL/UdSY3hwym8VFpEJv9srMbGCcJUw0=; b=QMhwtXUFsXRJcJ+EbBTogd/HjBOvtWhflvpJum2WUF2SZaepXQovJlo/nKNOuaZFXU oH89c161yLC+Df6Kh9jLZHzbdpcalwJTRVYfSIKcYdMwal6Q4T7yoYpFwmftHGbsO6VP sl78xRWJEoQgT+xSMiUHvDJWEl0+FQTLpsfEBPzHfUCXSWJh01p6rigD10N26wvABO/v 0SR8NL3lkM+zvcJBnq1G3R75vCzQfqHKzH6iAGwUmPy9iNEYVEDGgA9qnEUtNnVDVbzZ +hLA9XPW16Xp1vtrL9tBLPhl/fwn3KeyEC27wAf0k1dJWjNrkhMeKc9LDz7O31nsVubk LckA==
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=AoyvhqMTrpLQwL/UdSY3hwym8VFpEJv9srMbGCcJUw0=; b=StscJmaSapgd3c51EF9h6csPuxBzU8jN8rxZmhCEujvI4MVwWq/cBHJOqMcE5vZcEG 82Vk5n4tojUeaJsT40g25zEOKCJL7NUzdqe4aitnFtj62NqE1oFUXHzoY5i8A9kQy9zB p/KTKCsxUZE5q+oBr6JEEi4FZnYxGB0H9IYnQYg2t46VshZL/mCTMjlCA8TvNwarR+Ou z3LQp+QrqQ10PGOZ69c/VtifgUNT9yJt/pPBDQvgVaNtOx4Rxcn/Ax//7aub813N7Bh0 oRDthoyQQpOx2+W4hKJ5DM0Ne/4OmKjYyN7Hkt2YBD4TTkIgKvvqyoaE7bFwIp4wYyVQ cf6A==
X-Gm-Message-State: AKS2vOy+tUI9wlBZwQd+76bzIlqSCUwYkXytVe51MGsEW34Z9ycib0Rj 89r9qgaeG/RUtSrSfJIHxA3+kFWy75grouEFnw==
X-Received: by 10.107.184.8 with SMTP id i8mr41509742iof.153.1499222884841; Tue, 04 Jul 2017 19:48:04 -0700 (PDT)
MIME-Version: 1.0
Received: by 10.107.18.149 with HTTP; Tue, 4 Jul 2017 19:47:44 -0700 (PDT)
In-Reply-To: <CAOJ7v-299a_Rq2YTke2viyPDWrQYCbf2XUH8HvNxW2tisXfdRQ@mail.gmail.com>
References: <D50DC080.6C653%mzanaty@cisco.com> <CAOJ7v-1wm-gRgsP+sA=W1GvRu6KrHYx=jjNQ+U=-T6w3x4yYgA@mail.gmail.com> <D51A7BA3.6C9D5%mzanaty@cisco.com> <CAOJ7v-299a_Rq2YTke2viyPDWrQYCbf2XUH8HvNxW2tisXfdRQ@mail.gmail.com>
From: Justin Uberti <juberti@google.com>
Date: Tue, 04 Jul 2017 19:47:44 -0700
Message-ID: <CAOJ7v-1A9odf32QeXyj97wLekfQx9T0GyA95xD7HvQVDucPXyg@mail.gmail.com>
To: "Mo Zanaty (mzanaty)" <mzanaty@cisco.com>
Cc: "rtcweb@ietf.org" <rtcweb@ietf.org>
Content-Type: multipart/alternative; boundary="94eb2c07712a7e6e8805538907fa"
Archived-At: <https://mailarchive.ietf.org/arch/msg/rtcweb/xTUbLG3-GPLk6XJBCdHxr6B5sr4>
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: Wed, 05 Jul 2017 02:48:10 -0000

These issues have all been resolved in the latest version of the draft,
https://tools.ietf.org/html/draft-ietf-rtcweb-fec-06.

On Sat, Apr 22, 2017 at 12:39 PM, Justin Uberti <juberti@google.com> wrote:

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