Re: [core] Fw: New Version Notification for draft-bhattacharyya-core-a-realist-00.txt

Abhijan Bhattacharyya <abhijan.bhattacharyya@tcs.com> Wed, 10 October 2018 09:55 UTC

Return-Path: <prvs=8145ec7a0=abhijan.bhattacharyya@tcs.com>
X-Original-To: core@ietfa.amsl.com
Delivered-To: core@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id DD66A130DE5 for <core@ietfa.amsl.com>; Wed, 10 Oct 2018 02:55:49 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2
X-Spam-Level:
X-Spam-Status: No, score=-2 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_NONE=-0.0001, SPF_PASS=-0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=tcs.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 9OrIxsk0FfZN for <core@ietfa.amsl.com>; Wed, 10 Oct 2018 02:55:45 -0700 (PDT)
Received: from indelg02.tcs.com (indelg02.tcs.com [203.200.109.58]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 01159130ECF for <core@ietf.org>; Wed, 10 Oct 2018 02:55:37 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tcs.com; i=@tcs.com; q=dns/txt; s=default2048; t=1539165340; x=1570701340; h=in-reply-to:references:to:cc:mime-version:subject: message-id:from:date; bh=/j66skxxfqfmFsl+mfwJrvXu4gq2x/8Ws/Zgdy0dacg=; b=cB5fu4Y4xMMatTkKV+pg/ioPJt2KjKZtReBO4GCpfJFnhuXj/B5yWw0a +yYNqllvhvr4C9apHNg+IaIWEZpQKdRGxzjQyhQqY+0sYSPkxGyetoW2h 9ZHch68IajrlsnSZnACtIwKZp+owwIT4//ET7zj+/yQ584w4/w+u5Y5i5 NTvw3+/eO8IW4iBoRutQQz7h9wGsNHprRMDYiSIw+xZFssspy1VLumndd ZE1V1vHarNELfVxE98fduT20uRqhDooddc+lGSpwnq58liZTGwsH1eVp3 jfhY1018hMQmBV00QUOSx8dZlrr4bu9HIMflPLgWaMJ1ARPaPohrD5L/w Q==;
IronPort-PHdr: 9a23:dUu5CBR6Xtp8164mX41SW8HVhtpsv+yvbD5Q0YIujvd0So/mwa6zYRGN2/xhgRfzUJnB7Loc0qyK6/+mATRIyK3CmUhKSIZLWR4BhJdetC0bK+nBN3fGKuX3ZTcxBsVIWQwt1Xi6NU9IBJS2PAWK8TW94jEIBxrwKxd+KPjrFY7OlcS30P2594HObwlSizexfbF/IA+qoQnNq8IbnZZsJqEtxxXTv3BGYf5WxWRmJVKSmxbz+MK994N9/ipTpvws6ddOXb31cKokQ7NYCi8mM30u683wqRbDVwqP6WACXWgQjxFFHhLK7BD+Xpf2ryv6qu9w0zSUMMHqUbw5Xymp4rx1QxH0ligIKz858HnWisNuiqJbvAmhrAF7z4LNfY2ZKOZycqbbcNgHR2ROQ9xRWjRDDYOycYUAAPcPM+FboYf9qVUBsQCzChOwCO710DJFnGP60bA83u88EQ/GxgsgH9cWvXnIt9r1NKYSUeKvw6nO0D7OcvNW1i3h6IjUaB8uvfGMUqhqccvRyUggDR7Og1KKpoP+PzOV1+YNvHKd7+Z6Tu2vi3Qoqx1toje12sgsipPGhpgVy1HE7yp025o1KsGjSEJhfdGkF55QujicOoBrTM0iRGRotzw7yr0AoZO7fDQKyIg/xxLGcPyHb5KI7Qz5W+aUIDd4gn1leby+hxau8Uiv0PbzVtOu3FZRqSpJisXMuWwW1xDJ9seHTf5980G80jiMzwDe8vxILEIqmabBNpIswaQ8moQdvEjZESL7nlj9grWMeUU+4Oeo7vzqYrDhppCBKYB5khr+MqEymsynBuQ4LxQOU3Cb+eui0L3j+lX0TrZSgPMzi6fXto3UKNgdqKC3BQFbyIEt5QijAju7yNgYnH8HI0xZeB+fkoTkOU/CLOrlAfq8mVigjjlmy+rJM7H5B5XCNHnDkLPvfbZn7E5czRI+wspE6JJUC7EBIuj8WknruNPDDh82KRC0w/r9B9ph1oMRQ3iPA6+ZMazIqlKI+v4gI/KWaIAJvzb9LuAp5+Tygn8hhV8dYa6p0IMLZ3C4BPRmIl6ZYWbtgtgbF2cHpRAxTOnxiF2fTzFTfG2yU7gg6TE8DYKsFZ3DSZy1gLydwCe7GYVbaXxBClCWD3jlbISEVOkQaCKcOMNhlSYEVbfyA7MmgFuFtBX70KZmJ+zj0ygDIYn4npAh7O3JlAou9DVyJ82YyHyAVHoylWQNEWwYxqd69GV3ylaB2K4wqfxRCcBa7PNASBYrPNaIxuZ6CtL7XETLft6VVF+tQty8ECA4Zs462JkFZEMrSIbqtQzKwyf/W+xdrLeMHpFht/uEh3U=
X-IronPort-Anti-Spam-Filtered: true
X-IronPort-Anti-Spam-Result: A2EFAACmy71b/wQXEqxkGQEBAQEBAQEBAQEBAQcBAQEBAQGBUwIBAQEBAQsBgVuBEIEnmkqWfhSBZigThD4ChGs2Cw0BAwEBAgEBAgEBAoEFDII2JAEOS2sBAQEBAQEjAghoAQEBAQIBDgwNPhICBQsLBwYEAwECASAHB0YJCAYKAQgbgwYBgXmjaQEBAYFoM4R4hR2LXHd+gRKDEoRLAQwGAQMGNgyDAoIqAog7Eg4EBIYNMoUFiV8HAoILjl2BT4RpiVOXVQaBEHFwgzwJgh0XEWoBCIJCilpniX4BBgiCPgEB
X-IPAS-Result: A2EFAACmy71b/wQXEqxkGQEBAQEBAQEBAQEBAQcBAQEBAQGBUwIBAQEBAQsBgVuBEIEnmkqWfhSBZigThD4ChGs2Cw0BAwEBAgEBAgEBAoEFDII2JAEOS2sBAQEBAQEjAghoAQEBAQIBDgwNPhICBQsLBwYEAwECASAHB0YJCAYKAQgbgwYBgXmjaQEBAYFoM4R4hR2LXHd+gRKDEoRLAQwGAQMGNgyDAoIqAog7Eg4EBIYNMoUFiV8HAoILjl2BT4RpiVOXVQaBEHFwgzwJgh0XEWoBCIJCilpniX4BBgiCPgEB
X-IronPort-AV: E=Sophos;i="5.54,363,1534789800"; d="scan'208";a="20249388"
In-Reply-To: <20181009072535.GA31858@hephaistos.amsuess.com>
References: <OF6F7D9482.0418744D-ON6525831E.0068D037-6525831E.006A8351@tcs.com> <20181009072535.GA31858@hephaistos.amsuess.com>
To: Christian Amsüss <christian@amsuess.com>
Cc: core@ietf.org, Hemant Rath <hemant.rath@tcs.com>
MIME-Version: 1.0
X-KeepSent: C4567C72:A5736163-65258322:00270C28; type=4; name=$KeepSent
X-Mailer: IBM Notes Release 9.0 March 08, 2013
Message-ID: <OFC4567C72.A5736163-ON65258322.00270C28-65258322.003683EF@tcs.com>
From: Abhijan Bhattacharyya <abhijan.bhattacharyya@tcs.com>
Date: Wed, 10 Oct 2018 15:25:27 +0530
X-MIMETrack: Serialize by Router on InKolM02/TCS(Release 9.0.1FP10HF213 | April 26, 2018) at 10/10/2018 15:25:29, Serialize complete at 10/10/2018 15:25:29
Content-Type: multipart/alternative; boundary="=_alternative 003683EE65258322_="
Archived-At: <https://mailarchive.ietf.org/arch/msg/core/2JnoXWOCI2caFQHGq2BnsvcLaD8>
Subject: Re: [core] Fw: New Version Notification for draft-bhattacharyya-core-a-realist-00.txt
X-BeenThere: core@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: "Constrained RESTful Environments \(CoRE\) Working Group list" <core.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/core>, <mailto:core-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/core/>
List-Post: <mailto:core@ietf.org>
List-Help: <mailto:core-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/core>, <mailto:core-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 10 Oct 2018 09:55:50 -0000

Hi Christian,
It is a pleasure to get your valuable comments. Probably the subject 
matter needs to be discussed in the broader context of real-time 
time-series streaming for IoT. Your inputs are important in this regard.

Let us share some ready thoughts in response to some of your comments. We 
can definitely discuss further. 

> * I assume that an I-Frame is still larger than an MTU, thus transported
>   in the stream it would still occupy multiple exchanges. Given that you
>   stick with NSTART=1 ("MUST wait to send any further segment"), won't
>   the round-trip times for the (how-many?) CON exchanges bring
>   throughput to a halt at every I-Frame?

Yes, the possibility cannot be ignored. However, since I-frames are 
essentially JPEG encoded spatially compressed frames so similar techniques 
used in the MJPEG streaming example can be used. So one can sub-classify 
critical and non-critical information within I-frames and switch the 
semantics accordingly. Anyway, one thing that we need to bear in mind is 
that the I-frames are sparse and separated by the scale of the GoP. P / B 
frames are usually very small in size. So one gets some time to transfer 
the I-frames and then may be serialize the P and B frames in subsequent 
best-effort delivery. Depends on design experiences. May be we can put 
some text regarding this in future versions. 

Having said that, I admit one of your later points where you have 
mentioned about some of the possible optimizations in block wise transfer. 
 These things can be discussed in a broader spectrum. At present we did 
not attempt to disrupt the Block-wise transfer mechanism as it has been 
created with a specific use case of reliable large data delivery. We need 
to define what should be the behaviour if a block option is used with 
No-Response (if at all).

> * The stream states look like something that should not be managed in an
>   option but can be managed at REST level by using established
>   mechanisms: "Create an entity (stream) and give a handle that we can
>   use to talk about it" is commonly expressed by POSTing somewhere
>   and receiving a URI for that stream as a Location.
>    The re-negotiation information could then go into unsuccessful
>    messages (eg. 4.xx Too Many Requests, with a payload indicating to
>    increase compression).
> 
>    This example moves the stream ID into the URI path and both timestamp
>    and position into the URI-Query. I've expressed both timestamp and
>    position in decimal format, but that shouldn't be a show stopper; if
>    it causes trouble, we'll come up with something (eg. a way of having
>    a compressed URI query that's transmitted as int but means a
>    decimal-encoded URI-Query component).

