如何 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。