This page is for reference only. We are no longer onboarding new customers to Programmable Video. Existing customers can continue to use the product until December 5, 2024.
We recommend migrating your application to the API provided by our preferred video partner, Zoom. We've prepared this migration guide to assist you in minimizing any service disruption.
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 4.x is the latest Video iOS version.
Support for 3.x will cease on December 4th, 2021. This branch will only receive fixes for critical issues until that date. Check this guide when planning your migration to 4.x.
Support for 2.x will cease on January 22nd, 2021. This branch will only receive fixes for critical issues until that date.
Support for iOS SDK version 1.x ended on April 26, 2019.
To make sure your app is ready for iOS 14 please visit this page.
The Twilio Programmable Video SDKs use Semantic Versioning.
Enhancements
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.
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.6 MB | 10.8 MB |
Bug Fixes
TVIConnectOptions.networkPrivacyPolicy
was set to
TVILocalNetworkPrivacyPolicyBlockLocal
.
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.6 MB | 10.8 MB |
Bug Fixes
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.6 MB | 10.8 MB |
This release improves support for local network privacy on iOS 14.0 and iPadOS 14.0.
By default, the SDK no longer uses your local network on iOS 14 and above. Twilio Video balances privacy and performance, blocking communication routes that use your local network inappropriately in Peer-to-Peer Rooms while still ensuring a high rate of direct connections on iOS 14 devices.
If you use Peer-to-Peer Rooms then we recommend that you update your applications to this release in order to prepare for iOS 14. If you need features like multi-party video, network quality or recordings, then use Group Rooms. These Rooms use media servers provided by Twilio that are available on the public internet.
By default, Twilio Video does not access the local network on iOS 14 and above. If you want to allow Twilio Video to use the local network in a Peer-to-Peer Room then you can override the TVILocalNetworkPrivacyPolicy
.
_10let connectOptions = ConnectOptions( token: accessToken, builder {_10 // A permissions request may be triggered on iOS 14._10 builder.networkPrivacyPolicy = .allowAll_10})
If you select TVILocalNetworkPolicyAllowAll
then you must add a privacy usage description with the NSLocalNetworkUsageDescription
key in your application's .plist file.
You can find more information about network privacy in our Getting Started Guide.
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.8 MB |
Bug Fixes
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.8 MB |
API Changes
TVIError
is now defined using the
NS_ERROR_ENUM
macro which makes consuming
TVIError
objects more idiomatic in Swift, such as using in a switch/case statement.
_12func roomDidDisconnect(room: Room, error: Error?) {_12 if let error = error as? TwilioVideoSDK.Error {_12 switch error.code {_12 case .roomRoomCompletedError:_12 print ("The room completed gracefully")_12 case .participantDuplicateIdentityError:_12 print("Disconnected becasue another participant with the same identity joined.")_12 default:_12 print("Something else happened.")_12 }_12 }_12}
Bug Fixes
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.8 MB |
Enhancements
ecs.us1.twilio.com:443
API Changes
TVIIceOptions
properties are deprecated and setting them has no effect:
TVIIceOptions.abortOnIceServersTimeout
TVIIceOptions.iceServersTimeout
Bug Fixes
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.8 MB |
Bug Fixes
TVILocalVideoTrack
using VP8 simulcast does not complete. [CSDK-3433]
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.6 MB | 10.8 MB |
You can now configure how your available downlink bandwidth will be distributed among your subscribed RemoteVideoTracks by using a new optional ConnectOptions parameter bandwidthProfile. For more details and best practices, visit the Network Bandwidth Profile API guide. Here is a brief example:
_39let videoOptions = VideoBandwidthProfileOptions { builder in_39 // Minimum subscribe priority of Dominant Speaker's RemoteVideoTracks_39 builder.dominantSpeakerPriority = .high_39_39 // Maximum bandwidth (Kbps) to be allocated to subscribed RemoteVideoTracks_39 builder.maxSubscriptionBitrate = 6000_39_39 // Max number of visible RemoteVideoTracks. Other RemoteVideoTracks will be switched off_39 builder.maxTracks = 5_39_39 // Subscription mode: collaboration, grid, presentation_39 builder.mode = .presentation_39_39 // Configure remote track's render dimensions per track priority_39 let renderDimensions = VideoRenderDimensions()_39_39 // Desired render dimensions of RemoteVideoTracks with priority low._39 renderDimensions.low = VideoDimensions(width: 352, height: 288)_39_39 // Desired render dimensions of RemoteVideoTracks with priority standard._39 renderDimensions.standard = VideoDimensions(width: 640, height: 480)_39_39 // Desired render dimensions of RemoteVideoTracks with priority high._39 renderDimensions.high = VideoDimensions(width: 1280, height: 720)_39_39 builder.renderDimensions = renderDimensions_39_39 // Track Switch Off mode: .detected, .predicted, .disabled_39 builder.trackSwitchOffMode = .predicted_39}_39let bandwidthProfileOptions = BandwidthProfileOptions(videoOptions: videoOptions)_39_39// Use bandwidth profile to build the connectOptions_39let connectOptions = ConnectOptions(token: accessToken) { builder in_39 builder.bandwidthProfileOptions = bandwidthProfileOptions_39}_39_39// Connect to a Room with connectOptions_39room = TwilioVideoSDK.connect(options: connectOptions, delegate: self)
As part of the Bandwidth Profile API, you can now specify the mode to control remote video track switch off behavior. The new Track.SwitchOffMode
enum can be specified in the VideoBandwidthProfileOptions
class and can be set to one of the following:
Track.SwitchOffMode.predicted
- In this mode,
RemoteVideoTrack
s are pro-actively switched off when network congestion is predicted by the bandwidth estimation mechanism. This mode is used by default if not specified.
Track.SwitchOffMode.detected
- In this mode,
RemoteVideoTrack
s are switched off only when network congestion is detected.
Track.SwitchOffMode.disabled
- In this mode,
RemoteVideoTrack
s will not be switched off. Instead tracks will be adjusted to lower quality.
Track switch off events are provided via two additional callbacks to RemoteParticipantDelegate
.
_10extension ViewController : RemoteParticipantDelegate {_10 func remoteParticipantSwitchedOnVideoTrack(participant: RemoteParticipant,_10 track: RemoteVideoTrack) {}_10_10 func remoteParticipantSwitchedOffVideoTrack(participant: RemoteParticipant,_10 track: RemoteVideoTrack) {}_10}
While publishing a local track, you can now optionally specify it's publish priority.
_19/*_19 * Publish a local track with specified priorities._19 *_19 * In addition, local track publications now contain a priority property which reflect the priority of_19 * the published track._19 */_19let localVideoTrackPublicationOptions = LocalTrackPublicationOptions(priority: .high)_19localParticipant.publishVideoTrack(localVideoTrack, publicationOptions: localVideoTrackPublicationOptions);_19_19let localAudioPublicationOptions = LocalTrackPublicationOptions(priority: .high)_19localParticipant.publishAudioTrack(localAudioTrack, publicationOptions: localAudioPublicationOptions);_19_19let localDataPublicationOptions = LocalTrackPublicationOptions(priority: .low)_19localParticipant.publishDataTrack(localDataTrack, publicationOptions: localDataPublicationOptions);_19_19/*_19 * The publish priority is also represented in remote audio, video, and data track publications._19 */_19let publishPriority = remoteVideoTrackPublication.publishPriority
Also, the publisher's TrackPriority
for the corresponding local Track can be updated after a
track has been published.
_10localVideoTrackPublication.priority = .high
When a TVITrackPriority
is updated after the track has been published, remote participants will be alerted to the change via the [TVIRemoteParticipantDelegate remoteParticipant\:didChangePublishPriority:forAudioTrack]
, [TVIRemoteParticipantDelegate remoteParticipant\:didChangePublishPriority:forVideoTrack]
and [TVIRemoteParticipantDelegate remoteParticipant\:didChangePublishPriority:forDataTrack]
delegate methods.
_13extension ViewController : RemoteParticipantDelegate {_13 func remoteParticipantDidChangeAudioTrackPublishPriority(participant: RemoteParticipant,_13 priority: Track.Priority,_13 publication: RemoteAudioTrackPublication) { }_13_13 func remoteParticipantDidChangeVideoTrackPublishPriority(participant: RemoteParticipant,_13 priority: Track.Priority,_13 publication: RemoteVideoTrackPublication) { }_13_13 func remoteParticipantDidChangeDataTrackPublishPriority(participant: RemoteParticipant,_13 priority: Track.Priority,_13 publication: RemoteDataTrackPublication) { }_13}
Additionally, you can set a subscriber side priority for a TVIRemoteVideoTrack
.
_10/*_10 * Set a remote video track priority to HIGH. Note that this feature is only available_10 * for RemoteVideoTrack._10 */_10remoteVideoTrack.priority = .high_10_10/*_10 * Get the current remote video track priority._10 */_10let remoteVideoTrackPriority = remoteVideoTrack.priority
This signals to the media server the relative importance of the track with respect to other tracks that may be shared to the Room
. The media server takes this into account while allocating a subscribing RemoteParticipant
's bandwidth to the corresponding remote track. If you do not specify a priority, the RemoteVideoTrack.priority
property will return nil
, and the media server will use the RemoteVideoTrackPublication.publishPriority
assigned by the publisher instead.
New APIs
TVITrackPriority
for track priorities of Room.
publishPriority
of type
TVITrackPriority
in
TVIRemoteAudioTrackPublication
,
TVIRemoteVideoTrackPublication
, and
TVIRemoteDataTrackPublication
. These readonly properties fetch the priorities at which the remote Audio, Video, and Data Tracks were published.
TVILocalTrackPublicationOptions
to specify track publication options when publishing tracks via
TVILocalParticipant
.
TVILocalTrackPublicationOptions
-
[TVILocalParticipant publishAudioTrack:publicationOptions:]
[TVILocalParticipant publishVideoTrack:publicationOptions:]
[TVILocalParticipant publishDataTrack:publicationOptions:]
priority
of type
TVITrackPriority
in
TVILocalAudioTrackPublication
,
TVILocalVideoTrackPublication
and
TVILocalDataTrackPublication
classes.
[TVIRemoteParticipantDelegate remoteParticipant\:didChangePublishPriority:forAudioTrack]
,
[TVIRemoteParticipantDelegate remoteParticipant\:didChangePublishPriority:forVideoTrack]
and
[TVIRemoteParticipantDelegate remoteParticipant\:didChangePublishPriority:forDataTrack]
delegate methods.
Bug Fixes
Known Issues
TVILocalVideoTrack
using VP8 simulcast does not complete. As a workaround, disable the Track instead. [CSDK-3433]
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.6 MB | 10.8 MB |
Enhancements
-[TVIRoomDelegate room\:didFailToConnectWithError:]
method is called with
TVIErrorSignalingServerBusyError
.
_10func roomDidFailToConnect(room: Room, error: Error) {_10 let theError = error as NSError_10 if theError.domain == TwilioVideoSDK.ErrorDomain,_10 theError.code == TwilioVideoSDK.Error.signalingServerBusyError {_10 print("Twilio's signaling server cannot accept connection requests at this time.")_10 }_10}
API Changes
TVIErrorSignalingServerBusyError
TVIErrorRoomAccountLimitExceededError
TVIErrorParticipantAccountLimitExceededError
TVIErrorTrackDataTrackMessageTooLargeError
TVIErrorTrackDataTrackSendBufferFullError
TVIErrorMediaDtlsTransportFailedError
TVIErrorMediaIceRestartNotAllowedError
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.7 MB |
Enhancement
TVICameraSource
now stops the underlying AVCaptureSession during deallocation if the developer had not stopped it using one of the
stopCapture
methods. It is still suggested that the developer calls one of the
stopCapture
methods at a time that is appropriate for their application and not relying on the SDK to do it.
#445
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.7 MB |
Bug Fixes
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.7 MB |
Bug Fixes
TVILocalVideoTrack
while the Track's
TVICameraSource
(or custom
TVIVideoSource
) is still delivering frames. [ISDK-2792]
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.6 MB |
Bug Fixes
NS_SWIFT_NAME
mapping for
CameraSourceOptionsBuilder.Block
would fail.
#72
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.6 MB |
Bug Fixes
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.6 MB |
API Changes
TVIConnectOptions.networkQualityEnabled
property to
YES
when connecting to a Group Room. By default this enables network quality level changes to be reported for the Local Participant. To also receive network quality level changes for the Remote Participants, a configured
TVINetworkQualityConfiguration
object needs to be supplied to the
TVIConnectOptions.networkQualityConfiguration
property.
networkQualityLevel
property has been promoted from the
TVILocalParticipant
class to the
TVIParticipant
base class.
networkQualityLevel
property. Note, this will return TVINetworkQualityLevelUnknown
if:
TVIConnectOptions.networkQualityEnabled
property was set to
NO
OR
[TVILocalParticipantDelegate localParticipant:networkQualityLevelDidChange:]
method on your
TVILocalParticipantDelegate
will allow you to receive callbacks when the network quality level changes for the Local Participant.
[TVIRemoteParticipantDelegate remoteParticipant:networkQualityLevelDidChange:]
method on your
TVIRemoteParticipantDelegate
will allow you to receive callbacks when the network quality level changes for the Remote Participant.
_22@IBAction func connectToRoom(sender: AnyObject) {_22 let connectOptions = ConnectOptions(token: accessToken) { (builder) in_22 builder.isNetworkQualityEnabled = true_22 builder.networkQualityConfiguration = NetworkQualityConfiguration(localVerbosity: .minimal,_22 remoteVerbosity: .minimal)_22 builder.roomName = "my-room"_22 }_22_22 room = TwilioVideoSDK.connect(options: connectOptions, delegate: self)_22}_22_22..._22_22// MARK: LocalParticipantDelegate_22func localParticipantNetworkQualityLevelDidChange(participant: LocalParticipant, networkQualityLevel: NetworkQualityLevel) {_22 print("Local Participant Network Quality Level Changed: \(networkQualityLevel)")_22}_22_22// MARK: RemoteParticipantDelegate_22func remoteParticipantNetworkQualityLevelDidChange(participant: RemoteParticipant, networkQualityLevel: NetworkQualityLevel) {_22 print("Remote Participant (\(participant.identity)) Network Quality Level Changed: \(networkQualityLevel)")_22}
Enhancements
Bug Fixes
TVIIceCandidatePairStats.availableOutgoingBitrate
is populated with the available send bandwidth when publishing Tracks.
TVIIceCandidatePairStats.availableIncomingBitrate
is populated with the available receive bandwidth when subscribing to Tracks in a Group Room.
TVIRoom
while the TCP handshake for the signaling connection is in progress.
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.6 MB |
Enhancements
-[TVIVideoSource requestOutputFormat:]
by caching the cropping attributes.
TVICameraSourceOptions.rotationTags
, which defaults to TVICameraSourceOptionsRotationTagsKeep
. You might want to set this option to TVICameraSourceOptionsRotationTagsRemove
in order to:
AVAssetWriter
for recordings without worrying about transformation matrices
TVICameraSourceOptionsRotationTagsRemove
, we see significant improvement with the H.264 video codec on modern iPhones.
TVICameraSourceOptionsRotationTagsRemove
, we see small improvement with the VP8 video codec (non-simulcast) on modern iPhones.
Codec | TVICameraSourceOptionsRotationTagsKeep (Average CPU) (*) | TVICameraSourceOptionsRotationTagsRemove (Average CPU) (*) |
---|---|---|
H.264 | 7.3% | 6.75% (**) |
VP8 | 12.8% | 12.7% (**) |
_10* Tested on iPhone 11_10* Group Room_10* Capture resolution, fps, encoding params: 640x480x30 @ 1200 kbps_10* Video call duration: 5 mins / run_10* Measured using Instruments_10** Load scheduled mostly on high efficiency cores, with performance cores disabled.
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.7 MB |
Bug Fixes
TVIRoom
without first calling
-[TVIRoom disconnect]
.
TVIRoom
with dominant speaker enabled.
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.7 MB |
3.0 is now generally available. Thank you for all the feedback from our beta adopters.
This release includes:
Bug Fixes
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.7 MB |
This release completes the API changes needed for Twilio Video to be fully compatible with the iOS 13.0 and iPadOS 13.0 SDKs. This release also removes support for iOS 10. Twilio Video 2.x will continue to support iOS 9.0 and later.
API Changes
TVICameraSource
can monitor
UIWindowScene
for orientation and state changes in iOS 13.0+.
TVICameraSource
and introduced the
TVICameraSourceOrientationTracker
protocol along with the
TVIUserInterfaceTracker
class.
UIWindowScene
:
_10// Track the orientation of the key window's scene._10let options = CameraSourceOptions { (builder) in_10 if let keyScene = UIApplication.shared.keyWindow?.windowScene {_10 builder.orientationTracker = UserInterfaceTracker(scene: keyScene)_10 }_10}_10let camera = CameraSource(options: options, delegate: self)
_10// Forward UIWindowScene events_10func windowScene(_ windowScene: UIWindowScene,_10 didUpdate previousCoordinateSpace: UICoordinateSpace,_10 interfaceOrientation previousInterfaceOrientation: UIInterfaceOrientation,_10 traitCollection previousTraitCollection: UITraitCollection) {_10 UserInterfaceTracker.sceneInterfaceOrientationDidChange(windowScene)_10}
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
arm64 | 4.5 MB | 10.7 MB |
API Changes
TVILocalParticipant.signalingRegion
. You can use this property to determine where your Participant connected to a Room, especially when using the default value of "gll" for
TVIConnectOptions.region
.
TVIRoom.mediaRegion
. You can use this property to determine where media is being processed in a Group Room.
TVIConnectOptionsBuilder.region
property to no longer throw an exception when an empty string is provided and instead default to
gll
.
TVIErrorSignalingConnectionError
is raised.
TVIEncodingParameters
now expresses maximum bitrates in Kilobits per second (Kbps) instead of bits per second (bps).
_10// Before_10let params = EncodingParameters(audioBitrate: UInt(64000),_10 videoBitrate: UInt(800000))
_10// After_10let params = EncodingParameters(audioBitrate: UInt(64),_10 videoBitrate: UInt(800))
Enhancements
TVIVideoView
registers for UIScene
lifecycle notifications when it is contained within a UIWindowScene
on iOS 13.0+. Rendering is permitted in the following states:
UISceneActivationStateForegroundActive
at 60 Hz
UISceneActivationStateForegroundInactive
at 30 Hz
TVIVideoView
suspends its internal
CADisplayLink
timer when it is removed from a
UIWindow
.
TVILocalDataTrack
by monitoring its send buffer. Sending too many messages, or sending single messages larger than 16 KB no longer causes the underlying channel(s) to close. These requests are ignored instead. [CSDK-3037]
Bug Fixes
TVICameraSource
might produce distorted frames after being interrupted with
AVCaptureSessionInterruptionReasonVideoDeviceInUseByAnotherClient
on iOS 13.0.
#53
TVILocalDataTrack
should no longer end up in an inconsistent state after attempting to send a message larger than 16 KB. [CSDK-3081]
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
Universal | 9.5 MB | 20.5 MB |
arm64 | 4.6 MB | 10.8 MB |
armv7 | 4.9 MB | 9.7 MB |
API Changes
TVIErrorSignalingDnsResolutionError
, which is now raised instead of TVIErrorSignalingConnectionError
in the following scenarios:
TVIConnectOptions
was invalid.
Enhancements
TVIConnectOptions.iceOptions
, and overridden Servers
Bug Fixes
TVIRoomDelegate.roomDidDisconnect()
. [CSDK-2950]
TVIPixelFormatYUV420BiPlanarFullRange
or
TVIPixelFormatYUV420BiPlanarVideoRange
formats. [ISDK-2631]
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
Universal | 9.4 MB | 21.0 MB |
arm64 | 4.4 MB | 11.2 MB |
armv7 | 4.8 MB | 9.5 MB |
Enhancements
TVILogModuleSignaling
enables logging of low level connection events at
TVILogLevelTrace
. [ISDK-2446]
Bug Fixes
Known Issues
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
Universal | 9.4 MB | 21.0 MB |
arm64 | 4.4 MB | 11.2 MB |
armv7 | 4.8 MB | 9.5 MB |
API Changes
+ [TwilioVideoSDK version]
to
+ [TwilioVideoSDK sdkVersion]
to alleviate the clash with
NSObject
's
version
method.
type
argument label for the Swift definition of
[TVICameraSource captureDeviceForPosition:type]
. In Swift, the function is now declared as
class func captureDevice(position: AVCaptureDevice.Position, deviceType: AVCaptureDevice.DeviceType) -> AVCaptureDevice?
.
Audio
. For instance
AudioFormat.AudioSampleRate8000
is now
AudioFormat.SampleRate8000
.
Audio
. For instance
AudioFormat.AudioChannelsMono
is now
AudioFormat.ChannelsMono
.
TVILocalParticipantDelegate
and
TVIRemoteParticipantDelegate
methods to follow the
did
naming convention for consistency with the other delegate methods. See the
Migrating from 2.x to 3.x
guide for more information.
Bug Fixes
Known Issues
TVILogModuleSignaling
does not produce any logging. [ISDK-2446]
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
Universal | 9.4 MB | 20.9 MB |
arm64 | 4.4 MB | 11.1 MB |
armv7 | 4.7 MB | 9.5 MB |
The 3.0 release removes support for iOS 9.0, and raises the minimum supported iOS version to 10.0. Twilio Video 2.x releases will continue to support iOS 9.0 and later.
Enhancements
TVIConnectOptions.region
property. By default, the Client will connect to the nearest signaling Server determined by
latency based routing
. Setting a value other than "gll" bypasses routing and guarantees that signaling traffic will be terminated in the region that you prefer.
_10let connectOptions = ConnectOptions(token: accessToken) { (builder) in_10 builder.region = "us1"_10 builder.roomName = "my-room"_10}_10self.room = TwilioVideoSDK.connect(with: connectOptions, delegate: self)
API Changes
TwilioVideo
Obj-C class has been renamed to
TwilioVideoSDK
to reduce possible namespace issues in Swift due to the Module containing a Type with the same name.
TVI
prefix has been removed from all Twilio Video types
TVIAudioSessionActivated()
and
TVIAudioSessionDeactivated()
methods have been removed as the Video SDK no longer needs to terminate the signaling connection when an app is backgrounded.
TVIVideoCapturer
APIs:
TVIVideoCapturer
TVICameraCapturer
TVIScreenCapturer
TVIVideoConstraints
TVILocalVideoTrack.capturer
TVILocalVideoTrack.constraints
TVILocalVideoTrack.trackWithCapturer:
TVILocalVideoTrack.trackWithCapturer:enabled:constraints:name:
TVIAudioOptions
that are no longer supported by WebRTC:
TVIAudioOptions.levelControl
TVIAudioOptions.levelControlInitialPeakLevelDBFS
TVIAudioOptionsBuilder.levelControl
TVIAudioOptionsBuilder.levelControlInitialPeakLevelDBFS
TVIVideoRenderer.optionalPixelFormats
property due to lack of use. A
TVIVideoRenderer
is expected to support any valid
TVIPixelFormat
or drop incoming frames if it can't process them.
Bug Fixes
kDefaultAVAudioSessionConfigurationBlock
to
kTVIDefaultAVAudioSessionConfigurationBlock
so that
TwilioVoice.framework
and
TwilioVideo.framework
may be used in the same application.
TVIVideoSource
, and the source's buffer pool becomes empty.
Known Issues
[TVORoomDelegate didDisconnectWithError:]
. [CSDK-2950]
TVILogModuleSignaling
does not produce any logging. [ISDK-2446]
TVILocalAudioTrack
or
TVILocalVideoTrack
might not be seen by Participants.
#34
Size Impact
Architecture | Compressed Size | Uncompressed Size |
---|---|---|
Universal | 8.9 MB | 19.3 MB |
arm64 | 4.2 MB | 10.3 MB |
armv7 | 4.5 MB | 8.7 MB |