package im.actor.runtime.js.webrtc.js; import im.actor.runtime.js.webrtc.MediaException; import im.actor.runtime.promise.Promise; import im.actor.runtime.promise.PromiseFunc; import im.actor.runtime.promise.PromiseResolver; public class JsStreaming { public static Promise<JsMediaStream> getUserAudio() { return getUserMedia(JsUserMediaConstraint.audioOnly()); } public static Promise<JsMediaStream> getUserVideo() { return getUserMedia(JsUserMediaConstraint.videoOnly()); } public static Promise<JsMediaStream> getUserAudioVideo() { return getUserMedia(JsUserMediaConstraint.audioVideo()); } public static Promise<JsMediaStream> getUserMedia(boolean enableAudio, boolean enableVideo) { return getUserMedia(JsUserMediaConstraint.create(enableAudio, enableVideo)); } public static Promise<JsMediaStream> getUserMedia(final JsUserMediaConstraint constraint) { return new Promise<>(new PromiseFunc<JsMediaStream>() { @Override public void exec(final PromiseResolver<JsMediaStream> resolver) { getUserMediaJs(constraint, new JsMediaCallback() { @Override public void onCreated(JsMediaStream mediaStream) { resolver.result(mediaStream); } @Override public void onError(JsUserMediaError error) { resolver.error(new MediaException(error)); } }); } }); } protected static native void getUserMediaJs(JsUserMediaConstraint constraint, JsMediaCallback callback)/*-{ $wnd.navigator.getUserMedia(constraint, function(stream) { callback.@im.actor.runtime.js.webrtc.js.JsMediaCallback::onCreated(*)(stream); }, function(error) { callback.@im.actor.runtime.js.webrtc.js.JsMediaCallback::onError(*)(error); }); }-*/; }