javascriptwebrtcquickbloxphone-call

webRTC losses stream when a phone call is answered


In the scenario where two users are connected in a video call, one of them gets a phone call and he answers the call. this blocks the ongoing webRTC stream and the call session ends.

So is there a way we can maintain both the steam as well as the call session and resume the video call once the person return on our application.

I am using QuickBlox js-Sdk to make calls.

below is the code snippet attached to initiate the call.

var userCredentials = {
      userId: 'XXXXXX',
      password: "XXXXXXX"
    };

    QB.chat.connect(userCredentials, function (error, contactList) {

      var calleesIds = [XXXXX];
      var sessionType = QB.webrtc.CallType.VIDEO;
      var session = QB.webrtc.createNewSession(calleesIds, sessionType);

      this.userAuthService.markBusy(XXXXX).subscribe(data => data);
      var mediaParams = {
        audio: true,
        video: true,
        options: {
          muted: true,
          mirror: true
        },
        elemId: "selfStream"
      };

      session.getUserMedia(mediaParams, function (err, stream) {
        if (err) {
          console.log('getUserMedia err', err);
        } else {
          console.log('getUserMedia succ', stream);

          // make call
          var extension = {};
          session.call(extension, function (error) {
            console.log('call error: ', error);
          });
        }
      });

    });

and on the other side to receive the call.

QB.webrtc.onCallListener = function (session, extension) {
          session.getUserMedia(self.getMediaParams('selfStream'), function (err, stream) {
      if (err) {
        console.log('getUserMedia err', err);
      } else {
        self.callSession.accept(self.callExt);
      }
     });
    };

I have seen the same issue in some other webApps as well, Is there a fix/workaround for this problem, thanks in advance.


Solution

  • Get around this by adding an event on the remote user's stream. If the stream is null it'll start checking for the stream every second for 2 mins if stream is not restored back in 2 mins the call will be disconnected. else I'll use the restored stream and remove the timeInterval to check every second.