Re: [Wish] WHIP enhancements

Sergio Garcia Murillo <sergio.garcia.murillo@gmail.com> Wed, 24 February 2021 08:14 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 75FC43A1024 for <wish@ietfa.amsl.com>; Wed, 24 Feb 2021 00:14:42 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.097
X-Spam-Level:
X-Spam-Status: No, score=-2.097 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, SPF_HELO_NONE=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=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 oCGcNNbVwU7g for <wish@ietfa.amsl.com>; Wed, 24 Feb 2021 00:14:39 -0800 (PST)
Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) (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 7CCE83A100D for <wish@ietf.org>; Wed, 24 Feb 2021 00:14:39 -0800 (PST)
Received: by mail-wm1-x334.google.com with SMTP id w7so973385wmb.5 for <wish@ietf.org>; Wed, 24 Feb 2021 00:14:39 -0800 (PST)
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=dn+gklEOP9uUPh82ZK7wYTF+kl2YJXvQcsPT/gVnfVQ=; b=gtfKhPkwjLRiV/e2YRGMssNpRkONS0/D1LhBmVRiDbMNZTSAEF4zUmNS2jhxLYTXCo 3Sjz1WLHZep4Iq0cyYoeCgaI8dTSjBXsXsZjQ5zBZznLyMdbuQ+0mqqkU4bVS8I5J1LC LeSwD8AhjMBrPdqxpHrBfMIibbXPDK85GZDjwBWSlFlAe2m9GZtwxz8oO/kdbW8B08Ia fJYRiGycUXRkWYU1yN4U39ciGKQDbKTnOuAU1spUsAE0uCU1ff0UVrGnbt9CDL/jMljy 14UPXE73U11NN/AAu1I3cbBR51eD4sRRui5RAMkdiDCn5yWpk6UEQk2dewgf/Uh8cWE2 3B6w==
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=dn+gklEOP9uUPh82ZK7wYTF+kl2YJXvQcsPT/gVnfVQ=; b=aRoZzGRARl1B7JrxgsDp5xDpbjd5qghvtS+eXeQrF6h9+R5YNR5Gf+j9l2AWlxAx+3 hRkiQqylPEpInwFeQDKcFs28n+4EOlQ1YjYr9SzJuY/gHHhW79p83C2wijITCXUjPAb/ t0CsZHqobfnplnM06morqyxev/VSUJur8kphT3xT0qiUpu1GIhzrGBI6jtDg7+PBsoPM 3vC2Scz9kQVkgPeb279axpEsPJOMUmHaqd43dxIczC7OA2Z2xxdhB823PVJYvucu9sXq G4QLdnZ5mZdRe4pUdU7Zt11ktS9gpH08GKLVhG/Ftx9FUXM1UfOQFaTliausolwucBrP Hleg==
X-Gm-Message-State: AOAM531frts1fxV/pPou+jn7c7LiSbH1dR84AaCdNYd4dOXQkB1Loliv m+nobSZ6nRevRSeZyAeBBnQcxK+OgUm/h0DRUdub+ST81nPNKg==
X-Google-Smtp-Source: ABdhPJx4+0A9YKnC9L258Dtf9zHb2v9llqYvME+2Ugu7YJtObKvkymSY+mcsOl0SUA/O4XFRtK1r9oYhFhMaastLwm0=
X-Received: by 2002:a05:600c:4f46:: with SMTP id m6mr2541429wmq.160.1614154477900; Wed, 24 Feb 2021 00:14:37 -0800 (PST)
MIME-Version: 1.0
References: <92fd1a3f-06a3-3197-dde0-18270b62410c@nostrum.com>
In-Reply-To: <92fd1a3f-06a3-3197-dde0-18270b62410c@nostrum.com>
From: Sergio Garcia Murillo <sergio.garcia.murillo@gmail.com>
Date: Wed, 24 Feb 2021 09:14:27 +0100
Message-ID: <CA+ag07Y0pZJ5YHtin1Y6X0bOGkYqGOanCaNiM42VFYwXYB6iSQ@mail.gmail.com>
To: Adam Roach <adam@nostrum.com>
Cc: "wish@ietf.org" <wish@ietf.org>
Content-Type: multipart/alternative; boundary="00000000000044979405bc10a00d"
Archived-At: <https://mailarchive.ietf.org/arch/msg/wish/vegIPaS1eji1s9Jj1PK2BWxziI0>
Subject: Re: [Wish] WHIP enhancements
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: Wed, 24 Feb 2021 08:14:42 -0000

Hi Adam,

The need for a way to explicitly terminate the session was already by
several people, so I think we should definitely include it.

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

However, I would be against optionalities, as it makes the testing and
interoperability much more difficult.

In that regard, I am against including the trickle option as the server
should be accessible to the publisher, and the only case where it could
make sense is if the WHIP server is on a public server but the media
servers are behind NATed network without port forwarding.

Also, I am not sure what would be the benefits of the ice restart
(especially if it is optional) compared to just restarting the whole
publishing session again, which is something that the service has to
implementa anyway.

On a last note, I would prefer to make the process less json-like and more
http-like, reusing HTTP headers and methods as much as possible.

My initial thoughts about how to implement it were that the POST request to
start the publication returned a 201 created response with a Location
header indicating the URI to the entity representing the publication. And
then allow the following methods on the request

- GET for retrieving information about the state of the publication (TBD).
- OPTIONS for keep alive
- UPDATE for updating the session (we would need to specify what would we
actually allow to be updated)
- DELETE for terminating the session

Best regards
Sergio


El mié, 24 feb 2021 a las 3:09, Adam Roach (<adam@nostrum.com>) escribió:

> Hey, folks! Now that we have an approved working group, it’s time to
> get this party started. IETF 110 is just around the corner, and it would
> be great to have things to talk about during our meeting slot.
>
> I've gone over the current proposal and compared it against some of
> the things that were brought up at the DISPATCH discussion, as well
> as some of the things that I know our own network either needs or
> will need in the near future. I'm going to lay this out by first
> describing requirements, and then sketch out a proposal that
> attempts to address these requirements.
>
> -----------------------------------------------------------------
>
> Requirements
>
> One of the things that came up in DISPATCH, which is definitely
> something that we need, is session management -- or at least session
> termination. This means that we’ll need some way to correlate a
> session termination request with a session origination request.
> Beyond this, we've found the ability to have signaling-level
> heartbeats to be important for service separation, as well as a
> small handful of other operations, like ICE restarts and trickling
> of ICE candidates.
>
> Although not strictly necessary, there is a strong desire to be able
> to perform *some* of these operations (e.g., session termination,
> ICE restart) from the ingest node towards the broadcasting tool.
>
> The current document leaves open whether an ingest connection
> supports different ordinalities of audio and video streams; and, if
> they do, how they might be distinguished. We should be clear about
> what is expected in an SDP offer regarding the number of each, and
> perhaps add some signaling so that the tool and ingest node can
> negotiate or signal what combinations of media are supported.
>
> Finally, for future extensibility and feature experimentation, there
> is a desire to be able to expand the protocol with new operations
> and new protocol fields in a backwards-compatible way.
>
> Those are the requirements I'm aware of that we’ll want to consider
> in updating the current protocol proposal. I'm going to sketch out
> how we might achieve them below. One focus of this proposal is
> ensuring that the implementation complexity on the client can be
> kept as low as possible, so as to encourage the widest range of
> broadcasting tools possible to adopt this solution.
>
> -----------------------------------------------------------------
>
> Implementation Sketch
>
> First, we would update the POST/200 transaction so that it carries
> more information than a simple offer/answer. This could be a MIME
> multipart body, but that seems probably more trouble than
> representing the SDP alongside the other information we want to
> send.
>
> So for example, one way of doing this is having the POST operation
> contain a JSON object indicating which server-oriented operations it
> supports (if any), along with the SDP offer; something like:
>
> POST /ingest/username HTTP/1.1
> Content-Type: application/json
> ...
>
> {
>    'offer': 'v=0\r\n0=- 20150 0 IN IP6...',
>    'operations': ['update', 'end', 'ice-restart']
> }
>
> The POST response from the server then contains an answer, along
> with a list of operations that it can accept, plus the endpoints
> that the client would use to perform those operations. Something
> like:
>
> HTTP/1.1 200 OK
> Content-Type: application/json
> ...
>
>
> {
>    'answer': 'v=0\r\n0=- 20150 0 IN IP6...',
>    'heartbeat': 'https://example.com/stage/adam/ea48c65c/heartbeat',
>    'update': 'https://example.com/stage/adam/ea48c65c/update',
>    'end': 'https://example.com/stage/adam/ea48c65c/terminate',
>    'trickle': 'https://mg.example.com/stage/adam/ea48c65c/ice-candidate',
>    'ice-restart': 'https://mg.example.com/stage/adam/ea48c65c/ice-restart'
> }
>
> You'll notice that the endpoints are (or at least can be) customized
> for the session by including a unique identifier (ea48c65c in the
> example above). The broadcast client doesn't have to worry about
> this; all it needs to do is use the endpoints that it gets in
> response to a session creation post to enact the corresponding
> operations.
>
> We can have a discussion about which of these operations
> implementations are expected to support, and which are supplemental,
> but I think we definitely need at least heartbeat and session
> termination (which I call "end" above).
>
> For each of these operations, we would define how the client
> interacts with them to enact the operation, but the general pattern
> would be as above: a POST message sent to the corresponding
> endpoint, containing a JSON body with operation parameters; and the
> HTTP response will contain a JSON body with response parameters.
>
> So that gets us an extensible list of operations, and allows the
> ingest node to embed a session identifier into the endpoints as
> necessary.
>
> On top of this we can add something kind of clever to the
> "heartbeat" operation that allows two-way communication without
> requiring broadcast tools to do anything (relatively) complex like
> implementing web sockets, by sending such operations in the response
> to heartbeats.  One approach would be to limit egress nodes to
> sending commands towards the client once per heartbeat period (e.g.,
> if the clients sent a heartbeat once every 15 seconds, then the
> server might have to wait as long as 15 seconds to send a command).
> Another approach would be to have the server wait for the heartbeat
> interval before responding, thereby leaving the heartbeat
> transaction open for the entire time. If we decided to go with this
> latter behavior, the server could send a command to the client at
> any time by responding to the pending heartbeat operation.
>
> Finally, I think the extensibility story here naturally falls out of
> the techniques described above: new transactions can be defined by
> adding them to the initial message exchange; and new parameter can
> be added to existing operations by adding them to the JSON objects
> that are part of those operation's POST/200 transactions.
>
> -----------------------------------------------------------------
>
> I'd like to close on the rough shape of these issues, and then get
> a draft pulled together in time for the WISH meeting at IETF 110.
> Input on how we might want to do things differently than I propose
> above would be very welcome.  Thanks!
>
> /a
>
> --
> Wish mailing list
> Wish@ietf.org
> https://www.ietf.org/mailman/listinfo/wish
>