I want to access streamObject outside the getUserMedia. Here are the codes. Normally you would run script functions inside success callback but I don't to do that because the function getUserMedia is used many times and I don't want to repeat coding same function.
var streamObject;
requestDevices = {
media:function(){
navigator.getUserMedia(
{video:true, audio:true},
function(stream){
streamObject = stream;
return streamObject //not working
});
}
};
/
stream = {
// I need the streamObject here
startStream:function(stream){
pc.addStream(streamObject);
//blah blah blah
}
}
I also tried code below, but did not work because the myCallback needs stream in the first place..
media:function(myCallback){
navigator.getUserMedia(
{video:true, audio:true},
function(stream){
streamObject = stream;
return streamObject;
stream.startStream(streamObject);
});
}
You can/must use Promise
, for example:
var requestDevices = {
media:function() {
return new Promise(function(resolve, reject) {
navigator.getUserMedia({ video: true, audio: true }, resolve, reject);
});
}
};
var stream = requestDevices.media();
Wherever you need the stream object:
stream.then(function(s) {
Stream.startStream(s);
});
// Somewhere else
stream.then(function(s) {
...
});
As @jib said, newer syntax for getUserMedia
supports Promise
natively, so you can just:
var stream = navigator.mediaDevices.getUserMedia({ ... })
For now you will also need the adapter.js polyfill.