Skip to contentSkip to navigationSkip to topbar
On this page

Migrating from 2.x to 3.x - iOS


This guide provides an introduction to the 3.x Programmable Video iOS SDK and a set of guidelines to migrate an application from 2.x to 3.x.


Programming Model

programming-model page anchor

The programming model has not changed from 2.x to 3.x. Refer to our 2.x migration guide for a refresher on the Video iOS SDK models.


Xcode and iOS Version Support

xcode-and-ios-version-support page anchor

Twilio Video 3.x is built with Xcode 11 and officially adds support for iOS 13 and iPadOS 13 APIs. The framework can be consumed with previous versions of Xcode. However, re-compiling Bitcode when exporting for Ad Hoc or Enterprise distribution requires the use of Xcode 11.x. 3.0 also removes support for iOS 9 and iOS 10, and raises the minimum supported iOS version to 11.0.

If your application's Deployment Target was previously set to iOS 10.3 or earlier, you will need to update it to 11.0 or greater to use the 3.x SDK.


The SDK uses a new WebSocket based signaling transport, and communicates with globally available signaling Servers over IPv4 and IPv6 networks. The TVIConnectOptions.region property has been added which allows you to specify the region of the signaling server. 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.

1
let connectOptions = ConnectOptions(token: accessToken) { (builder) in
2
builder.region = "us1"
3
builder.roomName = "my-room"
4
}
5
self.room = TwilioVideoSDK.connect(with: connectOptions, delegate: self)

If you were previously allowing traffic to signaling servers by IP address you will now need to allow the FQDN for the region that you are connecting to instead. See the Signaling Communication section of the Video IP Addresses guide for more information.


With this new WebSocket based signaling transport, some modifications may need to be made to the Access Tokens that you generate. Specifically:

  • Ensure that the AccessToken does not contain a configuration profile sid. Configuration profiles were previously deprecated and are no longer supported.
  • Set the Time-To-Live (TTL) of your AccessToken to the maximum allowed session duration, currently 14400 seconds (4 hours). This ensures that when a network loss occurs the client will be able to re-authenticate the reconnection. Note, a reconnection attempt with an expired AccessToken will result in an AccessTokenExpiredError.

TVICameraSource Orientation Tracking Changes

tvicamerasource-orientation-tracking-changes page anchor

With support for iOS 13, we now have the ability to monitor UIWindowScene based notifications, for determining the orientation of the camera for capture and preview. The TVICameraSourceOrientationTracker protocol has been added and TVICameraSourceOptionsBuilder has a new property, orientationTracker which allows you to adopt this method of tracking.

To opt into tracking based on the rotation of a UIWindowScene you must provide the scene to track when creating the TVICameraSourceOptions.

1
// Track the orientation of the key window's scene.
2
let options = CameraSourceOptions { (builder) in
3
if let keyScene = UIApplication.shared.keyWindow?.windowScene {
4
builder.orientationTracker = UserInterfaceTracker(scene: keyScene)
5
}
6
}
7
let camera = CameraSource(options: options, delegate: self)

You will also need to forward UIWindowScene events from your UIWindowSceneDelegate to keep TVIUserInterfaceTracker up to date as the scene changes.

1
// Forward UIWindowScene events
2
func windowScene(_ windowScene: UIWindowScene,
3
didUpdate previousCoordinateSpace: UICoordinateSpace,
4
interfaceOrientation previousInterfaceOrientation: UIInterfaceOrientation,
5
traitCollection previousTraitCollection: UITraitCollection) {
6
UserInterfaceTracker.sceneInterfaceOrientationDidChange(windowScene)
7
}

Removal of Deprecated Items

removal-of-deprecated-items page anchor

The deprecated TVIVideoCapturer APIs have been removed:

  • TVIVideoCapturer
  • TVICameraCapturer
  • TVIScreenCapturer
  • TVIVideoConstraints
  • TVILocalVideoTrack.capturer
  • TVILocalVideoTrack.constraints
  • TVILocalVideoTrack.trackWithCapturer:
  • TVILocalVideoTrack.trackWithCapturer:enabled:constraints:name:

