我想在getUserMedia之外访问streamObject。这是代码。通常你会在成功回调中运行脚本函数,但我不这样做,因为函数 getUserMedia 被多次使用,我不想重复编码相同的函数。
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
}
}
我也尝试了下面的代码,但没有工作,因为 myCallback 首先需要流。
media:function(myCallback){
navigator.getUserMedia(
{video:true, audio:true},
function(stream){
streamObject = stream;
return streamObject;
stream.startStream(streamObject);
});
}
您可以/必须使用 Promise
,例如:
var requestDevices = {
media:function() {
return new Promise(function(resolve, reject) {
navigator.getUserMedia({ video: true, audio: true }, resolve, reject);
});
}
};
var stream = requestDevices.media();
无论在何处需要流对象:
stream.then(function(s) {
Stream.startStream(s);
});
// Somewhere else
stream.then(function(s) {
...
});
如@jib所说,较新的getUserMedia
语法原生支持Promise
,因此您只需:
var stream = navigator.mediaDevices.getUserMedia({ ... })
现在,您还需要适配器.js填充物。