[minutes] May 16 meeting

Hi,

The minutes of our meeting held yesterday (May 16) are available at:
   https://www.w3.org/2023/05/16-webrtc-minutes.html

and copied as text below.

The YouTube recording is at https://www.youtube.com/watch?v=XqYcdxWvlVw

Dom


                         WebRTC May 2023 meeting

16 May 2023

    [2]Agenda. [3]IRC log.

       [2] https://www.w3.org/2011/04/webrtc/wiki/May_16_2023
       [3] https://www.w3.org/2023/05/16-webrtc-irc

Attendees

    Present
           BernardAboba, CarineBournez, Dom, EladAlon,
           FlorentCastelli, GuidoUrdaneta, HaraldAlvestrand,
           HenrikBostrom, JanIvarBruaroey, JaredSiskin,
           PatrickRockhill, PeterThatcher, PhilippHancke,
           SameerVijaykar, SunSHin, TimPanton, TonnyHerre,
           YouennFablet

    Regrets
           -

    Chair
           Bernard, HTA, Jan-Ivar

    Scribe
           dom

Contents

     1. [4]WebRTC-NV Use Cases
     2. [5]WebRTC Extensions
          1. [6]Issue #134 / PR #164: Remove JSEP Modifications
          2. [7]Issue #158 / PR #167: Requesting a key frame via
             setParameters
          3. [8]Issue #159: RTCRtpEncodingParameters:
             scaleResolutionDownTo
     3. [9]Media Capture Extensions
          1. [10]Issue #98 track.getFrameStats() allocates memory,
             adding to the GC pile
     4. [11]IceController: Prevent removal of candidate pairs
        w3c/webrtc-extensions#166
     5. [12]RtpTransport Follow-up
     6. [13]Summary of resolutions

Meeting minutes

    Recording: [14]https://www.youtube.com/watch?v=XqYcdxWvlVw

      [14] https://www.youtube.com/watch?v=XqYcdxWvlVw

    IFRAME:
    [15]https://www.youtube.com/embed/XqYcdxWvlVw?enablejsapi=1&rel
    =0&modestbranding=1

      [15] 
