| // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| part of $LIBRARYNAME; |
| |
| $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS { |
| |
| $if DART2JS |
| @DomName('Navigator.language') |
| String get language => JS('String', '#.language || #.userLanguage', this, |
| this); |
| $endif |
| |
| /** |
| * Gets a stream (video and or audio) from the local computer. |
| * |
| * Use [MediaStream.supported] to check if this is supported by the current |
| * platform. The arguments `audio` and `video` default to `false` (stream does |
| * not use audio or video, respectively). |
| * |
| * Simple example usage: |
| * |
| * window.navigator.getUserMedia(audio: true, video: true).then((stream) { |
| * var video = new VideoElement() |
| * ..autoplay = true |
| * ..src = Url.createObjectUrlFromStream(stream); |
| * document.body.append(video); |
| * }); |
| * |
| * The user can also pass in Maps to the audio or video parameters to specify |
| * mandatory and optional constraints for the media stream. Not passing in a |
| * map, but passing in `true` will provide a MediaStream with audio or |
| * video capabilities, but without any additional constraints. The particular |
| * constraint names for audio and video are still in flux, but as of this |
| * writing, here is an example providing more constraints. |
| * |
| * window.navigator.getUserMedia( |
| * audio: true, |
| * video: {'mandatory': |
| * { 'minAspectRatio': 1.333, 'maxAspectRatio': 1.334 }, |
| * 'optional': |
| * [{ 'minFrameRate': 60 }, |
| * { 'maxWidth': 640 }] |
| * }); |
| * |
| * See also: |
| * * [MediaStream.supported] |
| */ |
| @DomName('Navigator.webkitGetUserMedia') |
| @SupportedBrowser(SupportedBrowser.CHROME) |
| @Experimental() |
| Future<MediaStream> getUserMedia({audio: false, video: false}) { |
| var completer = new Completer<MediaStream>(); |
| var options = { |
| 'audio': audio, |
| 'video': video |
| }; |
| $if DART2JS |
| _ensureGetUserMedia(); |
| this._getUserMedia(convertDartToNative_SerializedScriptValue(options), |
| (stream) { |
| completer.complete(stream); |
| }, |
| (error) { |
| completer.completeError(error); |
| }); |
| $else |
| this._getUserMedia(options, |
| (stream) { |
| completer.complete(stream); |
| }, |
| (error) { |
| completer.completeError(error); |
| }); |
| $endif |
| return completer.future; |
| } |
| |
| $if DART2JS |
| _ensureGetUserMedia() { |
| if (JS('bool', '!(#.getUserMedia)', this)) { |
| JS('void', '#.getUserMedia = ' |
| '(#.getUserMedia || #.webkitGetUserMedia || #.mozGetUserMedia ||' |
| '#.msGetUserMedia)', this, this, this, this, this); |
| } |
| } |
| |
| @JSName('getUserMedia') |
| void _getUserMedia(options, _NavigatorUserMediaSuccessCallback success, |
| _NavigatorUserMediaErrorCallback error) native; |
| $endif |
| |
| $!MEMBERS |
| } |