What you propose is definitely a sensible approach. 
But we tried to follow the approach in existing streaming standards and 
put the specific header options to help the consuming end relate the 
components of a series-transfer. One thing to note is that in this case 
the header over-head due to stream control information has a deterministic 
limit. Parsing is also straight forward with minimal processing overhead. 
Stream-state in the header helps quick understanding on agreement/ 
disagreement from the other party. In case we put the details in a URI 
query string then that impacts the effective length of the header and we 
need special mechanism to compress the URI. We wanted to avoid these 
complexities. The philosophy is to minimise control level processing to 
cater the hard real time requirements for live feed in AR control 
applications like automated VSLAM (Visual Simultaneous Localization and 
Mapping) for dumb robot terminals and UAVs. So the terminal is not 
manually remote controlled. 

We assume that the time-stamp is presented in epoch time. 

Another point is that we chose to provide autonomy to the producer to 
propose the stream-ID through header option. We consider the typical case 
where a remote (UAV) terminal is depleted of energy and replaced by 
another terminal, which streams as soon as commissioned, using the same 
stream ID (keeping an option for pre-provisioning). It becomes seamless 
for the consumer.

> * In general, video streaming has been my classical example of things
>   you would not want to do over CoAP, so please forgive my skepticism.
>   I'd be happy to be shown to be wrong, but that might need statistical
>   comparison to RTP streaming, and practical demonstration (though I
>   only might be saying this because I want to try remote piloting a UAV
>   over CoAP myself ;-) )
>  