https://www.youtube.com/embed/XqYcdxWvlVw?enablejsapi=1&rel=0&modestbranding=1

    Slideset: [16]https://lists.w3.org/Archives/Public/www-archive/
    2023May/att-0000/WEBRTCWG-2023-05-16.pdf

      [16] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf

   [17]WebRTC-NV Use Cases [18]🎞︎

      [17] https://github.com/w3c/webrtc-nv-use-cases
      [18] https://www.youtube.com/watch?v=XqYcdxWvlVw#t=151

    [19][Slide 10]

      [19] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=10

    TimPanton: we're renaming the "NV" Use Cases into "WebRTC
    Extended Use Cases"
    … questions were raised about its usefulness, which I think are
    worth discussing
    … looking for guidance and some sort of agreement of possible
    improvements

    [20][Slide 11]

      [20] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=11

    [21]RFC7478: Web Real-Time Communication Use Cases and
    Requirements

      [21] https://www.rfc-editor.org/rfc/rfc7478

    [22][Slide 12]

      [22] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=12

    TimP: "NV" is no longer what we're doing, so we renamed it into
    "WebRTC Extended Use Cases"
    … different level of consensus across use cases and
    requirements

    [23][Slide 13]

      [23] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=13

    [24][Slide 14]

      [24] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=14

    Bernard: the Machine Learning use case is a weird one - it does
    raise a question of what use cases are for
    … in IETF, we distinguish applicability docs from use cases doc
    … the applicability tells you things the standard doesn't apply
    for
    … documenting that something can be done with the tech would
    not show up in use cases, but in applicability doc

    TimP: worth discussing - will be covered somewhat later

    [25][Slide 15]

      [25] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=15

    [26][Slide 16]

      [26] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=16

    [27][Slide 17]

      [27] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=17

    TimP: WISH is addressing 3.9 and 3.10, and yet the use cases
    don't have consensus

    [28][Slide 18]

      [28] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=18

    [29][Slide 19]

      [29] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=19

    [30][Slide 20]

      [30] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=20

    [31][Slide 21]

      [31] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=21

    [32][Slide 22]

      [32] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=22

    TimP: proposal to rename it is in process
    … I want to focus on things that we can only or best do with
    WebRTC - that implies refocusing on P2P
    … since that's what WebRTC uniquely does
    … similar to RFC7478 did
    … we should take out use cases & requirements done by other
    standards
    … I think we need to include use cases that don't have new
    requirements but extend what 7478 describe
    … e.g. IoT
    … We should remove use cases or requirements that don't get
    consensus in a few months - they can always be added back
    … we should remove use cases that otherwise don't add new
    requirements
    … proposed API changes should all include changes to the use
    case doc if there is no use case for it - otherwise, why are we
    changing the API?
    … this also raises the question of the relationship between
    explainers and the use case doc
    … we've also been struggling with where the input comes from;
    happy to use webrtc.nu to that end if that's of interest

    Bernard: good suggestions - my opinion on them
    … +1 to the important of P2P; this has been a point of
    confusion in other WGs use cases
    … Streaming use cases often require P2P operations
    … All of the major cloud streaming services use WebRTC also for
    P2P among clients
    … "met by other standards" - I would like to see wide usage;
    WebRTC often wins over other standards because of its reach
    … re removing non-consensus content, +1
    … A big question: are we implying that we need to give blessing
    to a use case to make it "valid"?

    TimP: I think for a small developer, getting some level of
    reassurance that your usage is available by accident or
    something that can be relied on makes a big difference
    … as illustrated in the quote in slide 21

    Bernard: but even if you put in the doc - it doesn't create a
    requirement for browsers to support it properly

    TimP: True, but when somebody comes up with a change to the API
    that removes the ability to do this, there is no structural way
    to push back on the change

    Harald: one of the thing that surprises me in this handling of
    the doc is the handling of consensus
    … e.g. the "one way use case" - the developers are eager to use
    it, but the WG is pushing back on consensus
    … likewise for trusted JS conferencing - everyone is doing it,
    but we removed it for lack of consensus
    … I'm worried by the distance between the use case doc and the
    use cases that I need to support in the real world

    Peter: +1 to getting our use cases in order, +1 to having a
    place where devleopers can ask for things and get a status on
    "yes, it is in", "yes, it will be soon", "we can't figure out
    how"

    TimP: asking for things shouldn't be asking for features

    Jan-Ivar: +1 this needs a clean up
    … we should be clear about the scope for this - this is only
    for this WG
    … NV was supposed to be WebRTC 2.0
    … instead, we've been unbundling WebRTC in other specs - which
    make some of these use cases are no longer in scope for our WG
    … the purpose of this doc is to drive discussions for our WG
    and in our github
    … to help decide what's in or out

    Tony: hope we don't silo P2P vs alternatives; there may be use
    cases for integration with other standards

    Youenn: in terms of scope, +1 to Jan-Ivar - this doc is for the
    WebRTC WG
    … +1 to harald that we haven't had a lot of success with it
    … explainers allow to combine use cases requirements, API and
    examples - that provide a better structure from my perspective

    Youenn: maybe we should migrate towards that more than a
    standalone use cases doc

    TimP: What remains in the use case doc then?
    … is it a list of pointers to use cases in explainers?
    … I'll take this to the list - I can put some time on this once
    I understand what we want to achieve
    … I want to expand the scope a bit more than just for the WG

    Bernard: I'll try to create PRs (esp removal PRs) for our call
    next month

   [33]WebRTC Extensions [34]🎞︎

      [33] https://github.com/w3c/webrtc-extensions
      [34] https://www.youtube.com/watch?v=XqYcdxWvlVw#t=1919

     Issue [35]#134 / PR [36]#164: Remove JSEP Modifications [37]🎞︎

      [35] https://github.com/w3c/webrtc-extensions/issues/134
      [36] https://github.com/w3c/webrtc-extensions/issues/164
      [37] https://www.youtube.com/watch?v=XqYcdxWvlVw#t=1919

    [38][Slide 25]

      [38] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=25

    Harald: the RFC errata process is not the process to make
    change to an IETF document; only the IETF process does that
    … now that the IETF process has turned the crank with the
    updated draft, we're in a better situation

    [39][Slide 26]

      [39] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=26

     Issue [40]#158 / PR [41]#167: Requesting a key frame via
     setParameters [42]🎞︎

      [40] https://github.com/w3c/webrtc-extensions/issues/158
      [41] https://github.com/w3c/webrtc-extensions/issues/167
      [42] https://www.youtube.com/watch?v=XqYcdxWvlVw#t=2060

    [43][Slide 26]

      [43] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=26

    [44][Slide 27]

      [44] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=27

    Jan-Ivar: I see a requestFrame boolean - a bit odd for a
    parameter; why not making it a method? maybe it could be a
    counter?

    Fippo: I didn't want to separate in 2 methods as it creates all
    kind of issues
    … e.g. when deactivating a simulcast layer

    Jan-ivar: this could be done with a Promise.all (vs a boolean
    attribute); but that's bikeshedding

    Fippo: it could cause 2 keyframes to be generated

    TimP: are there situations where setParameters isn't the right
    place for it?
    … e.g. in encryption situations

    Fippo: that's why it has been added to encoded transform
    … but we haven't needed it so far for E2EE

    Harald: I don't like setParameters setting something that isn't
    a parameter
    … I would prefer something like sLD
    … getParameters should return what setParameters set
    … requestKeyFrame shouldn't be set

    Fippo: maxBitRate is typically unset in the first call of
    setParameter

    Harald: yes, but once it's set, it's set

    Florent: I understand the need to have it synchronized with
    setParameters, but I'm not sure we want it in the encoding
    parameters
    … we might want to have another member in the structure passed
    to setParameters
    … that may also make it work for getParameters
    … that would require rid validation - not sure that would
    necessarily be hard to do
    … the symetric API on a receiver would be very different since
    we don't have setParameters on receivers
    … how would we handle this there?
    … We do have getParameters on receivers

    Fippo: there are use cases for this indeed, e.g. to adjust
    jitter buffer

    Henrik: I support this use case

    Jan-Ivar: just because the browser isn't doing the right thing
    doesn't necessarily imply that it needs to be exposed to JS
    … e.g. it could be done automatically when active is set

    Youenn: in encoded transform, there is sender/receiver API, and
    a transformer API
    … they solve different issues
    … this one is mostly targeting the sender API
    … it makes sense to have it sync'd with setParameters
    … the transform API would still remain, right?

    Fippo: it's probably necessary for some E2EE use cases

    Jared: this makes sense to me - two reasons to deactivate the
    top layer: the person left the call or or they're switching
    down
    … you'll almost always want to send a key frame when
    deactivating a higher layer, except for the last participant
    … this may not require an API change for most cases

    Peter: I think this is a good approach to solve the real-world
    need in a simple way

    RESOLUTION: refine PR [45]#167 based on input during the call

      [45] https://github.com/w3c/webrtc-extensions/issues/167

    JIB: I'd like to explore whether we need an API at all

     Issue [46]#159: RTCRtpEncodingParameters: scaleResolutionDownTo
     [47]🎞︎

      [46] https://github.com/w3c/webrtc-extensions/issues/159
      [47] https://www.youtube.com/watch?v=XqYcdxWvlVw#t=2887

    [48][Slide 28]

      [48] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=28

    [49][Slide 29]

      [49] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=29

    Peter: what happens if you set the top layer to 360, and the
    next layer scale down by 2?

    Henrik: if you mix the two, we should throw an exception

    Peter: so either a factor, or a specific value
    … do we need any specific value?

    Henrik: same as for scaleResolutionBy - forbidding upscaling

    Peter: what happens when the top layer gets dropped?

    Henrik: generally, do the same as SRDB

    Youenn: are there existing workarounds with setting active to
    false?
    … may create short glitch

    Henrik: there are workarounds, but I'm not sure how good they
    are in practice

    Florent: an API like this would be great
    … there is a problem with orientation (portrait vs landscape)
    in terms of interpreting that value
    … also, as Peter asked, what happens if you feed frames that
    are smaller into layers that expect bigger frames
    … this may result in several layers with a single lower
    resolution

    Henrik: should I provide a PR?

    Youenn: I would want to be careful if this adds a lot of
    complexity

    RESOLUTION: Overall support in the direction, but details need
    to be fleshed out and complexity assessed

   [50]Media Capture Extensions [51]🎞︎

      [50] https://github.com/w3c/mediacapture-extensions
      [51] https://www.youtube.com/watch?v=XqYcdxWvlVw#t=3285

     Issue [52]#98 track.getFrameStats() allocates memory, adding to the
     GC pile [53]🎞︎

      [52] https://github.com/w3c/mediacapture-extensions/issues/98
      [53] https://www.youtube.com/watch?v=XqYcdxWvlVw#t=3285

    [54][Slide 30]

      [54] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=30

    [55][Slide 31]

      [55] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=31

    [56][Slide 32]

      [56] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=32

    [57][Slide 33]

      [57] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=33

    [58][Slide 34]

      [58] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=34

    [59][Slide 35]

      [59] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=35

    [60][Slide 36]

      [60] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=36

    [61][Slide 37]

      [61] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=37

    [62][Slide 38]

      [62] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=38

    Youenn: the use case is to get stats, not real-time information
    … that's why you call an API, you get a result; if you need it
    10s later, you call it again
    … with an interface, you get the object and then the UA starts
    the processing whether or not you're going to get data from it
    … that's more appropriate for real-time usage
    … it seems an ill-fit for the usage implied by the name
    getStats
    … so I would go with getStats()
    … if we need real-time info later, they can come through
    different APIs
    … WebRTC has already this pattern: getStats vs
    requetsVideoframeCallback
    … so +1 to Proposal A

    Jan-Ivar: unfortunately Paul couldn't join us today
    … Paul commented on the issue about IPC - the data has to be in
    the content process eventually
    … "real-time" is a spectrum (e.g. audio vs graphics)
    … this WG has fallen into a pattern - it would be useful to
    compare e.g. with the Media WG; not everything has to be a stat
    … there are ways to implement this without locking (which the
    design guide asks not do in a getter)
    … it all depends on the use case
    … other WGs with real-time have APIs already -
    media.currentTime or audioCtx.outputLatency

    Henrik: the use case is to call it at 1Hz
    … I fail to see use cases to call it more frequently on the
    main thread
    … if we're confident we're not getting other metrics, this
    would be fine
    … I don't see a lot of ergonomics difference in using await for
    async
    … if we do get requests for additional metrics, we would have
    painted us in a corner

    Youenn: with a promise-based API, it's clear that the results
    will be gathered asynchronously
    … with a getter, it requires updating it very frequently or be
    specific on the update frequency in the spec
    … the contract is clearer with async

    Jan-Ivar: "we should make decision out of love not out of fear"
    … i.e. based on the best information we have now, not
    anticipating all future uses

    Youenn: if we have to design it as a real-time API - would the
    sync API still be the best choice?
    … we don't have a real strong use case to guide us

    Jan-Ivar: a variant of Proposal B is to have the attributes
    directly on the track

    Henrik: it falls down to async vs sync; could you describe what
    you meant by "lockless"?

    JanIvar: there is code that allows reading values from another
    process without a lock
    … Paul would be the expert on this - he has implemented this
    for AudioContext (not yet landed in Firefox)

    Harald: implementing it as proposal A seems faster and easier

    Henrik: not detecting consensus at this point

    Jan-Ivar: I'm not hearing a lot of interest in our
    attribute-based API - will discuss internally and get back to
    the group on this

   IceController: Prevent removal of candidate pairs
   [63]w3c/webrtc-extensions#166 [64]🎞︎

      [63] https://github.com/w3c/webrtc-extensions/issues/166
      [64] https://www.youtube.com/watch?v=XqYcdxWvlVw#t=4304

    [65][Slide 41]

      [65] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=41

    [66][Slide 42]

      [66] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=42

    [67][Slide 43]

      [67] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=43

    [68][Slide 44]

      [68] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=44

    [69][Slide 45]

      [69] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=45

    [70][Slide 46]

      [70] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=46

    [71][Slide 47]

      [71] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=47

    Peter: this makes sense as a first item to tackle - although
    it's more useful once combined with candidate pair selection
    … I like the "removable" attribute and a setRemoval method
    … the idleTimeout is interesting, but there may be underlying
    complexity there; also the ergonomics of max integer value
    isn't great

    Harald: removing candidates isn't timer driven - candidates are
    removed when they fail
    … the end-of-candidate spec'd in ICE would throw away
    everything when we reach completed
    … ICE implementations wouldn't fit well with a timeout
    … because of this, cancelable event is a better fit - it allows
    the ICE Agent to match the spec'd protocol

    Jan-Ivar: not an ICE expert - but I prefer preventDefault()
    … still not clear to me what the UA should done once it's
    prevented though?
    … ICE Transport doesn't let you look at all the pairs... is
    this an insight problem into the state of things?
    … could you talk a bit more on what happens then?

    Sameer: this is a first set of improvements - listing all
    candidate pairs would be another improvement
    … allowing to keep candidate alive is to allow to switch to a
    different pair (with another additional API)

    Peter: in practice, the UA would continue sending checks on
    that candidate pair

    TimP: but then what happens when it SHOULD remove it - e.g.
    because it's no longer working; you don't want to prevent THAT
    default

    Sameer: Removal would be only for redundant pairs; failed
    candidates would "deleted"

    JanIvar: that seems confusing - maybe it's a bikeshedding issue

    Sameer: the UA can also send cancelable events that aren't
    systematically cancelable

    Dom: I think it's primarily a bikeshedding issue - important to
    keep separate "deleted" and "removed", possibly with better
    names

    Jared: the RFC uses "prune"

    Sameer: my initial proposal had this; we could revert to that
    … I'm hearing most support for the cancelable approach, happy
    to write a PR for that

    RESOLUTION: Write a PR for a cancelable event approach

   RtpTransport Follow-up [72]🎞︎

      [72] https://www.youtube.com/watch?v=XqYcdxWvlVw#t=5353

    [73][Slide 50]

      [73] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=50

    [74][Slide 51]

      [74] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=51

    TimP: I'm not convinced these are use cases :)

    Peter: fair - this are things that people want to do :)

    [75][Slide 52]

      [75] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=52

    [76][Slide 53]

      [76] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=53

    [77][Slide 54]

      [77] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=54

    [78][Slide 55]

      [78] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=55

    [79][Slide 56]

      [79] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=56

    Peter: Depacketization would be built-in in the jitter buffer

    [80][Slide 57]

      [80] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=57

    [81][Slide 58]

      [81] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=58

    [82][Slide 59]

      [82] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=59

    [83][Slide 60]

      [83] 