Refer to our Video Source APIs document for more information on working with the Video Source APIs introduced in 2.6.0.

The TVIAudioOptions that are no longer supported by WebRTC have been removed.

  • TVIAudioOptions.levelControl
  • TVIAudioOptions.levelControlInitialPeakLevelDBFS
  • TVIAudioOptionsBuilder.levelControl
  • TVIAudioOptionsBuilder.levelControlInitialPeakLevelDBFS

The TVIAudioSessionActivated() and TVIAudioSessionDeactivated() methods have been removed as the Video SDK no longer needs to terminate the signaling connection when an application is backgrounded.

The TVIVideoRenderer.optionalPixelFormats property has been removed. TVIVideoRenderer is expected to deal with video in any of the valid TVIPixelFormats. If the renderer cannot handle a frame it should drop that frame. There will be no more automatic conversion to I420 for renderers that do not support a particular format.


Improved Objective-C API

improved-objective-c-api page anchor

In 3.x we have refactored the TVILocalParticipantDelegate and TVIRemoteParticipantDelegate methods to be consistent with the did naming convention used in the Swift APIs. Listed below are the changes to the Objective-C APIs:

TwilioVideoSDK

twiliovideosdk page anchor
New+[TwilioVideoSDK sdkVersion]
Previous+[TwilioVideo version]

TVILocalParticipantDelegate

tvilocalparticipantdelegate page anchor
New-[TVILocalParticipantDelegate localParticipant\:didPublishAudioTrack:]
Previous-[TVILocalParticipantDelegate localParticipant:publishedAudioTrack:]
New-[TVILocalParticipantDelegate localParticipant\:didFailToPublishAudioTrack:withError:]
Previous-[TVILocalParticipantDelegate localParticipant:failedToPublishAudioTrack:withError:]
New-[TVILocalParticipantDelegate localParticipant\:didPublishDataTrack:]
Previous-[TVILocalParticipantDelegate localParticipant:publishedDataTrack:]
New-[TVILocalParticipantDelegate localParticipant\:didFailToPublishDataTrack:withError:]
Previous-[TVILocalParticipantDelegate localParticipant:failedToPublishDataTrack:withError:]
New-[TVILocalParticipantDelegate localParticipant\:didPublishVideoTrack:]
Previous-[TVILocalParticipantDelegate localParticipant:publishedVideoTrack:]
New-[TVILocalParticipantDelegate localParticipant\:didFailToPublishVideoTrack:withError:]
Previous-[TVILocalParticipantDelegate localParticipant:failedToPublishVideoTrack:withError:]

TVIRemoteParticipantDelegate

