0

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);

            });
      }
Kim
  • 55
  • 8

1 Answers1

1

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.

jib
  • 40,579
  • 17
  • 100
  • 158
tungd
  • 14,467
  • 5
  • 41
  • 45
  • getUserMedia [supports promises natively now](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia), so no need to wrap it. Just `return navigator.mediaDevices.getUserMedia({ video: true, audio: true });` – jib Mar 13 '16 at 18:28