Migrating from 2.x to 3.x - iOS Positive Feedback Negative Feedback 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.
Positive Feedback Negative Feedback 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.
Positive Feedback Negative Feedback 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.
Positive Feedback Negative Feedback 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
3 builder.roomName = "my-room"
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.
Positive Feedback Negative Feedback 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
.
Positive Feedback Negative Feedback 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)
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 )
Positive Feedback Negative Feedback 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.
Positive Feedback Negative Feedback 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:
Positive Feedback Negative Feedback New +[TwilioVideoSDK sdkVersion]
Previous +[TwilioVideo version]
Positive Feedback Negative Feedback 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:]
Positive Feedback Negative Feedback 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:]
Positive Feedback Negative Feedback 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:
Positive Feedback Negative Feedback New TwilioVideoSDK.Error
Previous TVIError
New TwilioVideoSDK.ErrorDomain
Previous kTVIErrorDomain
New TwilioVideoSDK.LogLevel
Previous TVILogLevel
New TwilioVideoSDK.LogModule
Previous TVILogModule
New TwilioVideoSDK.sdkVersion
Previous TwilioVideo.version
New class func connect(options: ConnectOptions,
delegate: RoomDelegate?) -> Room
Previous class func connect(with options: TVIConnectOptions,
delegate: TVIRoomDelegate?) -> TVIRoom
Positive Feedback Negative Feedback New public func AudioDeviceFormatChanged(context: AudioDeviceContext)
Previous public func TVIAudioDeviceFormatChanged(_ context: TVIAudioDeviceContext)
New public func AudioDeviceWriteCaptureData(context: AudioDeviceContext,
data: UnsafeMutablePointer<Int8>,
sizeInBytes: Int)
Previous public func TVIAudioDeviceWriteCaptureData(_ context: TVIAudioDeviceContext,
_ data: UnsafeMutablePointer<Int8>,
_ sizeInBytes: Int)
New public func AudioDeviceReadRenderData(context: AudioDeviceContext,
data: UnsafeMutablePointer<Int8>,
sizeInBytes: Int)
Previous public func TVIAudioDeviceReadRenderData(_ context: TVIAudioDeviceContext,
_ data: UnsafeMutablePointer<Int8>,
_ sizeInBytes: Int)
New public typealias AudioDeviceWorkerBlock = () -> Void
Previous public typealias TVIAudioDeviceWorkerBlock = () -> Void
New public func AudioDeviceExecuteWorkerBlock(context: AudioDeviceContext,
block: @escaping AudioDeviceWorkerBlock)
Previous public func TVIAudioDeviceExecuteWorkerBlock(_ context: TVIAudioDeviceContext,
_ block: @escaping TVIAudioDeviceWorkerBlock)
Positive Feedback Negative Feedback New func startRendering(context: AudioDeviceContext) -> Bool
Previous func startRendering(_ context: TVIAudioDeviceContext) -> Bool
Positive Feedback Negative Feedback New func startCapturing(context: AudioDeviceContext) -> Bool
Previous func startCapturing(_ context: TVIAudioDeviceContext) -> Bool
Positive Feedback Negative Feedback New AudioOptionsBuilder.Block
Previous TVIAudioOptionsBuilderBlock
Positive Feedback Negative Feedback New CameraSource.ErrorDomain
Previous kTVICameraSourceErrorDomain
New CameraSource.Error
Previous TVICameraSourceError
New CameraSource.StartedBlock
Previous TVICameraSourceStartedBlock
New CameraSource.StoppedBlock
Previous TVICameraSourceStoppedBlock
New func startCapture(device: AVCaptureDevice)
Previous func startCapture(with device: AVCaptureDevice)
New func startCapture(device: AVCaptureDevice,
completion: CameraSource.StartedBlock? = nil)
Previous func startCapture(with device: AVCaptureDevice,
completion: TVICameraSourceStartedBlock? = nil)
New func startCapture(device: AVCaptureDevice,
format: VideoFormat,
completion: CameraSource.StartedBlock? = nil)
Previous func startCapture(with device: AVCaptureDevice,
format: TVIVideoFormat,
completion: TVICameraSourceStartedBlock? = nil)
New func selectCaptureDevice(_ device: AVCaptureDevice)
Previous func select(_ device: AVCaptureDevice)
New func selectCaptureDevice(_ device: AVCaptureDevice,
completion: CameraSource.StartedBlock? = nil)
Previous func select(_ device: AVCaptureDevice,
completion: TVICameraSourceStartedBlock? = nil)
New func selectCaptureDevice(_ device: AVCaptureDevice,
format: VideoFormat,
completion: CameraSource.StartedBlock? = nil)
Previous func select(_ device: AVCaptureDevice,
format: TVIVideoFormat,
completion: TVICameraSourceStartedBlock? = nil)
New class func captureDevice(position: AVCaptureDevice.Position) -> AVCaptureDevice?
Previous class func captureDevice(for position: AVCaptureDevice.Position) -> AVCaptureDevice?
New class func captureDevice(position: AVCaptureDevice.Position,
deviceType: AVCaptureDevice.DeviceType) -> AVCaptureDevice?
Previous class func captureDevice(for position: AVCaptureDevice.Position,
type deviceType: AVCaptureDevice.DeviceType) -> AVCaptureDevice?
New class func supportedFormats(captureDevice: AVCaptureDevice) -> NSOrderedSet
Previous class func supportedFormats(for captureDevice: AVCaptureDevice) -> NSOrderedSet
Positive Feedback Negative Feedback New func cameraSourceInterruptionEnded(source: CameraSource)
Previous func cameraSourceInterruptionEnded(_ source: TVICameraSource)
New func cameraSourceWasInterrupted(source: CameraSource,
reason: AVCaptureSession.InterruptionReason)
Previous func cameraSourceWasInterrupted(_ source: TVICameraSource,
reason: AVCaptureSession.InterruptionReason)
New func cameraSourceDidFail(source: CameraSource,
error: Error)
Previous func cameraSource(_ source: TVICameraSource,
didFailWithError error: Error)
Positive Feedback Negative Feedback New CameraSourceOptionsBuilder.Block
Previous TVICameraSourceOptionsBuilderBlock
Positive Feedback Negative Feedback New ConnectOptionsBuilder.Block
Previous TVIConnectOptionsBuilderBlock
Positive Feedback Negative Feedback New DataTrackOptions.DefaultMaxPacketLifeTime
Previous kTVIDataTrackOptionsDefaultMaxPacketLifeTime
New DataTrackOptions.DefaultMaxRetransmits
Previous kTVIDataTrackOptionsDefaultMaxRetransmits
Positive Feedback Negative Feedback New DataTrackOptionsBuilder.Block
Previous TVIDataTrackOptionsBuilderBlock
Positive Feedback Negative Feedback New DefaultAudioDevice.IOBufferDurationSimulator
Previous kTVIDefaultAudioDeviceIOBufferDurationSimulator
New DefaultAudioDevice.SampleRateSimulator
Previous kTVIDefaultAudioDeviceSampleRateSimulator
New DefaultAudioDevice.AVAudioSessionConfigurationBlock
Previous TVIAVAudioSessionConfigurationBlock
New DefaultAudioDevice.DefaultAVAudioSessionConfigurationBlock
Previous kDefaultAVAudioSessionConfigurationBlock
Positive Feedback Negative Feedback New IceCandidatePairStats.State
Previous TVIIceCandidatePairState
Positive Feedback Negative Feedback New IceOptions.IceTransportPolicy
Previous TVIIceTransportPolicy
Positive Feedback Negative Feedback New IceOptionsBuilder.Block
Previous TVIIceOptionsBuilderBlock
Positive Feedback Negative Feedback New IsacCodec.SampleRate
Previous TVIIsacCodecSampleRate
Positive Feedback Negative Feedback New func localParticipantDidPublishAudioTrack(participant: LocalParticipant,
audioTrackPublication: LocalAudioTrackPublication)
Previous func localParticipant(_ participant: TVILocalParticipant,
publishedAudioTrack: TVILocalAudioTrackPublication)
New func localParticipantDidFailToPublishAudioTrack(participant: LocalParticipant,
audioTrack: LocalAudioTrack,
error: Error)
Previous func localParticipant(_ participant: TVILocalParticipant,
failedToPublishAudioTrack audioTrack: TVILocalAudioTrack,
withError error: Error)
New func localParticipantDidPublishDataTrack(participant: LocalParticipant,
dataTrackPublication: LocalDataTrackPublication)
Previous func localParticipant(_ participant: TVILocalParticipant,
publishedDataTrack: TVILocalDataTrackPublication)
New func localParticipantDidFailToPublishDataTrack(participant: LocalParticipant,
dataTrack: LocalDataTrack,
error: Error)
Previous func localParticipant(_ participant: TVILocalParticipant,
failedToPublishDataTrack dataTrack: TVILocalDataTrack,
withError error: Error)
New func localParticipantDidPublishVideoTrack(participant: LocalParticipant,
videoTrackPublication: LocalVideoTrackPublication)
Previous func localParticipant(_ participant: TVILocalParticipant,
publishedVideoTrack: TVILocalVideoTrackPublication)
New func localParticipantDidFailToPublishVideoTrack(participant: LocalParticipant,
videoTrack: LocalVideoTrack,
error: Error)
Previous func localParticipant(_ participant: TVILocalParticipant,
failedToPublishVideoTrack videoTrack: TVILocalVideoTrack,
withError error: Error)
New func localParticipantNetworkQualityLevelDidChange(participant: LocalParticipant,
networkQualityLevel: NetworkQualityLevel)
Previous func localParticipant(_ participant: TVILocalParticipant,
didChange networkQualityLevel: TVINetworkQualityLevel)
Positive Feedback Negative Feedback New func remoteDataTrackDidReceiveString(remoteDataTrack: RemoteDataTrack,
message: String)
Previous func remoteDataTrack(_ remoteDataTrack: TVIRemoteDataTrack,
didReceive message: String)
New func remoteDataTrackDidReceiveData(remoteDataTrack: RemoteDataTrack,
message: Data)
Previous func remoteDataTrack(_ remoteDataTrack: TVIRemoteDataTrack,
didReceive message: Data)
Positive Feedback Negative Feedback New func remoteParticipantDidPublishVideoTrack(participant: RemoteParticipant,
publication: RemoteVideoTrackPublication)
Previous func remoteParticipant(_ participant: TVIRemoteParticipant,
publishedVideoTrack publication: TVIRemoteVideoTrackPublication)
New func remoteParticipantDidUnpublishVideoTrack(participant: RemoteParticipant,
publication: RemoteVideoTrackPublication)
Previous func remoteParticipant(_ participant: TVIRemoteParticipant,
unpublishedVideoTrack publication: TVIRemoteVideoTrackPublication)
New func remoteParticipantDidPublishAudioTrack(participant: RemoteParticipant,
publication: RemoteAudioTrackPublication)
Previous func remoteParticipant(_ participant: TVIRemoteParticipant,
publishedAudioTrack publication: TVIRemoteAudioTrackPublication)
New func remoteParticipantDidUnpublishAudioTrack(participant: RemoteParticipant,
publication: RemoteAudioTrackPublication)
Previous func remoteParticipant(_ participant: TVIRemoteParticipant,
unpublishedAudioTrack publication: TVIRemoteAudioTrackPublication)
New func remoteParticipantDidPublishDataTrack(participant: RemoteParticipant,
publication: RemoteDataTrackPublication)
Previous func remoteParticipant(_ participant: TVIRemoteParticipant,
publishedDataTrack publication: TVIRemoteDataTrackPublication)
New func remoteParticipantDidUnpublishDataTrack(participant: RemoteParticipant,
publication: RemoteDataTrackPublication)
Previous func remoteParticipant(_ participant: TVIRemoteParticipant,
unpublishedDataTrack publication: TVIRemoteDataTrackPublication)
New func remoteParticipantDidEnableVideoTrack(participant: RemoteParticipant,
publication: RemoteVideoTrackPublication)
Previous func remoteParticipant(_ participant: TVIRemoteParticipant,
enabledVideoTrack publication: TVIRemoteVideoTrackPublication)
New func remoteParticipantDidDisableVideoTrack(participant: RemoteParticipant,
publication: RemoteVideoTrackPublication)
Previous func remoteParticipant(_ participant: TVIRemoteParticipant,
disabledVideoTrack publication: TVIRemoteVideoTrackPublication)
New func remoteParticipantDidEnableAudioTrack(participant: RemoteParticipant,
publication: RemoteAudioTrackPublication)
Previous func remoteParticipant(_ participant: TVIRemoteParticipant,
enabledAudioTrack publication: TVIRemoteAudioTrackPublication)
New func remoteParticipantDidDisableAudioTrack(participant: RemoteParticipant,
publication: RemoteAudioTrackPublication)
Previous func remoteParticipant(_ participant: TVIRemoteParticipant,
disabledAudioTrack publication: TVIRemoteAudioTrackPublication)
New func didSubscribeToVideoTrack(videoTrack: RemoteVideoTrack,
publication: RemoteVideoTrackPublication,
participant: RemoteParticipant)
Previous func subscribed(to videoTrack: TVIRemoteVideoTrack,
publication: TVIRemoteVideoTrackPublication,
for participant: TVIRemoteParticipant)
New func didFailToSubscribeToVideoTrack(publication: RemoteVideoTrackPublication,
error: Error,
participant: RemoteParticipant)
Previous func failedToSubscribe(toVideoTrack publication: TVIRemoteVideoTrackPublication,
error: Error,
for participant: TVIRemoteParticipant)
New func didUnsubscribeFromVideoTrack(videoTrack: RemoteVideoTrack,
publication: RemoteVideoTrackPublication,
participant: RemoteParticipant)
Previous func unsubscribed(from videoTrack: TVIRemoteVideoTrack,
publication: TVIRemoteVideoTrackPublication,
for participant: TVIRemoteParticipant)
New func didSubscribeToAudioTrack(audioTrack: RemoteAudioTrack,
publication: RemoteAudioTrackPublication,
participant: RemoteParticipant)
Previous func subscribed(to audioTrack: TVIRemoteAudioTrack,
publication: TVIRemoteAudioTrackPublication,
for participant: TVIRemoteParticipant)
New func didFailToSubscribeToAudioTrack(publication: RemoteAudioTrackPublication,
error: Error,
participant: RemoteParticipant)
Previous func failedToSubscribe(toAudioTrack publication: TVIRemoteAudioTrackPublication,
error: Error,
for participant: TVIRemoteParticipant)
New func didUnsubscribeFromAudioTrack(audioTrack: RemoteAudioTrack,
publication: RemoteAudioTrackPublication,
participant: RemoteParticipant)
Previous func unsubscribed(from audioTrack: TVIRemoteAudioTrack,
publication: TVIRemoteAudioTrackPublication,
for participant: TVIRemoteParticipant)
New func didSubscribeToDataTrack(dataTrack: RemoteDataTrack,
publication: RemoteDataTrackPublication,
participant: RemoteParticipant)
Previous func subscribed(to dataTrack: TVIRemoteDataTrack,
publication: TVIRemoteDataTrackPublication,
for participant: TVIRemoteParticipant)
New func didFailToSubscribeToDataTrack(publication: RemoteDataTrackPublication,
error: Error,
participant: RemoteParticipant)
Previous func failedToSubscribe(toDataTrack publication: TVIRemoteDataTrackPublication,
error: Error,
for participant: TVIRemoteParticipant)
New func didUnsubscribeFromDataTrack(dataTrack: RemoteDataTrack,
publication: RemoteDataTrackPublication,
participant: RemoteParticipant)
Previous func unsubscribed(from dataTrack: TVIRemoteDataTrack,
publication: TVIRemoteDataTrackPublication,
for participant: TVIRemoteParticipant)
Positive Feedback Negative Feedback New Room.State
Previous TVIRoomState
New Room.GetStatsBlock
Previous TVIRoomGetStatsBlock
New func getRemoteParticipant(sid: String) -> RemoteParticipant?
Previous func getRemoteParticipant(withSid sid: String) -> TVIRemoteParticipant?
New func getStats(_ block: @escaping Room.GetStatsBlock)
Previous func getStatsWith(_ block: @escaping TVIRoomGetStatsBlock)
Positive Feedback Negative Feedback New func roomDidConnect(room: Room)
Previous func didConnect(to room: TVIRoom)
New func roomDidFailToConnect(room: Room,
error: Error)
Previous func room(_ room: TVIRoom,
didFailToConnectWithError error: Error)
New func roomDidDisconnect(room: Room,
error: Error?)
Previous func room(_ room: TVIRoom,
didDisconnectWithError error: Error?)
New func roomIsReconnecting(room: Room,
error: Error)
Previous func room(_ room: TVIRoom,
isReconnectingWithError error: Error)
New func roomDidReconnect(room: Room)
Previous func didReconnect(to room: TVIRoom)
New func participantDidConnect(room: Room,
participant: RemoteParticipant)
Previous func room(_ room: TVIRoom,
participantDidConnect participant: TVIRemoteParticipant)
New func participantDidDisconnect(room: Room,
participant: RemoteParticipant)
Previous func room(_ room: TVIRoom,
participantDidDisconnect participant: TVIRemoteParticipant)
New func roomDidStartRecording(room: Room)
Previous func roomDidStartRecording(_ room: TVIRoom)
New func roomDidStopRecording(room: Room)
Previous func roomDidStopRecording(_ room: TVIRoom)
New func dominantSpeakerDidChange(room: Room,
participant: RemoteParticipant?)
Previous func room(_ room: TVIRoom,
dominantSpeakerDidChange participant: TVIRemoteParticipant?)
Positive Feedback Negative Feedback New Track.State
Previous TVITrackState
Positive Feedback Negative Feedback New VideoOrientation.makeTransform(orientation: VideoOrientation) -> CGAffineTransform
Previous TVIVideoOrientationMakeTransform(_ orientation: TVIVideoOrientation) -> CGAffineTransform
New VideoOrientation.isRotated(orientation: VideoOrientation) -> Bool
Previous TVIVideoOrientationIsRotated(_ orientation: TVIVideoOrientation) -> Bool
New VideoOrientation.isValid(orientation: VideoOrientation) -> Bool
Previous TVIVideoOrientationIsValid(_ orientation: TVIVideoOrientation) -> Bool
Positive Feedback Negative Feedback New VideoView.RenderingType
Previous TVIVideoRenderingType
Positive Feedback Negative Feedback New func videoViewDidReceiveData(view: VideoView)
Previous func videoViewDidReceiveData(_ view: TVIVideoView)
New func videoViewDimensionsDidChange(view: VideoView,
dimensions: CMVideoDimensions)
Previous func videoView(_ view: TVIVideoView,
videoDimensionsDidChange dimensions: CMVideoDimensions)
New func videoViewOrientationDidChange(view: VideoView,
dimensions orientation: VideoOrientation)
Previous func videoView(_ view: TVIVideoView,
videoOrientationDidChange orientation: TVIVideoOrientation)