tviremoteparticipantdelegate page anchor
New-[TVIRemoteParticipantDelegate remoteParticipant\:didPublishVideoTrack:]
Previous-[TVIRemoteParticipantDelegate remoteParticipant:publishedVideoTrack:]
New-[TVIRemoteParticipantDelegate remoteParticipant\:didUnpublishVideoTrack:]
Previous-[TVIRemoteParticipantDelegate remoteParticipant:unpublishedVideoTrack:]
New-[TVIRemoteParticipantDelegate remoteParticipant\:didPublishAudioTrack:]
Previous-[TVIRemoteParticipantDelegate remoteParticipant:publishedAudioTrack:]
New-[TVIRemoteParticipantDelegate remoteParticipant\:didUnpublishAudioTrack:]
Previous-[TVIRemoteParticipantDelegate remoteParticipant:unpublishedAudioTrack:]
New-[TVIRemoteParticipantDelegate remoteParticipant\:didPublishDataTrack:]
Previous-[TVIRemoteParticipantDelegate remoteParticipant:publishedDataTrack:]
New-[TVIRemoteParticipantDelegate remoteParticipant\:didUnpublishDataTrack:]
Previous-[TVIRemoteParticipantDelegate remoteParticipant:unpublishedDataTrack:]
New-[TVIRemoteParticipantDelegate remoteParticipant\:didEnableVideoTrack:]
Previous-[TVIRemoteParticipantDelegate remoteParticipant:enabledVideoTrack:]
New-[TVIRemoteParticipantDelegate remoteParticipant\:didDisableVideoTrack:]
Previous-[TVIRemoteParticipantDelegate remoteParticipant:disabledVideoTrack:]
New-[TVIRemoteParticipantDelegate remoteParticipant\:didEnableAudioTrack:]
Previous-[TVIRemoteParticipantDelegate remoteParticipant:enabledAudioTrack:]
New-[TVIRemoteParticipantDelegate remoteParticipant\:didDisableAudioTrack:]
Previous-[TVIRemoteParticipantDelegate remoteParticipant:disabledAudioTrack:]
New-[TVIRemoteParticipantDelegate didSubscribeToVideoTrack:publication:forParticipant:]
Previous-[TVIRemoteParticipantDelegate subscribedToVideoTrack:publication:forParticipant:]
New-[TVIRemoteParticipantDelegate didFailToSubscribeToVideoTrack:error:forParticipant:]
Previous-[TVIRemoteParticipantDelegate failedToSubscribeToVideoTrack:error:forParticipant:]
New-[TVIRemoteParticipantDelegate didUnsubscribeFromVideoTrack:publication:forParticipant:]
Previous-[TVIRemoteParticipantDelegate unsubscribedFromVideoTrack:publication:forParticipant:]
New-[TVIRemoteParticipantDelegate didSubscribeToAudioTrack:publication:forParticipant:]
Previous-[TVIRemoteParticipantDelegate subscribedToAudioTrack:publication:forParticipant:]
New-[TVIRemoteParticipantDelegate didFailToSubscribeToAudioTrack:error:forParticipant:]
Previous-[TVIRemoteParticipantDelegate failedToSubscribeToAudioTrack:error:forParticipant:]
New-[TVIRemoteParticipantDelegate didUnsubscribeFromAudioTrack:publication:forParticipant:]
Previous-[TVIRemoteParticipantDelegate unsubscribedFromAudioTrack:publication:forParticipant:]
New-[TVIRemoteParticipantDelegate didSubscribeToDataTrack:publication:forParticipant:]
Previous-[TVIRemoteParticipantDelegate subscribedToDataTrack:publication:forParticipant:]
New-[TVIRemoteParticipantDelegate didFailToSubscribeToDataTrack:error:forParticipant:]
Previous-[TVIRemoteParticipantDelegate failedToSubscribeToDataTrack:error:forParticipant:]
New-[TVIRemoteParticipantDelegate didUnsubscribeFromDataTrack:publication:forParticipant:]
Previous-[TVIRemoteParticipantDelegate unsubscribedFromDataTrack:publication:forParticipant:]

In 3.x we have revisited the way the Programmable Video iOS SDK is exposed in Swift to make developing Swift applications more idiomatic. Numerous changes were made across the entire surface area of the SDK which will require modifications in your current project. Among the high level changes:

  • The TVI prefix has been removed from all exposed types.
  • Many of the delegate and class function declarations have been renamed to provide better clarity of their intent.
  • The TwilioVideo class has been renamed to TwilioVideoSDK. This was necessary to allow type clashes to be resolved by qualifying the type name with the module name. For instance, if your application also declares a Room type, it will be necessary to distinguish the SDK's Room type by prefixing it with module name, TwilioVideo.Room. In previous versions of the iOS SDK, this would fail because Swift would recognize that there was a TwilioVideo class and it would attempt to find the Room type declared there. This is a known issue(link takes you to an external page) in Swift where type qualification will fail if a module contains a type of the same name.

For example, consider an application, MyApp, that contains its own implementation of a RemoteParticipant class. To differentiate between the RemoteParticipant class from the application and from the SDK, you would prefix the type definition with the module name:

