- 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