Re: [Wish] New draft version draft-murillo-whip-01

Sergio Garcia Murillo <sergio.garcia.murillo@gmail.com> Fri, 28 May 2021 09:31 UTC

Return-Path: <sergio.garcia.murillo@gmail.com>
X-Original-To: wish@ietfa.amsl.com
Delivered-To: wish@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id BC9973A2209 for <wish@ietfa.amsl.com>; Fri, 28 May 2021 02:31:53 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.497
X-Spam-Level:
X-Spam-Status: No, score=-1.497 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001, URIBL_SBL=0.5, URIBL_SBL_A=0.1] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.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 1I7NObIV1_EK for <wish@ietfa.amsl.com>; Fri, 28 May 2021 02:31:48 -0700 (PDT)
Received: from mail-wr1-x42c.google.com (mail-wr1-x42c.google.com [IPv6:2a00:1450:4864:20::42c]) (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 7679D3A220B for <wish@ietf.org>; Fri, 28 May 2021 02:31:48 -0700 (PDT)
Received: by mail-wr1-x42c.google.com with SMTP id x8so2587505wrq.9 for <wish@ietf.org>; Fri, 28 May 2021 02:31:48 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=cSojm7OpzjPuYHMGknQYhMRUONd9YOll+AhAE7PeJJk=; b=VmRq5tegMDg3n1axaxg30mJNCPpQ9LjJYtUzShBoLBg4uhtwYQywo+kzHopSo2umvO kFB4Ge7p0+wYGqk0+H72OLPOZrKei72fgTQqumjt/6qVYgI1+38W7gr4WP8L8xorPoNo cH/6UolOuhvKr/9nHob5v87dhiotj87e0pLo8v+/Vo9KELes/iIIrGHM5LqE+qvpf70x zoKEz3GKFCO7eCAjkm2PV3flVqhNDPg79rtRTpH0X0ya0sCbhctrLQYoZ7XKY6sVNt2t KgC0TwtpnxJZ4+XUORs8v6TflkKZr5RFzmJ1h7aSNguD/xIhFqxGs6nSNl3+REELEmoj Jz1Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=cSojm7OpzjPuYHMGknQYhMRUONd9YOll+AhAE7PeJJk=; b=KPGQ/E2MzJihFpHt/uf0mHKmodVhUF6rJOsZfBzaacl0pJxcoH0AR3hasA/tSiDK4O Y2pRH3jYRqKeJTMUHbaentOILrbNt3K4gL79PNreSGSQUNnscXnCLu/ap0q8V2PVrnK5 zzv9qWlbIAMQyidIZFiZH4I/Z/258PnKCf2nRV3IHhEmg0ec4tTo0BBLKNzbho0icZ5J nJbaOYKk7Mxi4OfxsvHSWSdmUVabP1vfCe4D6kQgfhwA9qrqziMBD/7lDUoTI9CWuMeE vDAgMhSjRE6iYJd9twJmptcNyV9TY/4KJrooA1tulpZIWy0WQbc1JU2xUAn/W/G7uEW2 fmAw==
X-Gm-Message-State: AOAM5314/7chxgnB97nwUYDWcYsYGIR+H3+xIMG2c/43xhLnobbxBdQ4 Y7xm93s70fWWVF7dKFtEbzfKhBoJGNcqvwKomx0=
X-Google-Smtp-Source: ABdhPJzS+fRb3ZsOFWpmR003eEaYGDVnBzk2+dA0Mg+3++kiu3YAORO+jUbyL3BCqSveBOKNtK/YlKseV8ckBuPU+h8=
X-Received: by 2002:adf:dd51:: with SMTP id u17mr7875488wrm.87.1622194301582; Fri, 28 May 2021 02:31:41 -0700 (PDT)
MIME-Version: 1.0
References: <CA+ag07aArqZfdNEDLvm-T1+RN7Xf8PzU0yLoVXdjJbyAHCTZ-Q@mail.gmail.com> <e68725e0-aebe-a5c6-b5da-1b763a98560b@nostrum.com>
In-Reply-To: <e68725e0-aebe-a5c6-b5da-1b763a98560b@nostrum.com>
From: Sergio Garcia Murillo <sergio.garcia.murillo@gmail.com>
Date: Fri, 28 May 2021 11:31:30 +0200
Message-ID: <CA+ag07aj9a9XS=hdBVrRY1c3eeTmuEjGPDN6y30meFWUN4ZC-Q@mail.gmail.com>
To: Adam Roach <adam@nostrum.com>
Cc: wish@ietf.org
Content-Type: multipart/alternative; boundary="0000000000001a439405c3608bb6"
Archived-At: <https://mailarchive.ietf.org/arch/msg/wish/2YuGCyL2-dPslI0ND9YH41_IT4s>
Subject: Re: [Wish] New draft version draft-murillo-whip-01
X-BeenThere: wish@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: WebRTC Ingest Signaling over HTTPS <wish.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/wish>, <mailto:wish-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/wish/>
List-Post: <mailto:wish@ietf.org>
List-Help: <mailto:wish-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/wish>, <mailto:wish-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 28 May 2021 09:31:54 -0000

Hi Adam, welcome back!

Answers inline below:

El jue, 27 may 2021 a las 23:37, Adam Roach (<adam@nostrum.com>) escribió:

> ----
>
> Item 1: SVC and Simulcast. There are basically three questions here: (1)
> does the protocol need to support SVC and simulcast; and (2) are clients
> required to support SVC and simulcast, and (3) are servers required to
> support SC and simulcast.
>
> My suggestion for a path forward is:
>
> - Yes, the protocol needs to support these features, and will
> informatively cite RFC 8853 and RFC 6190 as the means for doing so.
>
> - No, clients are not required to support these mechanisms, and will use
> the procedures in RFC 8853 §5.3 and RFC 6190 §7.2.2 to negotiate whether
> they will do so.
>
> - No, servers are not required to support these mechanisms, and will use
> the same procedures as clients to negotiate their support.
>
My intention was that the protocol must support the negotiation of both svc
and simulcast, and both clients and publishers may support them, so I agree
with your suggestion. Opened an issue for clarifying it:

https://github.com/murillo128/webrtc-http-ingest-protocol/issues/9


> ----
>
> Item 2: Signaling within a session
>
> The new proposal in the document sends the initial offer in a POST, and
> the server replies with a 201 that contains an answer in the body, and
> contains a link corresponding to the created session in a "Location" header
> field. I've poked around and convinced myself that this is a perfectly good
> use of 201, and that it gets the O/A exchange completed in a single
> transaction, and so I support the approach.
>
> ----
>
> Item 3: ICE Trickle & Restart
>
> The new proposal in the document specifies the use of PATCH with
> application/sdpfrag for both trickle and restart.
>
> I really like the ability for the client to initiate restart, BTW, as it
> allows for transition between, e.g., mobile networks and WiFi for mobile
> clients, so this is a very important addition for me.
>
> This proposed mechanism looks perfectly fine to me, although it comes with
> the caveat that this approach only allows the client to trickle candidates,
> and only allows the client to request an ICE restart.
>
> For the trickle case, I think this is okay: in the vast majority of the
> cases, the server will not need to gather candidates and will simply be
> using host candidates. Even in the unlikely case that the server needs to
> gather candidates, this approach at least allows client and server
> collection to take place in parallel.
>
> For the restart case, this requires the client to be completely
> responsible for detecting and repairing failed ICE connections. Since there
> is no media flowing from the server to the client, this means that the
> client will need to wait some multiple of the RTCP transmission interval
> before it can determine that the connection is no longer working -- in
> practice, this means it will take on the order of 5 to 20 seconds to
> perform such detection and trigger a restart. This opens up a number of
> options:
>
> (a) Live with this situation
> (b) Specify something at the media level, such as a faster cadence for
> RTCP RR packet transmission from the network to the client so detection can
> take place faster
> (c) Introduce a two-way channel for server-to-client communications
>
> I gather that (c) remains unpopular due to its complexity. I'm okay with
> both (a) and (b), with a slight preference for something along the lines of
> (b) -- largely because users will consider the system to be completely
> failed long before client detection if we go with (a).
>


I am fine with recommending having  RTCP SR/RR reports sent more often, but
I don't think it is something we can mandate. Also, the client can use the
STUN consent fresnesh to detect the network interruption. However, reducing
the timeouts to be able to react faster will likely cause a lot of false
positives (even if we do c), so I think we should not do it and for being
able to detect network changes, like wifi to 4g, it is best that the
clients rely on the OS provided APIs rather than on any media timeout:

https://developer.android.com/training/monitoring-device-state/connectivity-status-type
https://wicg.github.io/netinfo/
https://developer.apple.com/library/archive/samplecode/Reachability/Introduction/Intro.html

----
>
> Item 4: Session Termination
>
> The current draft supports this through the use of a DELETE message sent
> to the session endpoint. This approach seems quite sensible, and it allows
> the signaling layer to perform swift resource cleanup in the sunny-day case.
>
> As with the ICE signaling above, this approach means that servers cannot
> initiate session termination on the signaling layer. I would propose that
> we add explicit text that specifies that network-initiated teardown can be
> performed by the network sending RTCP BYE packet(s) to the client. The
> client would be responsible for then initiating a DELETE operation on the
> signaling layer (which gives the network confirmation that the client is
> aware of the session termination, and has had the opportunity to notify the
> user).
>

I am fine with the RTCP BYE approach, the draft also includes using the
revocation of consent as per RFC7675

The media server may terminate the session by using the Immediate
Revocation of Consent as defined in {{!RFC7675}} section 5.2.


>
> ----
>
> Item 5: Heartbeating
>
> This proposal does not include any means of signaling-level detection of
> client-side session failure (e.g., the client loses a network connection or
> crashes). Based on previous conversations about the intention of media
> channels potentially surviving a signaling-level failure, I gather that
> this is considered a feature rather than an omission.
>
> After some internal discussion, I'm okay with this, even if it isn't my
> preferred approach. However, if the idea here is that media can survive
> independently of session state, then I'd like to also see a (required)
> client-to-network RTCP BYE packet sent whenever a session is terminated. I
> propose that this would happen in addition to the DELETE operation, not
> instead of it.
>

I like the idea.


> ----
>
> Item 6: Extensibility
>
> This proposal does not have any defined extension points. The operations
> performed on the session resource are mapped onto HTTP methods, and the
> currently proposed methods have a good semantic match to the operations
> that they correspond to. What I would propose is:
>
> (1) The base WHIP document does not address extensibility except for a
> statement that GET operations on the created resource URL (the one that we
> get in the "Location" header field) are reserved for future extensibility
> (this means that unextended servers will need to return a 405 response to
> GET on the resource);
>
> (2) Separate from the specification of the base WHIP document, we create a
> new document that discusses how to use GET to bootstrap protocol
> extensions. I have ideas about how to do this, but would like to make
> progress on the core protocol before we start those discussions.
>

I am not sure if using GET on the resource URI to return something
different than the SDP representation is covered under the HTTP best
practices, we should double check that.

For extensibility I was thinking that each extension we could introduce a
Link header with the extension rel type and the uri for the HTTP resource
of the extension on the 201 created, similar to what web push is doing:

https://datatracker.ietf.org/doc/html/rfc8030#section-9.2

So for example, taking a potential extension of server to client
communication using server sent events as specified in
https://html.spec.whatwg.org/multipage/server-sent-events.html#server-sent-events

The url for connecting to the server side event resource for the published
stream will be returned in the initial HTTP "201 Created" response with a
"Link" header an a "rel" attribute of
 "urn:ietf:params:whip:server-side-events",  the http 201 response to the
creation POST would look like

HTTP/1.1 201 Created
Content-Type: application/sdp
Location: https://watever.com/publications/213786HF
Link: <https://watever.com/publications/213786HF/sse>;rel="urn:ietf:params:whip:server-side-events
"

Other extensions could be added by registering new "rel" values on IANA.


Best regards
Sergio