1
var remoteParticipantFromApp: MyApp.RemoteParticipant?
2
var remoteParticipantFromSDK: TwilioVideo.RemoteParticipant?

Listed below are the major changes to the Swift APIs:

NewTwilioVideoSDK.Error
PreviousTVIError
NewTwilioVideoSDK.ErrorDomain
PreviouskTVIErrorDomain
NewTwilioVideoSDK.LogLevel
PreviousTVILogLevel
NewTwilioVideoSDK.LogModule
PreviousTVILogModule
NewTwilioVideoSDK.sdkVersion
PreviousTwilioVideo.version
Newclass func connect(options: ConnectOptions, delegate: RoomDelegate?) -> Room
Previousclass func connect(with options: TVIConnectOptions, delegate: TVIRoomDelegate?) -> TVIRoom
Newpublic func AudioDeviceFormatChanged(context: AudioDeviceContext)
Previouspublic func TVIAudioDeviceFormatChanged(_ context: TVIAudioDeviceContext)
Newpublic func AudioDeviceWriteCaptureData(context: AudioDeviceContext, data: UnsafeMutablePointer<Int8>, sizeInBytes: Int)
Previouspublic func TVIAudioDeviceWriteCaptureData(_ context: TVIAudioDeviceContext, _ data: UnsafeMutablePointer<Int8>, _ sizeInBytes: Int)
Newpublic func AudioDeviceReadRenderData(context: AudioDeviceContext, data: UnsafeMutablePointer<Int8>, sizeInBytes: Int)
Previouspublic func TVIAudioDeviceReadRenderData(_ context: TVIAudioDeviceContext, _ data: UnsafeMutablePointer<Int8>, _ sizeInBytes: Int)
Newpublic typealias AudioDeviceWorkerBlock = () -> Void
Previouspublic typealias TVIAudioDeviceWorkerBlock = () -> Void
Newpublic func AudioDeviceExecuteWorkerBlock(context: AudioDeviceContext, block: @escaping AudioDeviceWorkerBlock)
Previouspublic func TVIAudioDeviceExecuteWorkerBlock(_ context: TVIAudioDeviceContext, _ block: @escaping TVIAudioDeviceWorkerBlock)
Newfunc startRendering(context: AudioDeviceContext) -> Bool
Previousfunc startRendering(_ context: TVIAudioDeviceContext) -> Bool
Newfunc startCapturing(context: AudioDeviceContext) -> Bool
Previousfunc startCapturing(_ context: TVIAudioDeviceContext) -> Bool
NewAudioFormat.SampleRate8000
PreviousTVIAudioSampleRate8000
NewAudioFormat.SampleRate16000
PreviousTVIAudioSampleRate16000
NewAudioFormat.SampleRate24000
PreviousTVIAudioSampleRate24000
NewAudioFormat.SampleRate32000
PreviousTVIAudioSampleRate32000
NewAudioFormat.SampleRate44100
PreviousTVIAudioSampleRate44100
NewAudioFormat.SampleRate48000
PreviousTVIAudioSampleRate48000
NewAudioFormat.ChannelsMono
PreviousTVIAudioChannelsMono
NewAudioFormat.ChannelsStereo
PreviousTVIAudioChannelsStereo
NewAudioOptionsBuilder.Block
PreviousTVIAudioOptionsBuilderBlock
NewCameraSource.ErrorDomain
PreviouskTVICameraSourceErrorDomain
NewCameraSource.Error
PreviousTVICameraSourceError
NewCameraSource.StartedBlock
PreviousTVICameraSourceStartedBlock
NewCameraSource.StoppedBlock
PreviousTVICameraSourceStoppedBlock
Newfunc startCapture(device: AVCaptureDevice)
Previousfunc startCapture(with device: AVCaptureDevice)
Newfunc startCapture(device: AVCaptureDevice, completion: CameraSource.StartedBlock? = nil)
Previousfunc startCapture(with device: AVCaptureDevice, completion: TVICameraSourceStartedBlock? = nil)
Newfunc startCapture(device: AVCaptureDevice, format: VideoFormat, completion: CameraSource.StartedBlock? = nil)
Previousfunc startCapture(with device: AVCaptureDevice, format: TVIVideoFormat, completion: TVICameraSourceStartedBlock? = nil)
Newfunc selectCaptureDevice(_ device: AVCaptureDevice)
Previousfunc select(_ device: AVCaptureDevice)
Newfunc selectCaptureDevice(_ device: AVCaptureDevice, completion: CameraSource.StartedBlock? = nil)
Previousfunc select(_ device: AVCaptureDevice, completion: TVICameraSourceStartedBlock? = nil)
Newfunc selectCaptureDevice(_ device: AVCaptureDevice, format: VideoFormat, completion: CameraSource.StartedBlock? = nil)
Previousfunc select(_ device: AVCaptureDevice, format: TVIVideoFormat, completion: TVICameraSourceStartedBlock? = nil)
Newclass func captureDevice(position: AVCaptureDevice.Position) -> AVCaptureDevice?
Previousclass func captureDevice(for position: AVCaptureDevice.Position) -> AVCaptureDevice?
Newclass func captureDevice(position: AVCaptureDevice.Position, deviceType: AVCaptureDevice.DeviceType) -> AVCaptureDevice?
Previousclass func captureDevice(for position: AVCaptureDevice.Position, type deviceType: AVCaptureDevice.DeviceType) -> AVCaptureDevice?
Newclass func supportedFormats(captureDevice: AVCaptureDevice) -> NSOrderedSet
Previousclass func supportedFormats(for captureDevice: AVCaptureDevice) -> NSOrderedSet
Newfunc cameraSourceInterruptionEnded(source: CameraSource)
Previousfunc cameraSourceInterruptionEnded(_ source: TVICameraSource)
Newfunc cameraSourceWasInterrupted(source: CameraSource, reason: AVCaptureSession.InterruptionReason)
Previousfunc cameraSourceWasInterrupted(_ source: TVICameraSource, reason: AVCaptureSession.InterruptionReason)
Newfunc cameraSourceDidFail(source: CameraSource, error: Error)
Previousfunc cameraSource(_ source: TVICameraSource, didFailWithError error: Error)

