Skip to content

Releases: QuickBlox/quickblox-javascript-sdk

2.12.8

04 Aug 14:24

Choose a tag to compare

Fixes

WebRTC module

  • Do not end a p2p group call if initiator hung up
  • Do not start waitingReconnectTimer if it was created previously

2.12.7

21 Nov 12:35

Choose a tag to compare

Fixes

WebRTC module

"onCallListener" was called several times with same session

2.12.6

11 Oct 12:44

Choose a tag to compare

Ability to disable auto-reject if user already in call added.
To disable auto-reject in config set autoReject property to false(Default is true).
Example:

webrtc: {
    answerTimeInterval: 60,
    autoReject: false,
    incomingLimit: 1,
    dialingTimeInterval: 5,
    disconnectTimeInterval: 30
}

2.12.5

13 Sep 10:59

Choose a tag to compare

Dependencies updated;
Bugfix;

2.12.4

12 Aug 07:30

Choose a tag to compare

Bug with integration with node.js fixed;

2.12.3

22 Jul 14:15
665da98

Choose a tag to compare

Dependencies updated:
"lodash": ">=4.17.13",
"lodash.template": ">=4.5.0",
"handlebars": ">=4.1.0",
"js-yaml": ">=3.13.1",
"marked": "^0.6.0",
"ws": ">=3.3.1",
"node.extend": ">=1.1.7",
"cached-path-relative": ">=1.0.2",
"karma": "^4.2.0"

2.12.2

27 Nov 17:56

Choose a tag to compare

An issue with video calls in Safari 11 fixed.

2.12.1

04 Nov 09:26

Choose a tag to compare

  • Fix of security vulnerabilities in dependencies

2.12.0

24 May 13:15
ffe19a4

Choose a tag to compare

Removed:

  • Remove unused samples (users, roster). All cases will be shown at chat, data, webrtc samples;
  • The window.navigator.onLine check was remove (the check was move to the WebRTC Sample); To make sure that a client has internet connecteion before make a call;

Fixed:

  • during the call (WebRTC session) the WebRTC Sample will be able to switch to other camera, if it is possible and would stop call if all media devices were unplugged;
  • bugs were fixed when user doesn't allow permanent permissions for getUserMedia;

Added:

  • Ability to restore connect to chat by time interval after disconnect, if it wasn't voluntary (Added for node-xmpp-client and nativescript-xmpp-client, updated for Strophe.js client).
    Add a property chatReconnectionTimeInterval to config, by default is 5 sec;
    QB.chat.disconnect() stops reconnection actions;
  • The call of QB.chat.connect(params, callback) when chat is in connecting state (the connection one by one) was blocked, the callback funtion will return an error ('Status.REJECT - The connection is still in the Status.CONNECTING state');
  • QB.webrtc.onDevicesChangeListener() was added - the listener that is called when a media device has been plugged or unplugged;
  • An ability to change audio and video tracks was added (switch cameras), use the method webRTCSession.switchMediaTracks(deviceIds, cb).
    Supported and tested on Firefox from v.60.

Here is code snippet how to replace audio/video tracks:

var switchMediaTracksBtn = document.getElementById('confirmSwitchMediaTracks');

var webRTCSession = QB.webrtc.createNewSession(params);

QB.webrtc.getMediaDevices('videoinput').then(function(devices) {
    var selectVideoInput = document.createElement('select'),
        selectVideoInput.id = 'videoInput',
        someDocumentElement.appendChild(selectVideoInput);

    if (devices.length > 1) {
        for (var i = 0; i !== devices.length; ++i) {
            var device = devices[i],
                option = document.createElement('option');

            if (device.kind === 'videoinput') {
                option.value = device.deviceId;
                option.text = device.label;
                selectVideoInput.appendChild(option);
            }
        }
    }
}).catch(function(error) {
    console.error(error);
});

QB.webrtc.getMediaDevices('audioinput').then(function(devices) {
    var selectAudioInput = document.createElement('select'),
        selectAudioInput.id = 'audioInput',
        someDocumentElement.appendChild(selectAudioInput);

    if (devices.length > 1) {
        for (var i = 0; i !== devices.length; ++i) {
            var device = devices[i],
                option = document.createElement('option');

            if (device.kind === 'audioinput') {
                option.value = device.deviceId;
                option.text = device.label;
                selectAudioInput.appendChild(option);
            }
        }
    }
}).catch(function(error) {
    console.error(error);
});

switchMediaTracksBtn.onclick = function(event) {
    var audioDeviceId = document.getElementById('audioInput').value || undefined,
        videoDeviceId = document.getElementById('videoInput').value || undefined,
        deviceIds = {
            audio: audioDeviceId,
            video: videoDeviceId,
        };

    var callback = function(error, stream) {
            if (err) {
                console.error(error);
            } else {
                console.log(stream);
            }
         };

    // Switch media tracks in audio/video HTML's element (the local stream)
    // replace media tracks in peers (will change media tracks for each user in WebRTC session)
    webRTCSession.switchMediaTracks(deviceIds, callback);
}

2.11.0

12 Apr 12:43
af86e55

Choose a tag to compare

New:

  • Add header 'QB-OS' in all API requests for improving analytics;

Updated:

  • Encode body of all API requests;
    Encode based on this https://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters;

  • Rework muc.join method:

    • Rework putting parameters of the muc.join method. Now could pass jid or id of a dialog;
    • Now uses Node.js callbacks approach instead of a returned stanza if you pass 2 arguments to the callback function. If you pass 1 arguments you will get stanza element as before;
QB.chat.muc.join(dialogId, function(error, response) {
   if(error) {
      console.log('Error is null when all is Ok');
  }

  console.log(`response.dialogId` is always contains in response);
});
  • QB.webrtc.onCallStatsReport(session, userId, stats, error) will return new (uptaded) stats:
stats = {
    local: {
        audio: {
            bitrate: 71, // kilobits per second (kbps)
            bytesSent: 226410,
            packetsSent: 1250, 
            timestamp: 1522680935736
        },
        video: {
            frameHeight: 480,
            frameWidth: 640,
            framesPerSecond: 25.8,
            bitrate: 498,  // kilobits per second (kbps)
            bytesSent: 1438862, 
            packetsSent: 1498,
            timestamp: 1522680935736
        },
        candidate: {
            protocol: "udp"
            ip: "192.168.1.179"
            port: 51038
        }
    },
    remote: {
        audio: {
            bitrate: 47, // kilobits per second (kbps)
            bytesReceived: 148211,
            packetsReceived: 1250,
            timestamp: 1522680935736
        },
        video: {
            frameHeight: 480,
            frameWidth: 640,
            framesPerSecond: 30.4,
            bitrate: 533, // kilobits per second (kbps)
            bytesReceived: 1663716,
            packetsReceived: 1498,
            timestamp: 1522680935736
        },
        candidate: {
            protocol: "udp",
            ip: "192.168.1.179",
            port: 51908
        }
    }
}