RTP is something that will automatically come as a first thought. However, 
according to our experience, commercial IP based streaming implementations 
are using custom protocols on TCP. These protocols are quite in line with 
the usual current practice for RESTful streaming over public Internet 
which uses HTTP-streaming with ABR. So, we tried to create an efficient 
streaming counterpart of HTTP-streaming for IoT. ABR can be an added 
feature to what we proposed in the draft. In future AR the producer may 
not only stream multimedia but can send mulSEmedia (multi SEnsory media) 
with video as a sensory input. So we wanted to have a RESTful protocol 
which is equally efficient in transferring sensor data as well as large 
streams. Also, as we have mentioned in draft, CoAP allows us to create the 
intelligent switch to balance between real-time and reliable delivery 
while optimizing the resource usage and allowing flexibility to react to 
the connection environment. 

Having said that, we have done bench marking experiments to compare with 
RTP. We are not doing bad actually (however, definitely you need to change 
the default time-out limits, etc. for the real-time). 

We can present the approach and use cases in more detail with descriptions 
of the experiments and the bench marking results for further discussion in 
a physical meeting. 

Thank you.
With Best Regards
Abhijan Bhattacharyya
Consultant / Scientist,
{Internet Protocols | 5G | Standardization}, 
TCS Research,
Tata Consultancy Services
Building 1B,Ecospace
Plot -  IIF/12 ,New Town, Rajarhat,
Kolkata - 700160,West Bengal
India
Ph:- +91 33 66884691
Cell:- +919830468972 | +918583875003
Mailto: abhijan.bhattacharyya@tcs.com
Website: http://www.tcs.com
____________________________________________
Experience certainty.   IT Services
                        Business Solutions
                        Consulting