CameraSourceOptionsBuilder

camerasourceoptionsbuilder page anchor
NewCameraSourceOptionsBuilder.Block
PreviousTVICameraSourceOptionsBuilderBlock
NewConnectOptionsBuilder.Block
PreviousTVIConnectOptionsBuilderBlock
NewDataTrackOptions.DefaultMaxPacketLifeTime
PreviouskTVIDataTrackOptionsDefaultMaxPacketLifeTime
NewDataTrackOptions.DefaultMaxRetransmits
PreviouskTVIDataTrackOptionsDefaultMaxRetransmits
NewDataTrackOptionsBuilder.Block
PreviousTVIDataTrackOptionsBuilderBlock
NewDefaultAudioDevice.IOBufferDurationSimulator
PreviouskTVIDefaultAudioDeviceIOBufferDurationSimulator
NewDefaultAudioDevice.SampleRateSimulator
PreviouskTVIDefaultAudioDeviceSampleRateSimulator
NewDefaultAudioDevice.AVAudioSessionConfigurationBlock
PreviousTVIAVAudioSessionConfigurationBlock
NewDefaultAudioDevice.DefaultAVAudioSessionConfigurationBlock
PreviouskDefaultAVAudioSessionConfigurationBlock
NewIceCandidatePairStats.State
PreviousTVIIceCandidatePairState
NewIceOptions.IceTransportPolicy
PreviousTVIIceTransportPolicy
NewIceOptionsBuilder.Block
PreviousTVIIceOptionsBuilderBlock
NewIsacCodec.SampleRate
PreviousTVIIsacCodecSampleRate

LocalParticipantDelegate

