- From: Rob Manson <roBman@mob-labs.com>
- Date: Tue, 13 Aug 2013 12:55:48 +1000
- To: public-media-capture@w3.org
+1 that would be very useful. Also, would connecting the video sink give us control over multiple displays in a similar way to multiple audio outputs? // set the output display for the window function selectVideoDisplay(sinkId) { window.sinkId = sinkId; } Combined with window.open() that would even allow us to open a new window onto a specific display. Not a major issue right now while most devices have a one-to-one mapping between window and display. But there have already been a number of mobile devices with more than one screen. roBman On 13/08/13 09:43, Justin Uberti wrote: > WG, > > With the work done on MediaStreamTrack.getSources > <http://MediaStreamTrack.getSources> (previously known as > getSourceInfos/getSourceIds), we now have a clean way to enumerate, > select, and remember audio and video input devices. However, we are not > yet able to do this for audio output devices. This is a significant > problem for scenarios where you want audio output to go to a headset > that is not the default device, e.g. a USB or Bluetooth headset. > > Note that this goes outside the bounds of WebRTC - once we have an > output device ID, we need a way to tell other HTML5 APIs, such as an > <audio/> tag or Web Audio context, to use the specified device. > Therefore locating this output device enumeration API on > MediaStreamTrack (similar to getSources) is probably not the right fit. > > We therefore propose the navigator.getMediaSinks method as an API to use > for output device enumeration, and a new HTMLMediaElement.sinkId > property to allow the ids returned by getMediaSinks to be supplied to > <audio/> and <video/> tags. (See full details below) > > getMediaSinks works overall similarly to getSources - it asynchronously > returns a list of objects that identify devices, and for privacy > purposes the .label properties are not filled in unless the user has > consented to device access through getUserMedia. > > If we like this design, it may make sense to move > MediaStreamTrack.getSources to also be on the navigator object, for > consistency. > > ---------------------------------------------------------------------------------------------- > > *New enumeration API* > > // async API, returns results through SinkInfoCallback > void navigator.getMediaSinks(SinkInfoCallback) > > // similar to SourceInfoCallback > callback SinkInfoCallback = void (sequence<SinkInfo>) > > // similar to SourceInfo > dictionary SinkInfo { > DOMString sinkId; > DOMString kind; > DOMString label; > }; > > *New API on HTMLMediaElement* > > // when set, specifies the desired audio output device to use > DOMString HTMLMediaElement.sinkId > > *Usage* > > // print out the available audio output devices on the console > function listAudioDevices() { > navigator.getMediaSinks(printAudioDevices); > } > > function printAudioDevices(sinks) { > for (var i = 0; i < sinks.length; ++i) { > if (sinks[i].kind === "audio") { > console.log(sinks[i].sinkId + " : " + sinks[i].label); > } > } > } > * > * > *// *set the audio output for the <audio/> tag with the id "audio-renderer" > function selectAudioOutput(sinkId) {* > * > **document.getElementByID("audio-renderer").sinkId = sinkId; > } > >
Received on Tuesday, 13 August 2013 02:56:15 UTC