____________________________________________


"Christian Amsüss" <christian@amsuess.com> wrote on 10/09/2018 12:55:35 
PM:

> From: "Christian Amsüss" <christian@amsuess.com>
> To: "Abhijan Bhattacharyya" <abhijan.bhattacharyya@tcs.com>
> Cc: core@ietf.org, "Hemant Rath" <hemant.rath@tcs.com>
> Date: 10/09/2018 12:55 PM
> Subject: Re: [core] Fw: New Version Notification for draft-
> bhattacharyya-core-a-realist-00.txt
> 
> Hello Abhijan,
> 
> On Sun, Oct 07, 2018 at 12:53:24AM +0530, Abhijan Bhattacharyya wrote:
> > A new draft [...]  of real-time streaming
> 
> I've had a brief look at this draft, and have some questions and
> comments:
> 
> * I assume that an I-Frame is still larger than an MTU, thus transported
>   in the stream it would still occupy multiple exchanges. Given that you
>   stick with NSTART=1 ("MUST wait to send any further segment"), won't
>   the round-trip times for the (how-many?) CON exchanges bring
>   throughput to a halt at every I-Frame?
> 
> * The stream states look like something that should not be managed in an
>   option but can be managed at REST level by using established
>   mechanisms: "Create an entity (stream) and give a handle that we can
>   use to talk about it" is commonly expressed by POSTing somewhere
>   and receiving a URI for that stream as a Location.
> 
>   I'll try to re-phrase the exchange on p9 in such terms:
> 
>    Client (Producer)                                  Server (Consumer)
>    |                                                  |
>    | POST: CON;                                       |
>    |       URI=/video;                                |
>    |       Payload= CBOR or JSON                      |\
>    +------------------------------------------------->| |
>    |                                                  | |Stream
>    | ACK;                                             | |negotiation
>    | Response = 2.04 CHANGED                          | |
>    | Location: /five-bit-id                           | |
>    |<-------------------------------------------------|/
>    :                                                  :
>    :                                                  :
>    |(First segment of an MJPEG frame. Contains        |
>    | meta-data. Critical segment needs reliable       |
>    | delivery.)                                       |
>    |                                                  |
>    | PUT: CON;                                        |
>    |       URI=/five-bit-id?t=123&pos=0               |
>    |       Payload= <Bytes_in_1st segment>            |\
>    +------------------------------------------------->| |
>    |                                                  | |
>    | ACK;                                             | |
>    | Response = 2.04 CHANGED                          | |
>    |<-------------------------------------------------| |
>    |(Second segment of an MJPEG frame. Contains       | |
>    | non-meta-data. Non-critical segment- best effort | |
>    | transfer.)                                       | |
>    |                                                  | | Stream
>    | PUT: NON;                                        | | ongoing
>    |       URI=/five-bit-id?t=123&pos=1024;           | |
>    |       No-response = 127                          | |
>    |       Payload= <Bytes_in 2nd _segment>           | |
>    +------------------------------------------------->| |
>    |                                                  | |
>    :                                                  : |
> 
>    The re-negotiation information could then go into unsuccessful
>    messages (eg. 4.xx Too Many Requests, with a payload indicating to
>    increase compression).
> 
>    This example moves the stream ID into the URI path and both timestamp
>    and position into the URI-Query. I've expressed both timestamp and
>    position in decimal format, but that shouldn't be a show stopper; if
>    it causes trouble, we'll come up with something (eg. a way of having
>    a compressed URI query that's transmitted as int but means a
>    decimal-encoded URI-Query component).
> 
>    If the offsets and lengths of the messages within a time slice are
>    always block-sized, it would be well possible to use blockwise
>    transfer for the individual time frames. AFAICT it should be within
>    the specification to have some blocks CON transferred, some NON even
>    with no-response. As processing of the time frames is not atomic, the
>    application could work with blocks that are missing. That'd also give
>    us access to other established mechanisms, like sending a Size1
>    option with the pos=0 package of a timestamp to indicate how many
>    butes there will be for this timestamp.
> 
> * In general, video streaming has been my classical example of things
>   you would not want to do over CoAP, so please forgive my skepticism.
>   I'd be happy to be shown to be wrong, but that might need statistical
>   comparison to RTP streaming, and practical demonstration (though I
>   only might be saying this because I want to try remote piloting a UAV
>   over CoAP myself ;-) )
> 
> Best regards
> Christian
> 
> -- 
> To use raw power is to make yourself infinitely vulnerable to greater 
powers.
>   -- Bene Gesserit axiom
> [attachment "signature.asc" deleted by Abhijan Bhattacharyya/KOL/TCS] 
> "External email. Open with Caution"
=====-----=====-----=====
Notice: The information contained in this e-mail
message and/or attachments to it may contain 
confidential or privileged information. If you are 
not the intended recipient, any dissemination, use, 
review, distribution, printing or copying of the 
information contained in this e-mail message 
and/or attachments to it are strictly prohibited. If 
you have received this communication in error, 
please notify us by reply e-mail or telephone and 
immediately and permanently delete the message 
and any attachments. Thank you