localparticipantdelegate page anchor
Newfunc localParticipantDidPublishAudioTrack(participant: LocalParticipant, audioTrackPublication: LocalAudioTrackPublication)
Previousfunc localParticipant(_ participant: TVILocalParticipant, publishedAudioTrack: TVILocalAudioTrackPublication)
Newfunc localParticipantDidFailToPublishAudioTrack(participant: LocalParticipant, audioTrack: LocalAudioTrack, error: Error)
Previousfunc localParticipant(_ participant: TVILocalParticipant, failedToPublishAudioTrack audioTrack: TVILocalAudioTrack, withError error: Error)
Newfunc localParticipantDidPublishDataTrack(participant: LocalParticipant, dataTrackPublication: LocalDataTrackPublication)
Previousfunc localParticipant(_ participant: TVILocalParticipant, publishedDataTrack: TVILocalDataTrackPublication)
Newfunc localParticipantDidFailToPublishDataTrack(participant: LocalParticipant, dataTrack: LocalDataTrack, error: Error)
Previousfunc localParticipant(_ participant: TVILocalParticipant, failedToPublishDataTrack dataTrack: TVILocalDataTrack, withError error: Error)
Newfunc localParticipantDidPublishVideoTrack(participant: LocalParticipant, videoTrackPublication: LocalVideoTrackPublication)
Previousfunc localParticipant(_ participant: TVILocalParticipant, publishedVideoTrack: TVILocalVideoTrackPublication)
Newfunc localParticipantDidFailToPublishVideoTrack(participant: LocalParticipant, videoTrack: LocalVideoTrack, error: Error)
Previousfunc localParticipant(_ participant: TVILocalParticipant, failedToPublishVideoTrack videoTrack: TVILocalVideoTrack, withError error: Error)
Newfunc localParticipantNetworkQualityLevelDidChange(participant: LocalParticipant, networkQualityLevel: NetworkQualityLevel)
Previousfunc localParticipant(_ participant: TVILocalParticipant, didChange networkQualityLevel: TVINetworkQualityLevel)
Newfunc remoteDataTrackDidReceiveString(remoteDataTrack: RemoteDataTrack, message: String)
Previousfunc remoteDataTrack(_ remoteDataTrack: TVIRemoteDataTrack, didReceive message: String)
Newfunc remoteDataTrackDidReceiveData(remoteDataTrack: RemoteDataTrack, message: Data)
Previousfunc remoteDataTrack(_ remoteDataTrack: TVIRemoteDataTrack, didReceive message: Data)

RemoteParticipantDelegate

