[![W3C][1]][2] # Media Capture Task Force F2F at TPAC 2012 ## 30 Oct 2012 [Agenda][3] See also: [IRC log][4] ## Attendees Present Adam_Bergkvist, Anant_Narayanan, Cullen_Jennings_(fluffy), Dan_Burnett_(burn), Dominique_Hazael-Massieux, Eric_K_Rescorla, Giri_Mandyam, Harald_Alvestrand, JeromeMarcon, Josh_Soref, Justin_Uberti, Martin_Thomson, Matthew_Kaufman, Milan_Patel, Richard_Tibbett, Stefan_Hakansson, Timothy_Terriberry_(derf), Travis_Leithead, natasha, Jim_Barnett Regrets Chair stefanh, hta Scribe Milan, Josh_Soref ## Contents * [Topics][5] 1. [Agenda bashing][6] 2. [Constraints and settings][7] 3. [Recording][8] * [Summary of Action Items][9] * * * Date: 30 October 2012 scribe: Milan ### Agenda bashing Candidate for discussion: Handling of multiple streams Another candidate: how setting properties on one track affects derived streams another candidate: when to turn on the "green light" more candidate: fake (includes placeholder) streams stefanh: what should we remove from the agenda? anant: fingerprinting requires less than 15 ... so may as well make that zero hta: What does it mean to remove stream from PC? Answered with arrays are stupid. Dom: fingerprinting will be discussed tomorrow during plenary breakout, whose time and place will be decided during agenda building between 9:30-10:30 Travis: getTrackById() is how HTML works ... our groups needs to have multiple active video streams stefanh, perhaps we start with constraints and settings [getTrackById in HTML5][10] Travis: How about synchronization of tracks in a media stream Jim_Barnett: I have that in the recording discussion ### Constraints and settings burn: Synchronization also needs to be included in the recording discussion ... First slide ... do we support runtime settings to v stream tracks ... and what are the implications for peer connections stefanh: what kinds of changes? burn: slide 2, settings proposal [Proposal: Settings API Version 4][11] burn: focusing on points of interest to WebRTC folks ... media streams are device centric ... getUserMedia() composed of tracks specific to the device type ... tracks have relevant properties built into them ... we'll get into the specifics of the properties later ... slide 3 ... device discovery list by device type ... once a single device has been approved, all other in that class exposed anant: what about permissions? Travis: That's a good question that needs to be addressed burn: when a device goes away, a handler is fired ... constraints can be applied to set of devices ... looking for a successful path Travis: width.min and width.max instead of minwidth and maxwidth anant: why do we need a trial? ... why not just apply Travis: purpose of trial is to use same constraints as would be used live ... giving the developer the possibility for later selection anant: Trial is most useful for permission check ... this is v4 spec ... does this simply boil down to convenience? Travis: yes anant: granting access to one device doesn't extend to others even in the same class ... any extra functionality? Travis: Aside from convenience, this allows a query for the number and capabilities of devices ... which addresses the privacy concern fluffy: this is an expected user scenario +1 to dom's point ekr: Giving permission for one camera should not extend to another anant: perhaps we should wait for permissions answer scribe: Josh_Soref To clarify, what I am saying is that I don't see the relationship between being able to access a camera and being able to see the list of cameras dom: when the user is first prompted the UA can let the user select which devices should be available I think it is meant as a convenient shortcut, not as a logical relationship, ekr Josh_Soref: +1 dom: I wouldn't base my schedule on getting a clear outcome from tomorrow's meetup anant: either give list of devices up front, or don't ... simply giving the full list after a first prompt doesn't seem to achieve anything dom: it protects against drive by attacks I'm not sure that I'm a fan of having multiple permission grants to do something like multi-camera telepresence either dom: if you provide some indication of a level of trust ... I agree it's a bit flimsy, but it isn't entirely out derf: we just ad this discussion ... we changed our implementation to turn the green camera light as soon as you call getUserMedia ... before we turn on the sink ... we don't want the user to be surprised when the web page is able to turn the camera on Travis: assuming they can trust your green light derf: that's a different issue ... the problem is now, I get the stream, I have the list of devices ... I can switch to any of those cameras ... do I need to turn all of their green lights on? dom: I think it's a shortcut ... there's a distinction between green lights and chrome indicators ... the distinction between green light and chrome indicator matters here as well fluffy: re: dom ... there are two different permissions ... permission to look at the list ... permission to look at the camera dom: asking twice ... in most cases the user doesn't care fluffy: yes, but you're asking us to ask twice anant: he's saying the second permission implies the first fluffy: that's a confusing experience to the user ... click yes, you can see the list ... but before you can't dom: I don't disagree ... I don't want to explain to my mother ... I'm not quite convinced it's the right approach ... it isn't a totally random approach fluffy: there's two different permissions ... how many times do we ask user to click yes gmandyam: going back to before getUserMedia ... you have a video facing/front facing ... I have an app ... that needs use of a front facing camera ... user gave me env facing camera ... I go back to user "this app isn't going to work" ... user is prompted again ... gives front facing ... I've determined he's got two anant: how did you determine gmandyam: with a change to the stream that indicates what it is ... my proposal had the ability to ask for front facing in a constraint ... with this, you got the user to disclose both cameras ... -- this way you got the user to give the same info ... I think it's a shorter way to get to the same result Travis: before says something I don't like ... once you got the device list, it's fair game to do anything you want ... there will be a v5 that says "you can get the device list" ... but to turn it on, you use getUserMedia ... v5 is same permission requests gmandyam: existing goes through same count of requests burn: obtaining access to a media stream means you get info about the stream ... front/rear width/height [granting access to the list of devices could be optional, with a parameter in getUserMedia, with a checkbox in the authorization request] Josh_Soref: so ... my preference is than when the first call to gUM is made, the user sees a list of devices ... before I click OK on any camera I can see a preview of the camera ... if I tap on one, and it doesn't show me the correct preview, I'll click another camera ... we should try to design this that the app doesn't have to ask twice ... the could be cases where you need additional cameras ... the user selects one plus a set of other granted cameras ... the app gets the granted device with an additional list of other granted devices josh: the gent user media interface should show the user a preview windows that allows choosing the correct camera Travis: I'd implement that there was more to it than that, the idea of a multi-select for "the" camera and several other cameras was proposed ekr: my experience w/ apps is there's a need for the app to have camera switching ... hangouts ... webex ... there's a need to enumerate ... there's a question of whether there's a need for permission ... I've heard "none are needed" ... "permissions are needed" ... "implicit permissions" ... I'd vote for no permissions to enumerate ... permission to activate anant: every switch requires permissions? ekr: every new acquisition requires permission anant: Josh_Soref 's thing only works for front/back ... that doesn't work for other cases ... front/back is so useless ... cameras can rotate 360 degrees ... I think constraints are important ... you can't rely on users to pick the right device ... if fingerprinting isn't an issue, I +1 ekr ... for UCs, do you need a device name / constraints ... or just a count of video/audio ... I'd argue for minimal info front/back is useful _relative to the device frame_. That's irrespecitve of whether you can rotate any given camera 360 degrees or not. anant: they'll know about constraints when they call getUserMedia ... they can assign labels/ids - I don't care ... we-mozilla have a prototype ... where you pass device:n to get info for that device ... we use that for our own chrome adambe: fluffy, you had a good point ... an app asks, wants permission for a camera ... but you really want a list ... that's silly ... perhaps it would make sense to let the app ask to enumerate ... and then it could actually, from the list, find a camera ... and prompt the user, show self view ... I don't think previous discussion about this in WhatWG ... getting something + clicking ok ... you had to do an active selection ... in a file dialog ... you're browsing ... just clicking ok isn't really safe ... we don't want apps to request a dummy to enumerate ... I think it'll be pretty common dom: enumeration of hardware isn't the only fingerprinting issue ... there's also hardware class ... what Josh_Soref said earlier ... to link the call to getUserMedia to granting access to several cameras at once ... UI work on doing that is non trivial ... I think it's a good idea ... what adambe said, ... I want access to a camera, but also a list to other cameras on this hardware ... and have a ui for a checkbox "let this app have info about list on this device" [ Slide Travis's settings proposal v4 ] burn: specific value constraints ... instead of a setting is ... max/min together ... to give one value ... you allow max+min ... but focus is on this value ... width=value ... enumerated list = value ... different from constraints which have ranges ... or it's constraints where max=min ... settings override constraints ... it doesn't matter what was set before, you set something new ... and that's what can be adopted ... let's keep this short hta: what I liked about v4 ... I think I can see how to map them onto constraints ... so we have an underlying self consistent constraint based layer ... I didn't see the logic picture derf: or you get "pick closest value" gmandyam: is the value change async ... with a callback ... settings aren't applied async, they're sync ... I set zoom/redeye ... I immediately make the call, and don't need a callback ... we need to understand if settings are async can you set zoom atomically and immediately like that? Travis: as an implementer, when you talk to random cameras ... if you make that sync ... it's a problem ... same problem as sync file system access gmandyam: then you need to address that in v5 ... we're ok with that ... my internal guys want async [ demo of zoom taking time ] anant: white balance is a discrete value ... you might benefit from constraints and not settings ... you'll know if it fails/succeeds ... if you specify mandatory on an existing stream ... you'll get a failure callback Travis: or it turns off your camera anant: I'd expect you to call the failure callback ... not turn off the camera ... we just define that ... my feeling is we offer getUserMedia like thing on track/stream juberti: agree with anant +1 to anant, juberti burn: currently in v4 proposal that's done on the device type specific track ... that's different from getUserMedia ... you could get any new device that satisfies constraints anant: keep that juberti: camera is open to resolution X ... you specify resolution Y ... does that crop/scale? Travis: I don't know juberti: I want both richt: constraints/values in summary ... constraints are ranges ... this is about specific things ... but width/height is fishing blind ... it's a range ... settings is a responsive reaction to what's available ... it's much more focused on responding to user's hardware fluffy: +1 on anant 's proposal ... a lot of constraints aren't ranges ... I always thought they encompassed settings types ... I think we always needed to be able to change things on a track ... some may feed to camera ... or do it internally if not ... I hope they don't scale up Picture specific settings should not have to be enumerated in the RTCWeb Media Constraints doc fluffy: can you have 2 tracks cloned off eachother at different resolutions from the same camera? Travis: +1 [ Impacts on Peer Connections ] burn: settings proposal includes device-info ... not just track info ... info about what device is giving right now Travis: there are a very small number of track level additions ... width/height not coming from device ... it's mostly device burn: peer connections ... what happens ... if you have a video media stream track ... with specific width / height ... and you add it to a peer connection ... what can you expect to happen at other end ... when it arrives at other end ... is it still a video stream track ... could someone change it at the other end? ... currently. constraints in peer connection ... specific characteristics of media can be changed on the fly by browser as necessary ... as long as they continue to satisfy the constraints ... for congestion control, whatever reasons the UA wants ... how does that work w/ or not w/ settings ... then device track swapping w/in stream anant: I like removal of local-media-stream ... I think transmitter is always in control ... if you apply changes on one side ... [sender?] ... that should apply on the other side ... I think if you apply changes ... the UA can decide what to do burn: application requests change where? and where is change applied? anant: browser A getUserMedia camera ... sends camera to browser B ... browser A changes constraint for stream ... and is applied to stream seen in browser B ... on browser B ... if application there makes a constraint request change ... depends on what is asked for ... if it's a scale-down ... browser B can decide to do it ... in cases it can't ... call failure ... no device/peer connection Travis: browser B receiving stream from peer connection ... it thinks peer connection is a source ... since it doesn't own source, it can do some operations anant: yes, that's what I'm proposing ... scale down yes ... white balance maybe not? stefanh: we discussed some of this yesterday ... what should happen if you modify media stream track anant: when you specify a constraint request that violates the stream ... the stream should remain unchanged ... and call failure adambe: what if browser is doing things to keep stream alive? anant: unknown adambe: about picture device track ... will those live on their own? Travis: fuzzy in proposal ... to gauge reaction of group ... picture track could act like a video track adambe: think it's helpful if it's coupled to a video device track ... something you can feature probe ... provides extra functionality ... inheritance ... properties containing others... ... [hand waving] ... seems it'd be better as an extra feature coupled to parent +1 to what adam just suggested, PictureDevice is not a track gmandyam: webrtc says remote streams are read only ... can't do things except on sender side ... not sure what to do if receiver isn't satisfied ... how does that work ... stream is readonly if I have synthetic tracks that come from files, wouldn't picturedevice possibly represent a slide show of a folder of pictures (perhaps not encodable as video)? anant: failure callback ... browser can't make change Travis: don't you need to put it in a