Re: [AVTCORE] Source switching performance in draft-hellstrom-avtcore-multi-party-rtt-source-01.txt - full mux
Gunnar Hellström <gunnar.hellstrom@omnitor.se> Wed, 18 March 2020 19:23 UTC
Return-Path: <gunnar.hellstrom@omnitor.se>
X-Original-To: avt@ietfa.amsl.com
Delivered-To: avt@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 54B3C3A1A90 for <avt@ietfa.amsl.com>; Wed, 18 Mar 2020 12:23:48 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.698
X-Spam-Level:
X-Spam-Status: No, score=-1.698 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, HTML_MESSAGE=0.001, MSGID_FROM_MTA_HEADER=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=fail (1024-bit key) reason="fail (body has been altered)" header.d=omnitorab.onmicrosoft.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 t0ALZ7pf2vDp for <avt@ietfa.amsl.com>; Wed, 18 Mar 2020 12:23:42 -0700 (PDT)
Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30106.outbound.protection.outlook.com [40.107.3.106]) (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 DFA393A1A8F for <avtcore@ietf.org>; Wed, 18 Mar 2020 12:23:40 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Nkrj13s142MvjIUZJOSE6/TeRNBnpSErfoQVY/b1OV8LGVbx756ra1rbeSTSmeB9EjIUTSEI8og5CLun8uIPldtCvROYgQ6s40gT1yoavoa5k/Ci4LW0YYzI7AIqg94HPOnki78J5eOjHHGBPq7NjZUK657PpjsD0KvHl4o6P2fkaO5esBpRp9ZXAu2OlOd7C34XH7szR/aYeWJ38r3eGWIW6gySofa9yy0dLTn8HW3LQo2I3dHIJ/VqRm400OZ1+LEkP5SpibWncVGrqH9JKaBp00Pz5rBLRnHXT/G5UboOeDfHbmJuUdFNJnWNGUbx+tIrw+KC8MujNcPiKXL8aw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;bh=yOocw/w1WsC1cNrI5xePWnX8DEN1pfflbD7js66VjLA=; b=WfqHrnh6XV7C/EYjFQkgNGLr8B0aEi/16WlOxSgAKI0ZrXY4eHrmLwWwFWWRoBcCsknNKiFG4c3h+GEMlcDOO4ARtgXRNKu0dc2f69NKYAxWaeKV9qGJw4CkL4WSAwbv/XE/lUlZCsuKXQ3uZV42bSPbz2I5t3/HnsjlmuQaZ219JrrQqTeGrhuuSmzWPLYsjiR31vLx0Hz5qCLcX2GCKYdqE8JzulduOnlLrqE53oBwbWM2yLkEYvbovLsUSswgOGeZUUZk6eSP8uZtW/vRt/JbegTkTml+fDk2HRcoeNdbLqy9nbluwC49BHHquiEW01z6aL7R3vHyBYVBugOGJA==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=omnitor.se; dmarc=pass action=none header.from=omnitor.se; dkim=pass header.d=omnitor.se; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=omnitorab.onmicrosoft.com; s=selector2-omnitorab-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;bh=yOocw/w1WsC1cNrI5xePWnX8DEN1pfflbD7js66VjLA=; b=COEERq8rRRTRNaLG3aaA+l8Wsnd82SkWbNDf05ZKr6Dmmp2MpNEW1+8KlcI5L534nXJHiCqkdtP1SDHqG3TKHUosLrB22mPa9p2e45BkrIE5pojUW+hvrd4TMOKUVyitX5XpomRnCzT9VksxmfrbAkSSlS2hnYFMuhZG9CRvkLc=
Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=gunnar.hellstrom@omnitor.se;
Received: from PR3P193MB0618.EURP193.PROD.OUTLOOK.COM (20.180.30.210) by PR3P193MB0700.EURP193.PROD.OUTLOOK.COM (20.180.28.143) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.14; Wed, 18 Mar 2020 19:23:36 +0000
Received: from PR3P193MB0618.EURP193.PROD.OUTLOOK.COM ([fe80::d96c:b1fb:87f4:b274]) by PR3P193MB0618.EURP193.PROD.OUTLOOK.COM ([fe80::d96c:b1fb:87f4:b274%3]) with mapi id 15.20.2814.021; Wed, 18 Mar 2020 19:23:36 +0000
To: James Hamlin <james.hamlin@purple.us>, "avtcore@ietf.org" <avtcore@ietf.org>
References: <158300358958.4740.11384667574242789327@ietfa.amsl.com> <910582c0-dcb5-eea4-2075-eef6085750f4@omnitor.se> <1584146721401.88908@purple.us> <61971f62-cff3-6fcb-1035-341e1244d255@omnitor.se> <1584360674813.99071@purple.us> <3a8a924a-8e36-6015-dee0-5951457dd39f@omnitor.se> <1584440349163.6938@purple.us> <fe12b835-0d26-a2d9-104e-0522ab7fd8a6@omnitor.se> <1584532219395.21333@purple.us>
From: Gunnar Hellström <gunnar.hellstrom@omnitor.se>
Message-ID: <a7021c52-2671-4896-a779-d03589cbac16@omnitor.se>
Date: Wed, 18 Mar 2020 20:23:34 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.6.0
In-Reply-To: <1584532219395.21333@purple.us>
Content-Type: multipart/alternative; boundary="------------2AF3D721A0C13084759D1CC4"
Content-Language: sv
X-ClientProxiedBy: FR2P281CA0008.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a::18) To PR3P193MB0618.EURP193.PROD.OUTLOOK.COM (2603:10a6:102:3b::18)
MIME-Version: 1.0
X-MS-Exchange-MessageSentRepresentingType: 1
Received: from [192.168.2.136] (77.53.230.59) by FR2P281CA0008.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2835.19 via Frontend Transport; Wed, 18 Mar 2020 19:23:36 +0000
X-Originating-IP: [77.53.230.59]
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 5f1aae76-8461-457e-58a1-08d7cb71db0e
X-MS-TrafficTypeDiagnostic: PR3P193MB0700:
X-Microsoft-Antispam-PRVS: <PR3P193MB0700E536C00B383584641113FBF70@PR3P193MB0700.EURP193.PROD.OUTLOOK.COM>
X-MS-Oob-TLC-OOBClassifiers: OLM:8882;
X-Forefront-PRVS: 03468CBA43
X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(396003)(39830400003)(376002)(346002)(366004)(136003)(199004)(19627405001)(508600001)(36756003)(186003)(16526019)(31686004)(81166006)(110136005)(8676002)(6486002)(16576012)(86362001)(53546011)(5660300002)(66476007)(21615005)(66556008)(8936002)(316002)(81156014)(26005)(66946007)(66574012)(966005)(956004)(2616005)(30864003)(2906002)(52116002)(31696002)(559001)(579004); DIR:OUT; SFP:1102; SCL:1; SRVR:PR3P193MB0700; H:PR3P193MB0618.EURP193.PROD.OUTLOOK.COM; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1;
Received-SPF: None (protection.outlook.com: omnitor.se does not designate permitted sender hosts)
X-MS-Exchange-SenderADCheck: 1
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: 43O3OieVPIOxftSlndgqaFNej+FdUHPxZ6Q6JPPy8G9CF1Ccz4uSlokCVZtn/wpiGXLcDNKPpRmC5BNBqNjbkFHR19M7g/bG2yfFbQERnwje/7CcFuukwhZIuYeH3154Sdmqf6aZtfq6x2h2xyZDL6C9ql5JIrdhIbO32661R4IpQgf0f5zjRII8Swe2yLR80wxWwrw2s+22K5gld4MwsGheTPswZsd/Tqd0WNRwC7O+83fI2SiPgAaxHKuzUnH6KxlBLvibHPObfvXsVL3U27Dqul5KOJxXc93rD984bctQ894HJ0bFh+0yRScvOjzuDR94ZM4kyq6uQYN9aA2URVwMg+vs44AxyatOB2fXn01ahYr75e5tRLfohwRpbTb+9FbeiSWA6fu4dkn9u+SojdL0TnzbyuVb3NxMMMUSEL3BPkXxfb2hNaSqfzV14Swrdi7VFzxDEr/ZdYANqiR+vN2AKdZauKkdl7JoMA2BZD7D9VHuuT9G4TRi3NDSrwjmZZFn6h25KksxLiZLxviarQ==
X-MS-Exchange-AntiSpam-MessageData: V8FNZVCSD3DTNAwlqaL/zwzv31ZhIMYQuoaXY8vImw5MkRam8I5HdzD4Ud3klHZftJBKbyFfiifONi4C6K74JW9JNQa8vwKlqEMxfakWLMQ0BbRTBuWpaDpQhShbgLhc7bHgCBsNP1PichS3XC9CGQ==
X-OriginatorOrg: omnitor.se
X-MS-Exchange-CrossTenant-Network-Message-Id: 5f1aae76-8461-457e-58a1-08d7cb71db0e
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Mar 2020 19:23:36.5457 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 2df8b35f-363f-46b8-a0d1-ee9b1723225b
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: PR2cYrfTCUdHcH+CsVTf063js0ZiTrkRyMI6PPypusrjgIeR2CUe7J/m6Pqe6toelt0bU4C7ZEhYMgu/vSp0c8zwj19LKJiI3BIKgVLpyqY=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3P193MB0700
Archived-At: <https://mailarchive.ietf.org/arch/msg/avt/nQ9amolkN02l6YxFZm1FjZHL6xg>
Subject: Re: [AVTCORE] Source switching performance in draft-hellstrom-avtcore-multi-party-rtt-source-01.txt - full mux
X-BeenThere: avt@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Audio/Video Transport Core Maintenance <avt.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/avt>, <mailto:avt-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/avt/>
List-Post: <mailto:avt@ietf.org>
List-Help: <mailto:avt-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/avt>, <mailto:avt-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 18 Mar 2020 19:23:49 -0000
Hi James, Den 2020-03-18 kl. 12:50, skrev James Hamlin: > > Hi Gunnar > > > I think your last point here is probably the most significant: both > this proposal and the timestamp proposal require a change to RFC4103 > itself and that may just cause too many problems. > Yes, I think we get sufficient switching performance from the CSRC-list method in the current draft. Thanks, Gunnar > > Best regards > > > James > > > James Hamlin > Contractor > Purple, a Division of ZP Better Together, LLC > purplevrs.com > > The information contained in this e-mail message is intended only for > the personal and confidential use of the recipient(s) named above. If > you have received this communication in error, please notify us > immediately by e-mail, and delete the original message. > > ------------------------------------------------------------------------ > *From:* Gunnar Hellström <gunnar.hellstrom@omnitor.se> > *Sent:* 17 March 2020 21:02 > *To:* James Hamlin; avtcore@ietf.org > *Subject:* Re: Source switching performance in > draft-hellstrom-avtcore-multi-party-rtt-source-01.txt - full mux > > Hi James, > > Your multiplexed mixing proposal has the very interesting benefit that > text from all sources (within the limits you discuss regarding MTU) > fitting into one packet gets the same switching delay. 300 ms if we > stay at 300 ms interval, or 100 ms if we decrease the transmission > interval to 100 ms. ( I prefer 100 ). > > > There are some considerations to sort out: > > > 1. What is the exact coding specification for the packet? > > > 2. Is there a need to agree on a maximum number of sources per packet? > > > 3. How will sdp be specified > > > 4. Can this be seen as an update to RFC 4103? > > > 1 coding: SDP fmtp parameters tell how many redundant generations are > included in the packets. a=fmtp 100 96/96/96 tells that all sources > are always represented with one original and two redundant > transmissions. (RFC 4103 specifies that the number of generations may > be varied during the session. That statement needs to be negated. It > is no problem in practice, the issue is merely how to express that new > requirement. > > > jeh: I had thought a=fmtp 100 > 96/96/96/96/96/96/96/96/96/96/96/96/96/96/96 would be necessary > because that would indicate the correct number of blocks for 5 > participants with 3 generations, but that's getting far too silly > as we don't necessarily know the number of participants at the > negotiation stage. So just a=fmtp 100 96/96/96 conveys the formats of > the anticipated generations correctly. In the context of a capability > flag, we are sure that an implementation knows not to expect only 3 > header blocks. > > > 2. Agree on a maximum number of sources? I am not sure if a maximum > per packet is needed. Or can that be left to implementation to try to > keep within the MTU, and if more sources are active, then distribute > between more packets? > > > jeh: I think it could be left to the mixer. The maximum sources you > can list in a packet is 16 and that would create 64 bytes of header > just for the CSRC list and timestamps. But if most had only typed a > couple of characters then the MTU might not be a limit. If MTU becomes > limiting then the mixer would need to buffer text or reduce > transmission interval. It could require most participants to be muted > for very large conferences. > > > 3. sdp. Negotiation of a=rtt is needed. And the number of > generations needs to be specified. The number of generations that a > party intends to send shall be specified the fmtp attribute. Example > a=fmtp 100 96/96/96 means one original and two redundant generations > for all sources in all packets. How many sources are carried in the > packet can vary from packet to packet and will be detected by the > mechanism that extracts the text from the packets. > > > > 4. Can this be an update to RFC 4103 or is an RFC 4103bis needed. I > hope it can be an update, because RFC 4103 is now mentioned in so many > other documents. I think this solution has a more thorough influence > on RFC 4103 than the previously discussed methods, but can hopefully > go as an update. > > > jeh: Perhaps this is the thing that kills this idea. On careful > reading, your current proposal doesn't break anything in 4103. 4103 > doesn't mention a CSRC list but doesn't preclude it. This proposal > does change the arrangement of text blocks and so alters 4103. > Similarly the timestamp mechanism also breaks 4103's rules. > > > Thanks, > > > Gunnar > > > > > > > > Den 2020-03-17 kl. 11:19, skrev James Hamlin: >> >> Hi Gunnar >> >> >> I'll look at pseudo-multi-party and reply separately (I think it's >> clear that this has to be made to work for compatibility with current >> implementations). >> >> >> I think the balance between the current CSRC proposal and the >> timestamp mechanism is now between the complexity of the timestamp >> algorithm and the benefit of spreading out redundant generations over >> time, to benefit from statistical independence of packet loss. >> >> >> I think it should be possible just to multiplex all participants and >> all redundant generation slots in one packet. The transmission >> interval could then remain at 300ms and redundant generations would >> spread out over 900ms, giving better reliability. The recovery >> algorithm is not complicated. I think the limit would >> be packet size / MTU. But with 5 participants entering 10 chars in >> each 300ms and each char being 4 bytes (the longest for UTF-8), and >> extending to 5 generations, you get 5 * 10 * 4 * 5 = 1000 bytes of >> text and then 61 bytes of header = 1061 bytes which is would still be >> OK with typical MTU. And it's still possible to reduce >> transmission interval or buffer some participants for 1 >> generation if the packet size gets too big. >> >> >> IMHO this looks worth thinking about. >> >> >> 0 1 2 3 >> 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> |V=2|P|X| CC=3 |M| "RED" PT | sequence number of primary | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> | timestamp of primary encoding "P" | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> | synchronization source (SSRC) identifier | >> +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+ >> | CSRC list member 1 | >> | CSRC list member 2 | >> | CSRC list member 3 | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> |1| T140 PT | timestamp offset CSRC1R2 | block length | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> |1| T140 PT | timestamp offset CSRC1R1 | block length | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> |1| T140 PT | timestamp offset CSRC1P | block length | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> |1| T140 PT | timestamp offset CSRC2R2 | block length | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> |1| T140 PT | timestamp offset CSRC2R1 | block length | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> |1| T140 PT | timestamp offset CSRC2P | block length | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> |1| T140 PT | timestamp offset CSRC1R2 | block length | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> |1| T140 PT | timestamp offset CSRC1R1 | block length | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> |1| T140 PT | timestamp offset CSRC1P | block length | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> |0| T140 PT | "CSRC1R2" T.140 encoded redundant data | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---------------+ >> | | "CSRC1R1" T.140 encoded redundant data | | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+ >> | "CSRC1P" T.140 encoded primary data | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> | "CSRC2R2" T.140 encoded redundant data | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---------------+ >> | | "CSRC2R1" T.140 encoded redundant data | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +-+-+-+ >> | | "CSRC2P" T.140 encoded primary data | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> | "CSRC3R2" T.140 encoded redundant data | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+---------------+ >> | | "CSRC3R1" T.140 encoded redundant data | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> | | "CSRC3P" T.140 encoded primary data | >> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ >> >> >> Best regards >> >> James >> >> >> >> James Hamlin >> Contractor >> Purple, a Division of ZP Better Together, LLC >> purplevrs.com >> >> The information contained in this e-mail message is intended only for >> the personal and confidential use of the recipient(s) named above. If >> you have received this communication in error, please notify us >> immediately by e-mail, and delete the original message. >> >> ------------------------------------------------------------------------ >> *From:* Gunnar Hellström <gunnar.hellstrom@omnitor.se> >> *Sent:* 16 March 2020 22:12 >> *To:* James Hamlin; avtcore@ietf.org >> *Subject:* Re: Source switching performance in >> draft-hellstrom-avtcore-multi-party-rtt-source-01.txt >> >> Hi James, >> >> >> Den 2020-03-16 kl. 13:11, skrev James Hamlin: >>> >>> Hi Gunnar >>> >>> >>> Many thanks for taking the time to go through this so thoroughly. >>> >>> >>> I think we have 2 main aspects to this work:- >>> >>> 1. Compatibility with existing implementations >>> 2. Choosing an efficient mechanism for the future >>> >>> For the first of these, it seems to me that the only solution is for >>> a mixer to be able to do inline participant labeling and buffering >>> to produce a presentable single text stream. Current >>> implementations of RFC4103 will simply not >>> understand switching between participants, nor will they make >>> any visual indication of which text belongs to which participant, so >>> the mixer needs to do that. >> Yes, it is possible to implement a limited functionality >> "pseudo-multi-party" text mixer for presenting multi-party rtt on a >> point-to-point rtt terminal. A procedure is included as Appendix A in >> this draft: >> https://datatracker.ietf.org/doc/draft-hellstrom-mmusic-multi-party-rtt/ >> >> When the mixer has text from more than one source to transmit, it >> looks for suitable switching moments in the text from the source it >> is transmitting. When a phrase or a sentence is complete or a line >> separator issued, or even a long pause, then the mixer decides to >> switch source and inserts a line separator and a label for next in >> turn to get its text transmitted, and then the text. This method can >> be used but has its limitations. It only displays one source at a >> time in real-time. Erasure over a switch does not work. It assumes >> that the receiver accepts to use the chat-style layout in one display >> area etc. >> >> Each application area should decide what to do with old terminals who >> do not support multi-party. Implement the switching method above, or >> upgrade the terminals or refuse to involve the terminals in >> multi-party sessions. >> >> >> >> >>> >>> For the second we have established that it's possible to: allow the >>> different redundant blocks in a packet to be for different >>> participants; or use timestamps to resolve the correct redundant >>> text to use and to have each packet associated with just one >>> participant. I can also imagine putting all text generations of each >>> source in the CSRC list in each packet which adds 12 bytes of header >>> space per CSRC (assuming 2 redundant generations); I'll write a >>> separate mail about that. >> Sound interesting. >>> After that, I think we have a fairly complete set of solutions to >>> choose from. >> >> Thanks, >> >> Gunnar >> >> >>> Some other comments inline. >>> >>> Best regards >>> >>> James >>> >>> >>> >>> James Hamlin >>> Contractor >>> Purple, a Division of ZP Better Together, LLC >>> purplevrs.com >>> >>> The information contained in this e-mail message is intended only >>> for the personal and confidential use of the recipient(s) named >>> above. If you have received this communication in error, please >>> notify us immediately by e-mail, and delete the original message. >>> >>> ------------------------------------------------------------------------ >>> *From:* Gunnar Hellström <gunnar.hellstrom@omnitor.se> >>> *Sent:* 14 March 2020 11:17 >>> *To:* James Hamlin; avtcore@ietf.org >>> *Subject:* Re: Source switching performance in >>> draft-hellstrom-avtcore-multi-party-rtt-source-01.txt >>> >>> Hi James, >>> >>> Thanks for an interesting proposal. >>> >>> Let us extend the information about the packet contents of your >>> example a bit: >>> >>> >>> >>> seq 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 >>> >>> CSRC=source 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 >>> >>> Timestamp 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 >>> >>> >>> R2 t offset 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 >>> >>> R1 t offset 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 >>> >>> R2 A M X B N Y C O Z >>> >>> R1 A M X B N Y C O Z >>> >>> P A M X B N Y C O Z >>> >>> >>> Lost X X >>> >>> >>> (The timestamps and timestamp offsets ("t offset") are shown in 100 >>> ms, in reality it will be in milliseconds) >>> >>> >>> The SSRC of the packet is always the mixer's SSRC. >>> >>> The source is indicated in the CSRC-list that in this method has >>> only one member = the SSRC of the source represented in the packet. >>> >>> +jeh: Agreed: My mistake. >>> >>> >>> The timestamp is created by the mixer when sending, and the >>> timestamp offsets make it possible to calculate the timestamps the >>> redundant texts had when they were transmitted as originals. >>> >>> >>> The receiver must store essential data from a number of packets. >>> This data is the sequence number, the source (=CSRC), the Timestamp. >>> >>> So, let us see what happens if both packet 06 and 07 are lost. >>> >>> The receiver must also store for each source, the timestamps for >>> which text has been recieved (either with real contents or empty). >>> >>> >>> In packets 1 to 5, we have received and put in display areas for >>> source 1: "AB", for source 2: "MN", for source 3: "X" >>> >>> >>> 08 is received and the gap (07 and 06 ) is detected (07 and 06 with >>> two redundant elements in both, making a need for retrieval of 4 >>> text elements ) is remembered so we need to do the recovery >>> analysis.. The source (2) and other essential data is noted. The >>> original timestamp of R2 is calculated as Timestamp-R2 t offset = >>> 98-6 = 92. Checking back in the list of received packets we find >>> that we got a packet with timestamp 92 (and indeed, it contained >>> text from source 2), so there is no need to recover R2. Then the >>> original timestamp of R1 is calculated as Timestamp-R1 t offset = >>> 98-3 = 95. Checking back in the list of received packets we find >>> that we got a packet with timestamp 95 (and indeed, it contained >>> text from source 2), so there is no need to recover R1. The Primary >>> text in packet 08 ("O") is retrieved and put in the display area for >>> source 2. It is noted that we have got text for timestamp 98 for >>> source 2. The gap is still 4. >>> >>> >>> 09 is received. The gap (4 elements ) is remembered so we need to >>> do the recovery analysis. The source (3) and other essential data >>> is noted. The original timestamp of R2 is calculated as Timestamp-R2 >>> t offset = 99-6 = 93. Checking back in the list of received packets >>> we find that we got a packet with timestamp 93 (and indeed, it >>> contained text from source 3), so there is no need to recover R2. >>> Then the original timestamp of R1 is calculated as Timestamp-R1 t >>> offset = 99-3 = 96. Checking back in the list of received packets we >>> find that we never got a packet with timestamp 96 , so we recover R1 >>> ("Y") and insert it in the display area of source 3. The Primary >>> text in packet 09 ("Z") is retrieved and put in the display area for >>> source 3. It is noted that we got text from timestamps 96 and 99 for >>> source 3 (the gap can now be reduced to 3) >>> >>> >>> >>> 10 is received. The gap (3 ) is remembered so we need to do the >>> recovery analysis. The source (1) and other essential data is >>> noted. The original timestamp of R2 is calculated as Timestamp-R2 t >>> offset = 100-6 = 94. Checking back in the list of received packets >>> we find that we got a packet with timestamp 94 (and indeed, it >>> contained text from source 1), so there is no need to recover R2. >>> Then the original timestamp of R1 is calculated as Timestamp-R1 t >>> offset = 100-3 = 97. Checking back in the list of received packets >>> we find that we never got a packet with timestamp 97 , so we recover >>> R1 ("C") and insert it in the display area of source 1. The Primary >>> text in packet 10 is empty so there is nothing to put in the display >>> area for source 1. It is noted that we got text from timestamps 97 >>> and 100 for source 1 (the gap can now be reduced to 2) >>> >>> >>> >>> 11 is received. The gap (2 ) is remembered so we need to do the >>> recovery analysis. The source (2) and other essential data is >>> noted. The original timestamp of R2 is calculated as Timestamp-R2 t >>> offset = 101-6 = 95. Checking back in the list of received packets >>> we find that we got a packet with timestamp 95 (and indeed, it >>> contained text from source 2), so there is no need to recover R2. >>> Then the original timestamp of R1 is calculated as Timestamp-R1 t >>> offset = 101-3 = 98. Checking back in the list of received packets >>> we find that we got a packet with timestamp 98 , so we do not need >>> to recover R1. The Primary text in packet 11 is empty so there is >>> nothing to put in the display area for source 2. It is noted that we >>> got text from timestamp 101 for source 2. (we did not recover >>> anything, so the gap is still 2) >>> >>> >>> 12 is received. The gap (2 ) is remembered so we need to do the >>> recovery analysis. The source (3) and other essential data is >>> noted. The original timestamp of R2 is calculated as Timestamp-R2 t >>> offset = 102-6 = 96. Checking back in the list of received packets >>> we find that we never got a packet with timestamp 96, but from >>> packet 09 we recovered R1 from timestamp 96. So we shall not recover >>> anything from R2 here. Then the original timestamp of R1 is >>> calculated as Timestamp-R1 t offset = 102-3 = 99. Checking back in >>> the list of received packets we find that we got a packet with >>> timestamp 99, so we do not need to recover R1. The Primary text in >>> packet 12 is empty so there is nothing to put in the display area >>> for source 3. It is noted that we got text for timestamp 102 for >>> source 3 (the gap can now be reduced to 1) >>> >>> >>> 13 is received. The gap (1 ) is remembered so we need to do the >>> recovery analysis. The source (1) and other essential data is >>> noted. The original timestamp of R2 is calculated as Timestamp-R2 t >>> offset = 103-6 = 97. Checking back in the list of received packets >>> we find that we already recovered text for timestamp 97, so nothing >>> is recovered and nothing inserted from R2 in the display area of >>> source 1 . Then the original timestamp of R1 is calculated as >>> Timestamp-R1 t offset = 103-3 = 100. Checking back in the list of >>> received packets we find that we got a packet with timestamp 100, so >>> we do not need to recover R1. The Primary text in packet 13 is empty >>> so there is nothing to put in the display area for source 1. It is >>> noted that we got text for timestamp 103 for source 1 (the gap can >>> now be reduced to 0) >>> >>> >>> 14 is received. The gap is now 0 so we do not need to do any >>> recovery analysis. The source (2) and other essential data is >>> noted. The Primary text in packet 13 is empty so there is nothing to >>> put in the display area for source 2. It is noted that we got text >>> for timestamp 104 for source 2. >>> >>> >>> After this, we have in the display areas: for 1: "ABC" for 2: >>> "MNO", for 3: "XYZ", so everything is recovered. >>> >>> >>> I am sorry, the narrative above may be hard to follow. It could >>> probably be converted to some table format if we need to do it again >>> for other cases. >>> >>> >>> So, yes, this method also works. >>> >>> I see a couple of differences in characteristics between this >>> "timestamp method" and the "CSRClist method": >>> >>> >>> 1. The recovery time from loss to recovery can with the timestamp >>> method be 200 times the number of simultaneous sending sources in >>> milliseconds. Thus with 5 sources: 1 second. With the CSRClist >>> method, it is steady 200 milliseconds. (assuming a transmission >>> interval of 100 ms and round robin mixer switching.) >>> >>> >>> 2. The recovery capacity in packets in sequence is 2*the number of >>> simultaneous sources = 10 packets for 5 sources. With the CSRC >>> method it is 2 packets. (again assuming round robin mixer switching ) >>> >>> >>> 3. The complexity of the procedure is higher but still manageable >>> for the timestamp method. >>> >>> jeh: Yes. I had thought this would be simpler, but the timestamp >>> logic gets complicated. >>> >>> >>> 4. The number of packets to store essential information about is >>> higher for the timestamp method ( I think it is 4*the number of >>> active sources). For the CSRC list method, it is 4 packets and less >>> information per packet. >>> >>> >>> You say: "The advantage of this approach is that the format of the >>> packet doesn't change. The current arrangement where all the text in >>> a packet is for one participant is preserved." >>> >>> >>> I do not see the CSRClist method as a change in packet format. >>> >>> jeh: Agreed: I should have said that differently: the change is that >>> the text over the redundant and primary block is no longer >>> continuous; it's for different participants. >>> >>> >>> The mixer needs in both methods to include a CSRC -list. The >>> difference is that in the CSRClist method, the list has more >>> members. It is still within the format description of RTP. The >>> source of the redundant parts will vary in a packet, but the >>> composition of the contents of the packet for transmission from the >>> mixer is as usual for a single sender: Put what was sent next to >>> last in the packet as R2, put what was sent last as R1, and put the >>> new text chunk as P. The only addition is the rule that the CSRC >>> list is populated with the sources in the strict order. >>> >>> >>> Summary: both methods seem possible. It will be interesting to get >>> more comments. >>> >>> >>> Thanks, >>> >>> >>> Gunnar >>> >>> >>> >>> >>> >>> >>> >>> >>> Den 2020-03-14 kl. 01:45, skrev James Hamlin: >>>> Hi Gunnar >>>> >>>> >>>> I've also been thinking through the possibility of a sender >>>> switching source without clearing all redundant generations first. >>>> Clearly, a sender that did this today would cause problems >>>> for existing receivers. But checking timestamps at the receiver >>>> should fix this. >>>> >>>> >>>> Consider three senders 1, 2 and 3 which send text "ABC", "MNO" and >>>> "XYZ". The block below shows this text being >>>> sent taking round-robin turns with the participants. >>>> >>>> >>>> seq 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 >>>> >>>> part 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 >>>> >>>> - >>>> >>>> R2 A M X B N Y C O Z >>>> >>>> R1 A M X B N Y C O Z >>>> >>>> P A M X B N Y C O Z >>>> >>>> >>>> If sequence 06 is lost and the receiver sees sequence 07 then it >>>> may assume that the lost packet was for participant 1 and use the >>>> redundant character "B". This would lead to character "B" being >>>> duplicated in the output for participant 1. But it is possible for >>>> a receiver to get the correct result; the timestamp for the >>>> redundant text in packet 07 will not be higher than the most recent >>>> timestamp previously received and so shouldn't be used. The >>>> redundant text in the following packet 08 has no applicable >>>> redundant text, but the timestamp of the R1 in packet 09 will be >>>> greater than the most recent received and so is usable. >>>> >>>> >>>> The advantage of this approach is that the format of the packet >>>> doesn't change. The current arrangement where all the text in a >>>> packet is for one participant is preserved. Tracking the timestamp >>>> adds some implementation effort but I think >>>> it's minimal. It does also mean the mixer needs to synchronize >>>> timestamps across the media sources but it is in a position to do so. >>>> >>>> Best regards >>>> >>>> James >>>> >>>> >>>> >>>> James Hamlin >>>> Contractor >>>> Purple, a Division of ZP Better Together, LLC >>>> purplevrs.com >>>> >>>> The information contained in this e-mail message is intended only >>>> for the personal and confidential use of the recipient(s) named >>>> above. If you have received this communication in error, please >>>> notify us immediately by e-mail, and delete the original message. >>>> >>>> ------------------------------------------------------------------------ >>>> *From:* Gunnar Hellström <gunnar.hellstrom@omnitor.se> >>>> *Sent:* 13 March 2020 16:41 >>>> *To:* avtcore@ietf.org; James Hamlin >>>> *Subject:* Source switching performance in >>>> draft-hellstrom-avtcore-multi-party-rtt-source-01.txt >>>> >>>> Hi, >>>> >>>> I want to follow-up on the good discussion on source switching >>>> performance a couple of days ago, under the subject "[AVTCORE] >>>> Improved RTP-mixer performance for RFC 2198 and RFC 4103 redundancy >>>> coding" >>>> >>>> *Two parts in the performance increase solution.* >>>> Two actions are proposed in >>>> draft-hellstrom-avtcore-multi-party-rtt-source: >>>> a) Reduce the packet transmission interval from 300 to 100 ms. >>>> b) Use a strict relation between members in the CSRC list and the >>>> parts of the payload that is original text and first generation >>>> redundancy and second generation redundancy so that the mixer can >>>> switch source for every new packet and the sources of text >>>> recovered from redundancy can be assessed by the receiver. >>>> >>>> I think it is worth while to move forward with the complete >>>> improvement a) and b) proposed in the draft. It will cause less >>>> complexity, lower delays and lower risk for stalling in case of >>>> many participants entering new text simultaneously. >>>> >>>> Here is my reasoning: >>>> >>>> I have the following view of the achievable performance >>>> improvements for different cases: >>>> >>>> 1. With the original source switching with RFC 4103 and an >>>> RTP-mixer using 300 ms transmission interval and not allowing a mix >>>> of sources in one packet, there can be one source switching per >>>> second by the mixer with an introduced delay of up to one second. >>>> >>>> >>>> 2. By just reducing the transmission interval from 300 to 100 ms, >>>> it will be possible to have three source switches per second with >>>> an introduced delay of up to one second. (with just two parties >>>> sending text simultaneously, the delay will be maximum 300 ms. ) >>>> >>>> 3. And by applying the proposal from the multi-party-rtt-source >>>> draft with the CSRC-list as a source list for the redundancy, and >>>> also using 100 ms transmission interval, there can be switching >>>> between five source per second with an introduced delay of max 500 >>>> ms. With just two parties typing simultaneously, the delay will be >>>> a maximum of 100 ms. >>>> >>>> The delays are extreme values from when all sources start to type >>>> simultaneously. It was agreed that at least the improvement from >>>> the reduced transmission interval is needed. >>>> >>>> Case 1 and 2 are a bit complex for the mixer to implement. From the >>>> moment it has text queued for transmission from another source B >>>> than the one currently transmitted A, then the mixer needs to stop >>>> adding new text from A to the packets, but still send two more >>>> packets with the agreed transmission interval, progressing the >>>> latest transmitted original text to first generation redundancy and >>>> then again one more packet with the text as second level >>>> redundancy. Not until that is done, the mixer is allowed to start >>>> taking text from the transmission queue from B to transmit. This is >>>> the background of the 1 s vs 300 ms delays in case 1 and 2. >>>> >>>> In case 3, there is much less complexity. When there is something >>>> from B in queue for transmission, the mixer can decide to insert >>>> that in next packet and add the redundancy from earlier >>>> transmissions from A, because their sources are included in the >>>> CSRC list in the same packet. >>>> >>>> Therefore I want to move on with the complete solution in case 3. >>>> >>>> ----------------------------------- >>>> >>>> *Influence on the multi-party capability negotiation:* >>>> There is an installed park of RTT implementations without >>>> multi-party awareness. The receiver need to take active part in >>>> planning the multi-party RTT presentation. Therefore a capability >>>> negotiation is needed. A simple sdp attribute a=rtt-mix without >>>> value is proposed in the draft. >>>> >>>> It is important to let this attribute mean capability of the >>>> complete solution case 3). If there is a temptation to have >>>> different levels of implementation, some only implementing the >>>> shorter transmission interval (2) and some implementing the >>>> complete solution (3), then threre will be a need for two different >>>> attributes, or one attribute with a list of parameter values for >>>> the two cases. That would complicate the evaluation of the >>>> negotiation. Therefore I would prefer that the attribute can mean >>>> capability to use the complete mixing solution (3). >>>> >>>> Regards >>>> >>>> Gunnar >>>> >>>> >>>> Den 2020-02-29 kl. 20:13, skrev internet-drafts@ietf.org: >>>>> A New Internet-Draft is available from the on-line Internet-Drafts directories. >>>>> >>>>> >>>>> Title : Indicating source of multi-party Real-time text >>>>> Author : Gunnar Hellstrom >>>>> Filename : draft-hellstrom-avtcore-multi-party-rtt-source-01.txt >>>>> Pages : 13 >>>>> Date : 2020-02-29 >>>>> >>>>> Abstract: >>>>> Real-time text mixers need to identify the source of each transmitted >>>>> text chunk so that it can be presented in suitable grouping with >>>>> other text from the same source. An enhancement for RFC 4103 real- >>>>> time text is provided, suitable for a centralized conference model >>>>> that enables source identification, for use by text mixers and >>>>> conference-enabled participants. The mechanism builds on use of the >>>>> CSRC list in the RTP packet. A capability exchange is specified so >>>>> that it can be verified that a participant can handle the multi-party >>>>> coded real-time text stream. The capability is indicated by an sdp >>>>> media attribute "rtt-mix". >>>>> >>>>> >>>>> The IETF datatracker status page for this draft is: >>>>> https://datatracker.ietf.org/doc/draft-hellstrom-avtcore-multi-party-rtt-source/ >>>>> >>>>> There are also htmlized versions available at: >>>>> https://tools.ietf.org/html/draft-hellstrom-avtcore-multi-party-rtt-source-01 >>>>> https://datatracker.ietf.org/doc/html/draft-hellstrom-avtcore-multi-party-rtt-source-01 >>>>> >>>>> A diff from the previous version is available at: >>>>> https://www.ietf.org/rfcdiff?url2=draft-hellstrom-avtcore-multi-party-rtt-source-01 >>>>> >>>>> >>>>> Please note that it may take a couple of minutes from the time of submission >>>>> until the htmlized version and diff are available at tools.ietf.org. >>>>> >>>>> Internet-Drafts are also available by anonymous FTP at: >>>>> ftp://ftp.ietf.org/internet-drafts/ >>>>> >>>>> >>>>> _______________________________________________ >>>>> I-D-Announce mailing list >>>>> I-D-Announce@ietf.org >>>>> https://www.ietf.org/mailman/listinfo/i-d-announce >>>>> Internet-Draft directories:http://www.ietf.org/shadow.html >>>>> orftp://ftp.ietf.org/ietf/1shadow-sites.txt >>>> -- >>>> >>>> + + + + + + + + + + + + + + >>>> >>>> Gunnar Hellström >>>> Omnitor >>>> gunnar.hellstrom@omnitor.se >>>> +46 708 204 288 >>> -- >>> >>> + + + + + + + + + + + + + + >>> >>> Gunnar Hellström >>> Omnitor >>> gunnar.hellstrom@omnitor.se >>> +46 708 204 288 >> -- >> >> + + + + + + + + + + + + + + >> >> Gunnar Hellström >> Omnitor >> gunnar.hellstrom@omnitor.se >> +46 708 204 288 > -- > > + + + + + + + + + + + + + + > > Gunnar Hellström > Omnitor > gunnar.hellstrom@omnitor.se > +46 708 204 288 -- + + + + + + + + + + + + + + Gunnar Hellström Omnitor gunnar.hellstrom@omnitor.se +46 708 204 288
- [AVTCORE] Source switching performance in draft-h… Gunnar Hellström
- Re: [AVTCORE] Source switching performance in dra… James Hamlin
- Re: [AVTCORE] Source switching performance in dra… Gunnar Hellström
- Re: [AVTCORE] Source switching performance in dra… James Hamlin
- Re: [AVTCORE] Source switching performance in dra… Gunnar Hellström
- Re: [AVTCORE] Source switching performance in dra… James Hamlin
- Re: [AVTCORE] Source switching performance in dra… Gunnar Hellström
- Re: [AVTCORE] Source switching performance in dra… Gunnar Hellström
- Re: [AVTCORE] Source switching performance in dra… James Hamlin
- Re: [AVTCORE] Source switching performance in dra… James Hamlin
- Re: [AVTCORE] Source switching performance in dra… Gunnar Hellström
- Re: [AVTCORE] Source switching performance in dra… Gunnar Hellström