remoteparticipantdelegate page anchor
Newfunc remoteParticipantDidPublishVideoTrack(participant: RemoteParticipant, publication: RemoteVideoTrackPublication)
Previousfunc remoteParticipant(_ participant: TVIRemoteParticipant, publishedVideoTrack publication: TVIRemoteVideoTrackPublication)
Newfunc remoteParticipantDidUnpublishVideoTrack(participant: RemoteParticipant, publication: RemoteVideoTrackPublication)
Previousfunc remoteParticipant(_ participant: TVIRemoteParticipant, unpublishedVideoTrack publication: TVIRemoteVideoTrackPublication)
Newfunc remoteParticipantDidPublishAudioTrack(participant: RemoteParticipant, publication: RemoteAudioTrackPublication)
Previousfunc remoteParticipant(_ participant: TVIRemoteParticipant, publishedAudioTrack publication: TVIRemoteAudioTrackPublication)
Newfunc remoteParticipantDidUnpublishAudioTrack(participant: RemoteParticipant, publication: RemoteAudioTrackPublication)
Previousfunc remoteParticipant(_ participant: TVIRemoteParticipant, unpublishedAudioTrack publication: TVIRemoteAudioTrackPublication)
Newfunc remoteParticipantDidPublishDataTrack(participant: RemoteParticipant, publication: RemoteDataTrackPublication)
Previousfunc remoteParticipant(_ participant: TVIRemoteParticipant, publishedDataTrack publication: TVIRemoteDataTrackPublication)
Newfunc remoteParticipantDidUnpublishDataTrack(participant: RemoteParticipant, publication: RemoteDataTrackPublication)
Previousfunc remoteParticipant(_ participant: TVIRemoteParticipant, unpublishedDataTrack publication: TVIRemoteDataTrackPublication)
Newfunc remoteParticipantDidEnableVideoTrack(participant: RemoteParticipant, publication: RemoteVideoTrackPublication)
Previousfunc remoteParticipant(_ participant: TVIRemoteParticipant, enabledVideoTrack publication: TVIRemoteVideoTrackPublication)
Newfunc remoteParticipantDidDisableVideoTrack(participant: RemoteParticipant, publication: RemoteVideoTrackPublication)
Previousfunc remoteParticipant(_ participant: TVIRemoteParticipant, disabledVideoTrack publication: TVIRemoteVideoTrackPublication)
Newfunc remoteParticipantDidEnableAudioTrack(participant: RemoteParticipant, publication: RemoteAudioTrackPublication)
Previousfunc remoteParticipant(_ participant: TVIRemoteParticipant, enabledAudioTrack publication: TVIRemoteAudioTrackPublication)
Newfunc remoteParticipantDidDisableAudioTrack(participant: RemoteParticipant, publication: RemoteAudioTrackPublication)
Previousfunc remoteParticipant(_ participant: TVIRemoteParticipant, disabledAudioTrack publication: TVIRemoteAudioTrackPublication)
Newfunc didSubscribeToVideoTrack(videoTrack: RemoteVideoTrack, publication: RemoteVideoTrackPublication, participant: RemoteParticipant)
Previousfunc subscribed(to videoTrack: TVIRemoteVideoTrack, publication: TVIRemoteVideoTrackPublication, for participant: TVIRemoteParticipant)
Newfunc didFailToSubscribeToVideoTrack(publication: RemoteVideoTrackPublication, error: Error, participant: RemoteParticipant)
Previousfunc failedToSubscribe(toVideoTrack publication: TVIRemoteVideoTrackPublication, error: Error, for participant: TVIRemoteParticipant)
Newfunc didUnsubscribeFromVideoTrack(videoTrack: RemoteVideoTrack, publication: RemoteVideoTrackPublication, participant: RemoteParticipant)
Previousfunc unsubscribed(from videoTrack: TVIRemoteVideoTrack, publication: TVIRemoteVideoTrackPublication, for participant: TVIRemoteParticipant)
Newfunc didSubscribeToAudioTrack(audioTrack: RemoteAudioTrack, publication: RemoteAudioTrackPublication, participant: RemoteParticipant)
Previousfunc subscribed(to audioTrack: TVIRemoteAudioTrack, publication: TVIRemoteAudioTrackPublication, for participant: TVIRemoteParticipant)
Newfunc didFailToSubscribeToAudioTrack(publication: RemoteAudioTrackPublication, error: Error, participant: RemoteParticipant)
Previousfunc failedToSubscribe(toAudioTrack publication: TVIRemoteAudioTrackPublication, error: Error, for participant: TVIRemoteParticipant)
Newfunc didUnsubscribeFromAudioTrack(audioTrack: RemoteAudioTrack, publication: RemoteAudioTrackPublication, participant: RemoteParticipant)
Previousfunc unsubscribed(from audioTrack: TVIRemoteAudioTrack, publication: TVIRemoteAudioTrackPublication, for participant: TVIRemoteParticipant)
Newfunc didSubscribeToDataTrack(dataTrack: RemoteDataTrack, publication: RemoteDataTrackPublication, participant: RemoteParticipant)
Previousfunc subscribed(to dataTrack: TVIRemoteDataTrack, publication: TVIRemoteDataTrackPublication, for participant: TVIRemoteParticipant)
Newfunc didFailToSubscribeToDataTrack(publication: RemoteDataTrackPublication, error: Error, participant: RemoteParticipant)
Previousfunc failedToSubscribe(toDataTrack publication: TVIRemoteDataTrackPublication, error: Error, for participant: TVIRemoteParticipant)
Newfunc didUnsubscribeFromDataTrack(dataTrack: RemoteDataTrack, publication: RemoteDataTrackPublication, participant: RemoteParticipant)
Previousfunc unsubscribed(from dataTrack: TVIRemoteDataTrack, publication: TVIRemoteDataTrackPublication, for participant: TVIRemoteParticipant)
NewRoom.State
PreviousTVIRoomState
NewRoom.GetStatsBlock
PreviousTVIRoomGetStatsBlock
Newfunc getRemoteParticipant(sid: String) -> RemoteParticipant?
Previousfunc getRemoteParticipant(withSid sid: String) -> TVIRemoteParticipant?
Newfunc getStats(_ block: @escaping Room.GetStatsBlock)
Previousfunc getStatsWith(_ block: @escaping TVIRoomGetStatsBlock)
Newfunc roomDidConnect(room: Room)
Previousfunc didConnect(to room: TVIRoom)
Newfunc roomDidFailToConnect(room: Room, error: Error)
Previousfunc room(_ room: TVIRoom, didFailToConnectWithError error: Error)
Newfunc roomDidDisconnect(room: Room, error: Error?)
Previousfunc room(_ room: TVIRoom, didDisconnectWithError error: Error?)
Newfunc roomIsReconnecting(room: Room, error: Error)
Previousfunc room(_ room: TVIRoom, isReconnectingWithError error: Error)
Newfunc roomDidReconnect(room: Room)
Previousfunc didReconnect(to room: TVIRoom)
Newfunc participantDidConnect(room: Room, participant: RemoteParticipant)
Previousfunc room(_ room: TVIRoom, participantDidConnect participant: TVIRemoteParticipant)
Newfunc participantDidDisconnect(room: Room, participant: RemoteParticipant)
Previousfunc room(_ room: TVIRoom, participantDidDisconnect participant: TVIRemoteParticipant)
Newfunc roomDidStartRecording(room: Room)
Previousfunc roomDidStartRecording(_ room: TVIRoom)
Newfunc roomDidStopRecording(room: Room)
Previousfunc roomDidStopRecording(_ room: TVIRoom)
Newfunc dominantSpeakerDidChange(room: Room, participant: RemoteParticipant?)
Previousfunc room(_ room: TVIRoom, dominantSpeakerDidChange participant: TVIRemoteParticipant?)
NewTrack.State
PreviousTVITrackState
NewVideoOrientation.makeTransform(orientation: VideoOrientation) -> CGAffineTransform
PreviousTVIVideoOrientationMakeTransform(_ orientation: TVIVideoOrientation) -> CGAffineTransform
NewVideoOrientation.isRotated(orientation: VideoOrientation) -> Bool
PreviousTVIVideoOrientationIsRotated(_ orientation: TVIVideoOrientation) -> Bool
NewVideoOrientation.isValid(orientation: VideoOrientation) -> Bool
PreviousTVIVideoOrientationIsValid(_ orientation: TVIVideoOrientation) -> Bool
NewVideoView.RenderingType
PreviousTVIVideoRenderingType
Newfunc videoViewDidReceiveData(view: VideoView)
Previousfunc videoViewDidReceiveData(_ view: TVIVideoView)
Newfunc videoViewDimensionsDidChange(view: VideoView, dimensions: CMVideoDimensions)
Previousfunc videoView(_ view: TVIVideoView, videoDimensionsDidChange dimensions: CMVideoDimensions)
Newfunc videoViewOrientationDidChange(view: VideoView, dimensions orientation: VideoOrientation)
Previousfunc videoView(_ view: TVIVideoView, videoOrientationDidChange orientation: TVIVideoOrientation)

Need some help?

Terms of service

Copyright © 2024 Twilio Inc.