https://lists.w3.org/Archives/Public/www-archive/2023May/att-0000/WEBRTCWG-2023-05-16.pdf#page=60

    Peter: what use cases would be needed to make this proposal
    more appealing? are there other type of examples people would
    like to see?
    … how much of the gap should be filled by us vs libraries?
    … would an explainer be useful?

    Bernard: very helpful to see examples, thanks
    … how would SSRCs be handled? would that be another gap?
    … in a conference system, keeping track and routing ssrcs is a
    lot of work
    … would there be some help to manage this in the API?
    … Another question is about the depacketizer - would there be a
    generic video buffer distinct from the packetizer?

    Peter: you're highlighting that an RTP demuxer would also be
    part of the gap
    … it is indeed in the gap, it could be provided

    Bernard: it would provide an handler for a particular stream -
    that would enable handling them differently

    Peter: for the depacketizer, audio and video need different
    handling since it's so trivial in audio

    Bernard: how would audio/video sync work? I regularly get that
    question

    Peter: worth adding to the gap indeed - thanks!

    Jan-Ivar: looking at the use cases - it feels like we're
    abandoning the original WebRTC API with this, which worries me
    a bit
    … maybe we should solve time sync on the datachannel e.g. with
    timecodes
    … I'm worried that focusing on the new API means we don't solve
    it with the existing API
    … likewise, maybe we should look at exposing the same codecs as
    WebCodecs without having to use this low level API
    … This API seems to be using events (vs WhatWG Streams) and
    operating at very low level
    … I'm not sure all these use cases should or need to be solved
    with a new API
    … it feels this may be stepping on WebTransport (although of
    course WT isn't P2P)

    Peter: WT is not P2P (yet), doesn't have real-time congestion
    control (yet), doesn't interoperate with RTP endpoints (ever)
    … in terms of WebCodecs - I designed an alternative with media
    senders / receivers for the media half of RTPSender/Receiver -
    it ended up being almost a duplicate of WebCodecs
    … in terms of abandoning the WebRTC API - that's part of this
    "filling the gap" approach I'm suggesting
    … overall, I wouldn't be sad if we end up abandoning
    RTCPeerConnection because something better emerges
    … there are a lot of things that we can continue to do
    incrementally, but I don't think we're going to get to all of
    it, esp at the pace we're going

    Youenn: I've had people asking for similar features
    … for HEVC, there are some niche usages where ti would be hard
    to get UA support, and an RTPTransport would allow to fulfill
    these
    … what is the future though? would we still evolve
    RTCPeerConnection? it comes with some consistency and
    performance advantages
    … it would be interesting to see if you can get good
    performance with a WebCodecs / RTCTransport approach compared
    to RTCPC
    … An explainer would be good
    … Wrt packetizer, jitter buffer - WT apps would likely want
    something like that
    … we should check if a pure JS based approach isn't sufficient
    - this should be doable
    … we should focus on RTPTransport for P2P
    … it would still be useful to design packetizer API / jitter
    buffer API to help with protocol integration, but it should not
    be the focus

    Harald: I do want to explode the PeerConnection object in
    smaller objects
    … but I would rather concentrate in defining APIs à la
    Transform API - it defines a dividing point to split the
    encoder from the packetizer
    … I'm not happy with the API we've proposed for this and am
    trying to reshape it
    … but I think we can go faster to where we want if we make it
    possible to plug your own object into an existing
    PeerConnection
    … breakout box did a good job at that
    … breaking things apart that way that leaves working systems,
    this will allow us to get there faster

    Jared: RTPTransport makes me picture a nicely packaged
    component for SFUs
    … I would rather let people use this without having to fully
    unbundle everything
    … I'm worried by leaking API boundaries
    … like congestion window pushback where control congestion
    messages can end up telling the encoder to drop frames
    … how many of these leaky abstraction will we need to support?

    Bernard: both mediacapture transform and encoded transform use
    WHATWG streams
    … Youenn had raised issues about that usage, not all of them
    have been put to bed
    … the danger of not using Streams is likely to create issues
    when using it in workers
    … transfering individual chunks or frames to worker isn't going
    to work very well

    Youenn: FWIW, the Streams API issues are being addressed (for
    transferring ownership)

    Bernard: but not for the one-object per pipeline

    Youenn: might be the next thing worth addressing there indeed

    Peter: I'm hearing support for an incremental approach towards
    something like RTPTransport

Summary of resolutions

     1. [84]refine PR #167 based on input during the call
     2. [85]Overall support in the direction, but details need to
        be fleshed out and complexity assessed
     3. [86]Write a PR for a cancelable event approach

Received on Wednesday, 17 May 2023 08:47:15 UTC