如何从getUserMedia返回流对象

How to return stream object from getUserMedia

本文关键字:对象 返回 getUserMedia      更新时间:2023-09-26

我想在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填充物。