如何 return 从 getUserMedia 流式传输对象
How to return stream object from getUserMedia
我想在 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);
});
}
您can/must使用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({ ... })
现在您还需要 adapter.js polyfill。
我想在 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);
});
}
您can/must使用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({ ... })
现在您还需要 adapter.js polyfill。