The Twilio Programmable Video SDKs use Semantic Versioning. Twilio supports version N-1 for 12 months after the first GA release of version N. We recommend you upgrade to the latest version as soon as possible to avoid any breaking changes. Version 3.x is the latest Video iOS version.
Support for 2.x will cease on October 4th, 2020. This branch will only receive fixes for critical issues until that date. Check this guide when planning your migration to 3.x.
Support for iOS SDK version 1.x ended on April 26, 2019.
The Twilio Programmable Video SDKs use Semantic Versioning.
API Changes
TVIErrorParticipantSessionLengthExceededError
(53216) is added to support configurable participant session limit.Bug Fixes
Known Issues
.xcframeworks
as documented here. Once Carthage supports binary .xcframeworks
, Carthage distribution will be re-added.LocalAudioTrack
or LocalVideoTrack
might not be seen by Participants. #34Architecture | Compressed Size | Uncompressed Size |
---|---|---|
Universal | 10.0 MB | 21.4 MB |
arm64 | 4.8 MB | 11.3 MB |
armv7 | 5.2 MB | 10.1 MB |
Enhancements
API Changes
Known Issues
.xcframeworks
as documented here. Once Carthage supports binary .xcframeworks
, Carthage distribution will be re-added.LocalAudioTrack
or LocalVideoTrack
might not be seen by Participants. #34Architecture | Compressed Size | Uncompressed Size |
---|---|---|
Universal | 10.0 MB | 21.4 MB |
arm64 | 4.8 MB | 11.3 MB |
armv7 | 5.2 MB | 10.1 MB |
Bug Fixes
Known Issues
.xcframeworks
as documented here. Once Carthage supports binary .xcframeworks
, Carthage distribution will be re-added.LocalAudioTrack
or LocalVideoTrack
might not be seen by Participants. #34Architecture | Compressed Size | Uncompressed Size |
---|---|---|
Universal | 10.0 MB | 21.4 MB |
arm64 | 4.8 MB | 11.3 MB |
armv7 | 5.2 MB | 10.1 MB |
This release adds support for Apple Silicon arm64 Macs, updates WebRTC and modernizes our use of several WebRTC APIs. Thank you for your feedback on 4.6.0-beta1 and for your interest in Apple Silicon development.
Features
TwilioVideo.xcframework
now supports the simulator on Apple Silicon arm64 Macs. #144
Enhancements
Room.getStats()
by adopting the W3C standardized RTC stats APIAPI Changes
RemoteParticipantDelegate.onAudioTrackSubscribed()
and RemoteParticipantDelegate.onVideoTrackSubscribed()
is not strictly guaranteed. In this release the ordering of these callbacks may be different when compared to previous releases.LocalVideoTrackStats.framesEncoded
now reflects the total number of frames encoded for a simulcast track.Bug Fixes
Room.getStats()
where block callbacks could sometimes be significantly delayed. [CSDK-3475]twilio-video.js
when publishing media in Peer-to-Peer or WebRTC Go Rooms. #931Known Issues
.xcframeworks
as documented here. Once Carthage supports binary .xcframeworks
, Carthage distribution will be re-added.LocalAudioTrack
or LocalVideoTrack
might not be seen by Participants. #34Architecture | Compressed Size | Uncompressed Size |
---|---|---|
Universal | 10.0 MB | 21.4 MB |
arm64 | 4.8 MB | 11.3 MB |
armv7 | 5.2 MB | 10.1 MB |
This release contains a significant update to the Bandwidth Profile API. It allows for more efficient use of bandwidth and CPU in multi-party applications. In addition it provides developers with more dynamic control over which video tracks are delivered to the client and the preferred video resolution of the tracks. These capabilities are provided via the Client Track Switch Off Control and Video Content Preferences settings.
Existing Bandwidth Profile settings will continue to function as before, however we recommend developers update their Bandwidth Profile settings to make use of these new capabilities at their earliest convenience.
RemoteVideoTrack
is received or not. Client Track Switch Off Control has two modes of operation:
RemoteVideoTrack.switchOff()
/ switchOn()
methods.maxTracks
property to limit the number of tracks visible, you should migrate to using clientTrackSwitchOffControl
to take advantage of this feature.RemoteVideoTrack
. Video content preferences has two modes of operation:
RemoteVideoTrack
rendered by a VideoView
with larger dimensions will get a higher quality video compared to a RemoteVideoTrack
rendered by a VideoView
with smaller dimensions.RemoteVideoTrack.setContentPreferences()
.renderDimensions
property, you should migrate to using contentPreferencesMode
to take advantage of this feature.Both of these features are available in Group Rooms and are enabled by default if your application specifies BandwidthProfileOptions during connect.
1let connectOptions = ConnectOptions(token: accessToken) { (builder) in2builder.bandwidthProfileOptions = BandwidthProfileOptions(3videoOptions: VideoBandwidthProfileOptions { builder in4// Use "auto" default. Be sure to remove "maxTracks" and "renderDimensions".5}6)7}89let room = TwilioVideoSDK.connect(options: connectOptions, delegate: self)
If you don't want the SDK to automatically switch on/off RemoteVideoTracks
then specify ClientTrackSwitchOffControl.manual
and VideoContentPreferencesMode.manual
instead.
1let connectOptions = ConnectOptions(token: accessToken) { (builder) in2builder.bandwidthProfileOptions = BandwidthProfileOptions(3videoOptions: VideoBandwidthProfileOptions { builder in4builder.clientTrackSwitchOffControl = .manual5builder.contentPreferencesMode = .manual6}7)8}910let room = TwilioVideoSDK.connect(options: connectOptions, delegate: self)
Participants that connect with ClientTrackSwitchOffControl.manual
can request which RemoteVideoTracks
are switched on or off.
1func didSubscribeToVideoTrack(videoTrack: RemoteVideoTrack,2publication: RemoteVideoTrackPublication,3participant: RemoteParticipant) {4if participant.identity != "Bob" {5videoTrack.switchOff()6}7}
Subscribers that connect with VideoContentPreferencesMode.manual
can request which resolution they prefer to receive RemoteVideoTracks
in.
1func didSubscribeToVideoTrack(videoTrack: RemoteVideoTrack,2publication: RemoteVideoTrackPublication,3participant: RemoteParticipant) {4videoTrack.setContentPreferences(VideoContentPreferences { builder in5builder.renderDimensions = VideoDimensions(width: 320, height: 240)6})7}
VideoBandwidthProfileOptions.maxTracks
property is now deprecated and will raise a warning when set. Calling RemoteVideoTrack.switchOn()
or RemoteVideoTrack.switchOff()
after setting maxTracks
is not allowed and will raise an exception.VideoBandwidthProfileOptions.renderDimensions
property is now deprecated and will raise a warning when set. Calling RemoteVideoTrack.setContentPreferences()
after setting renderDimensions
is not allowed and will raise an exception.Room
was not available right after the RoomDelegate.roomDidConnect(room:)
delegate was invoked. [VIDEO-4616]TwilioVideo.xcframework
does not currently support the simulator on Apple Silicon arm64 Macs..xcframeworks
as documented here. Once Carthage supports binary .xcframeworks
, Carthage distribution will be re-added.LocalAudioTrack
or LocalVideoTrack
might not be seen by Participants. #34Enhancements
RoomDelegate.participantDidConnect()
delegate method is invoked when a RemoteParticipant
connects to the Room and publishes at least one Track.RoomDelegate.participantDidDisconnect()
delegate method is invoked when a RemoteParticipant
disconnects from the Room or unpublishes all of its Tracks.RemoteParticipant
unpublishes all of its tracks (resulting in the RoomDelegate.participantDidDisconnect()
delegate method being invoked) and later republishes a track, a new RemoteParticipant
object will be provided in the subsequent RoomDelegate.participantDidConnect()
delegate method invocation with the same Participant Sid as before.ParticipantMaxTracksExceededError
unless one or more published Tracks is unpublished.Bug Fixes
onNetworksChanged
callback while network monitor was being destroyed.Known Issues
TwilioVideo.xcframework
does not currently support the simulator on Apple Silicon arm64 Macs..xcframeworks
as documented here. Once Carthage supports binary .xcframeworks
, Carthage distribution will be re-added.LocalAudioTrack
or LocalVideoTrack
might not be seen by Participants. #34Architecture | Compressed Size | Uncompressed Size |
---|---|---|
Universal | 9.7 MB | 20.7 MB |
arm64 | 4.7 MB | 11.0 MB |
armv7 | 5.0 MB | 9.7 MB |
API Changes
CameraSource.Error.cameraPermissionDenied
Bug Fixes
CameraSouce.startCapture()
now properly raises the CameraSource.Error.cameraPermissionDenied
error when attempting to start capturing the camera when a user has declined the camera permissions.Known Issues
TwilioVideo.xcframework
does not currently support the simulator on Apple Silicon arm64 Macs..xcframeworks
as documented here. Once Carthage supports binary .xcframeworks
, Carthage distribution will be re-added.LocalAudioTrack
or LocalVideoTrack
might not be seen by Participants. #34Architecture | Compressed Size | Uncompressed Size |
---|---|---|
Universal | 9.6 MB | 20.4 MB |
arm64 | 4.6 MB | 10.9 MB |
armv7 | 4.9 MB | 9.5 MB |
Enhancements
API Changes
VideoTrack.addRenderer()
multiple times with the same VideoRenderer
now throws a helpful NSInvalidArgumentException
instead of firing NSAssert
.Known Issues
TwilioVideo.xcframework
does not currently support the simulator on Apple Silicon arm64 Macs..xcframeworks
as documented here. Once Carthage supports binary .xcframeworks
, Carthage distribution will be re-added.LocalAudioTrack
or LocalVideoTrack
might not be seen by Participants. #34Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
Universal | 9.6 MB | 20.4 MB |
arm64 | 4.6 MB | 10.9 MB |
armv7 | 4.9 MB | 9.5 MB |
Enhancements
VideoView
is not supported.Bug Fixes
Known Issues
TwilioVideo.xcframework
does not currently support the simulator on Apple Silicon arm64 Macs..xcframeworks
as documented here. Once Carthage supports binary .xcframeworks
, Carthage distribution will be re-added.LocalAudioTrack
or LocalVideoTrack
might not be seen by Participants. #34Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.6 MB | 10.8 MB |
Bug Fixes
Distribution Changes
Acknowledgements.md
since Poco is no longer a dependencyKnown Issues
TwilioVideo.xcframework
does not currently support the simulator on Apple Silicon arm64 Macs..xcframeworks
as documented here. Once Carthage supports binary .xcframeworks
, Carthage distribution will be re-added.TVILocalAudioTrack
or TVILocalVideoTrack
might not be seen by Participants. #34Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.6 MB | 10.8 MB |
Enhancements
.xcframework
. The .xcframework
package includes the .dSYM
and .bcsymbolmap
files to allow developers to symbolicate crash reports.Room
using AppScreenSource
. The Video SDK uses ReplayKit internally for in-app screen capture. AppScreenSource
conforms to VideoSource
and uses RPScreenRecorder
to capture video of your app's screen. Here is a brief example:1if let source = AppScreenSource(), let track = LocalVideoTrack(source: source) {2room.localParticipant?.publishVideoTrack(track)3source.startCapture()4}
TVIOpusCodec
class now has a new initializer [TVIOpusCodec initWithDtxEnabled:]
and a property dtxEnabled
.TVIParticipantState
enumeration.TVIParticipant.state
property.[TVIRoomDelegate room:participantIsReconnecting:]
and [TVIRoomDelegte room:participantDidReconnect:]
to TVIRoomDelegate
. These callbacks will be raised when a TVIRemoteParticipant
is attempting to reconnect to a room due to a signaling network interruption. NOTE: It can take up to 15 seconds for our signaling backend to detect that a RemoteParticipant's connection has been disrupted due to a network degradation or handoff.isRecording
property in TVIRoom
now accurately reflects the current recording state of the TVIRoom
. In the previous versions of the SDK, isRecording
could return false positives. In TVIRoomDelegate
the roomDidStartRecording
and roomDidStopRecording
callbacks will now be invoked when recording for at least a single track in the TVIRoom
has begun and ended respectively.API Updates
AppScreenSource
to control video capture of your app's screen.TVIRemoteParticipant.connected
property in favor of TVIParticipant.state
.Removed the following deprecated APIs
VideoView.RenderingType
[VideoView initWithFrame:delegate:renderingType:renderingType]
abortOnIceServersTimeout
and iceServersTimeout
properties from IceOptions
and IceOptionsBuilder
.Distribution Changes
Known Issues
TwilioVideo.xcframework
does not currently support the simulator on Apple Silicon arm64 Macs..xcframeworks
as documented here. Once Carthage supports binary .xcframeworks
, Carthage distribution will be re-added.TVILocalAudioTrack
or TVILocalVideoTrack
might not be seen by Participants. #34TVIRoom
.Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.6 MB | 10.8 MB |