We are very close to releasing the 1.0.0 APIs. This release includes a number of simplifications to the twilio-video APIs, namely
-
The Client class has been removed. Instead of constructing a Client using an Access Token and then calling
connect
on it, you can simply callconnect
and pass it an Access Token directly. For example,const { connect } = require('twilio-video'); const room = await connect('your-token');
Or, if using browser globals,
const room = await Twilio.Video.connect('your-token');
-
The Media and LocalMedia classes have been removed. Although the Media and LocalMedia classes provided some convenience methods for automatically attaching and detaching Tracks from the DOM as they were added and removed, these APIs got in the way whenever you wanted to do something more interesting with the Tracks. Therefore, the
audioTracks
andvideoTracks
collections as well as theaddTrack
andremoveTrack
methods have been moved up to the Participant and LocalParticipant levels. You should update your code to use the Track-levelattach
anddetach
APIs exclusively. For example,function handleParticipant(participant) { participant.tracks.forEach(addTrack); participant.on('trackAdded', addTrack); } function addTrack(track) { const element = track.attach(); document.body.appendChild(element); }
-
The
getLocalMedia
method has also been replaced with a new method,createLocalTracks
. This method behaves likegetLocalMedia
did, except it returns an Array of LocalTracks.
Refer to the API docs for more information.
- Tracks now indicate whether or not they have stopped with the
isStopped
property. They also emit a new event, "stopped". Participant and Room re-emit this event as "trackStopped". - LocalAudioTracks and LocalVideoTracks can now be constructed directly from MediaStreamTracks.
- Fixed a bug where the twilio-video.js, when used in Firefox, would not raise a "trackAdded" event on a remote Participant if they added, removed, and added back the same Track
- Fixed a bug where round-trip times reported by
getStats
were accidentally multiplied by 1000 - Fixed a bug where certain identities with non-ASCII characters could not be used (for example, multiple ":" characters were causing failures)
- Fixed a bug where minified builds of twilio-video.js could not be used on web pages that did not specify a charset
- Fixed an EventEmitter leak in StateMachine that was warning in the console
- We've begun formalizing our error codes. They are divided up into Signaling
(530xx), Room (531xx), Participant (532xx), Track (533xx), Media (534xx), and
Configuration (535xx) subranges. Instances of TwilioError will now carry a
numeric
code
belonging to one of these ranges.
- The way that twilio-video.js's dependencies, including some of twilio-video.js's transitive dependencies, were declared caused problems with bundlers like Webpack. This resulted in issues trying to use twilio-video.js in certain configurations with Angular, Meteor, and React apps. This release updates those dependencies.
- Improved logging for Client, Room, Participant, Media, and Track.
- Added a Room-level
isRecording
property which indicates whether or not the Room is being recorded (if recording is not currently enabled for your account, this property will always be false) - Added Room-level "recordingStarted" and "recordingStopped" events which indicate when recording is started or stopped on the Room (if recording is not currently enabled for your account, these events will never fire)
- Added the ability to pass MediaTrackConstraints to LocalMedia's
addCamera
andaddMicrophone
methods - Added a Room-level
getStats
method for returning Track-level media statistics
- Worked around a Promise-subclassing issue in CancelablePromise that caused twilio-video.js to fail when used with Zone.js (and Angular)
- Fixed a bug where, if a VideoTrack belonged to a MediaStream containing multiple VideoTracks, the attach method might render a different VideoTrack than intended
This release was created to remove a file that was accidentally uploaded to the NPM registry. The file included credentials (API Keys) to a test Twilio account and were revoked when discovered.
In this release, the SDK has been renamed twilio-video.js and replaces the earlier twilio-conversations.js. twilio-video.js offers the following improvements over twilio-conversations.js:
- Conversations have been replaced with Rooms, which provide a simpler call model.
- OutgoingInvites and IncomingInvites are no longer required to join a video session, and they have been removed from the API.
- A new subclass of Participant, LocalParticipant, has been added.
All other classes including Client, Participant, Media, and Tracks remain
relatively unchanged. If you are loading twilio-video.js in the browser using
a <script> tag, the exported global has been renamed to Twilio.Video
.
- Use
connect
to connect to a Room. This method replaces theinviteToConversation
method from twilio-conversations.js. - You can
connect
to a Room as its sole Participant. - You can specify the name of the Room you want to
connect
to by setting theto
parameter.
Refer to the API docs for the full set of features.
- A number of stability improvements have been made in the transition away from invites towards a Room-based model.
- Fixed a bug where "trackAdded" events would not be raised for a Participant
invited with
inviteToConversation
in Firefox (JSDK-932). - Fixed a bug where
isStarted
was always false and "trackStarted" events were never raised in Firefox (JSDK-950).
- Reverted a change that altered the expected behavior of IncomingInvite: The caller will now auto-cancel the invite after 50 seconds, at which point the callee's IncomingInvite will emit the "canceled" event
- Fixed a bug where IncomingInvite was never emitting the "failed" event
- Fixed Track playback on Chrome 48 for Android (JSDK-661)
- Fixed a bug that duplicated Track events when the same LocalTrack was removed and readded (JSDK-574)
- Fixed a strict mode error that affected Safari (JSDK-692)
- Added the ability to access the version of the SDK from
Twilio.Conversations.version
(orConversations.version
in Node) - Improved Track playback support for Chrome on Android (JSDK-582)
- twilio-common.js is now bundled in distribution builds of the SDK. You no longer need to include it in a separate <script> tag (JSDK-626).
- Silenced deprecation warnings in Firefox regarding
getUserMedia
and ICE serverurls
(JSDK-642)
- Added the ability to set
iceTransportPolicy
in the Client constructor, in theinviteToConversation
method, and in IncomingInvite'saccept
method; in supported browsers, this property allows you to restrict ICE candidates to relay-only (JSDK-424); note that this property only works in Chrome at the time of release - Added the ability to set
iceServers
in the Client constructor, in theinviteToConversation
method, and in IncomingInvite'saccept
method; setting this property overrides anyiceServers
returned by the Network Traversal Service, as configured in your Client's Configuration Profile (JSDK-589) - Explicitly disabling both audio and video in
localStreamConstraints
now bypassesgetUserMedia
and instead returns a LocalMedia object without AudioTracks or VideoTracks; use this to create "one-way" Conversations (JSDK-604)
- Fixed a bug where, if two Clients were listening with the same identity and another Client called that identity, both Clients appeared to connect to the Conversation even though only one should have (JSDK-588)
- Silenced an "Uncaught (in promise)" error in the browser console when an OutgoingInvite fails (JSDK-608)
- Fixed a bug where calling
invite
on a disconnected Conversation raised an an exception (JSDK-605)
- Fixed a regression in
removeTrack
and related methods which caused the "trackRemoved" event not to be propagated to remote Participants (JSDK-512) - Fixed a bug where
getUserMedia
would be called multiple times when accepting an IncomingInvite without a LocalMedia object; in Firefox, this could result in failing to join a Conversation; now,getUserMedia
will be called at most once (JSDK-439) - Removed a postinstall script that caused failures with NPM 3.
- Fixed a bug where a LocalTrack removed with
removeTrack
could not be added back withaddTrack
(JSDK-548) - Fixed a bug where calling
stop
on a LocalTrack caused it to be removed (JSDK-549)
- The LocalMedia
removeCamera
andremoveMicrophone
methods now accept an optionalstop
parameter, similar toremoveStream
andremoveTrack
.
- Silenced an "Uncaught (in promise)" error in the browser console when Clients either rejected an IncomingInvite or canceled an OutgoingInvite (JSDK-420)
- Fixed a bug where calling
reject
on an IncomingInvite to a multi-party Conversation would not notify each Participant that the Client had rejected (JSDK-436) - Fixed a bug where calling
removeStream
orremoveTrack
on a LocalMedia object would not stop the Track (JSDK-443) - Fixed a bug where the
isEnded
property of a Track was always false, even after callingstop
(JSDK-444)
Added twilio-conversations.js to NPM and Bower.
- The Client identity string is now always properly URL encoded prior to registration with the Conversations service
- The "participantFailed" event is reliably raised in relevant failure scenarios
- Failed calls to the browser's
getUserMedia
method are now propogated reliably during the creation of anOutgoingInvite
or whenIncomingInvite#accept
is called.
- twilio-conversations.js will now auto-stop any MediaStreamTracks it gathers
for you as part of
inviteToConversation
oraccept
-ing an IncomingInvite when you disconnect from a Conversation. You can bypass this behavior by passing in your own local MediaStream or LocalMedia object (JSDK-412) - The "participantFailed" event emitted by the Conversation is now parameterized by a Participant object instead of merely the failed Participant's identity.
- Added the ability to remove a MediaStream from a LocalMedia object
- Added the ability to specify whether or not to stop the LocalTrack when removing it from a LocalMedia object (the default remains to stop the LocalTrack)
- Fixed a bug where detaching Media or a Track could raise an uncaught error (JSDK-375)
- Fixed a bug which made it impossible to add or remove LocalAudioTracks and LocalVideoTracks and have it reflected to remote Participants (JSDK-411)