Skip to contentSkip to navigationSkip to topbar
On this page

Changelog: Twilio Video iOS 2.x


The Twilio Programmable Video SDKs use Semantic Versioning(link takes you to an external page).


2.12.0 (October 22, 2020)

2120-october-22-2020 page anchor

Maintenance

  • Re-introduced support for iOS 32-bit architectures (armv7 and i386).

Known Issues

  • SDK does not always switch from mobile network to lower cost WiFi network on 32-bit armv7 devices. [ISDK-3063]
  • Media flow is not always re-established after toggling Airplane mode multiple times on 32-bit armv7 devices. [ISDK-3064]
  • No media flow when connecting Bluetooth speaker while connected to the room on 32-bit armv7 devices. [ISDK-3065]
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.11.0 (September 15, 2020)

2110-september-15-2020 page anchor

This release improves support for local network privacy(link takes you to an external page) on iOS 14.0 and iPadOS 14.0. As iOS 14 does not support 32-bit devices, support for the armv7 32 bit processors has been removed from this release.


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.

TVILocalNetworkPrivacyPolicy

tvilocalnetworkprivacypolicy page anchor

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.

1
let connectOptions = TVIConnectOptions(token: accessToken) { (builder) in
2
// A permissions request may be triggered on iOS 14.
3
builder.networkPrivacyPolicy = .allowAll
4
})

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.

Bug Fixes

Maintenance

  • Removed support for iOS 32-bit architectures (armv7 and i386).

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.10.2 (October 29, 2019)

2102-october-29-2019 page anchor

Bug Fixes

  • Fixed a crash on the iOS 13 simulator when rendering received H.264 video, or any other video in the TVIPixelFormatYUV420BiPlanarFullRange or TVIPixelFormatYUV420BiPlanarVideoRange formats. [ISDK-2631]
  • Fixed a bug where TVICameraSource might produce distorted frames after being interrupted with AVCaptureSessionInterruptionReasonVideoDeviceInUseByAnotherClient on iOS 13.0. #53(link takes you to an external page)

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.10.1 (August 16, 2019)

2101-august-16-2019 page anchor

Bug Fixes

  • Fixed a crash that could occur when using a TVIVideoSource, and the source's buffer pool becomes empty.

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.10.0 (April 24, 2019)

2100-april-24-2019 page anchor

This release adds support for publish only Participants (such as a ReplayKit Broadcast Extension(link takes you to an external page)) in a Group Room.

Enhancements

  • Added a new property TVIConnectOptions.automaticSubscriptionEnabled to control Track subscription behavior in Group Rooms:
    • Selecting YES (the default value) causes the Participant to be subscribed to all Tracks that are published in the Room
    • Selecting NO causes the Participant to be subscribed to none of the Tracks that are published in the Room
    • Selecting NO has no impact in a Peer-to-Peer Room
1
let connectOptions = TVIConnectOptions(token: accessToken) { (builder) in
2
builder.automaticSubscriptionEnabled = true
3
builder.roomName = "my-room"
4
}
5
self.room = TwilioVideo.connect(with: connectOptions, delegate: self)

Bug Fixes

  • Fixed a bug where media reconnection might fail when the loopback interface is mistakenly chosen as a preferred network interface. [CSDK-2762]
  • When network quality is enabled and the Client reconnects to a Room, it no longer sends extra network quality messages to Twilio's Servers. [CSDK-2876]
  • Network quality reports will continue to be received after heavy packet loss. [CSDK-2871]

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.9.0 (April 18, 2019)

290-april-18-2019 page anchor

API Changes

  • Implemented the Network Quality functionality for Group Rooms:
    • To enable the Network Quality functionality, set the TVIConnectOptions.networkQualityEnabled property to YES when connecting to a Group Room.
    • To determine the current network quality level for your Local Participant, query the TVILocalParticipant.networkQualityLevel. Note, this will return TVINetworkQualityLevelUnknown if:
      • The TVIConnectOptions.networkQualityEnabled property was set to NO OR
      • Using a Peer-to-Peer room OR
      • The network quality level has not yet been computed
    • Network Quality Level for Remote Participants will be available in a future release.
    • Implementing [TVILocalParticipantDelegate localParticipant:networkQualityLevelDidChange:] method on your TVILocalParticipantDelegate will allow you to receive callbacks when the network quality level changes.
1
@IBAction func connectToRoom(sender: AnyObject) {
2
let connectOptions = TVIConnectOptions(token: accessToken) { (builder) in
3
builder.networkQualityEnabled = true
4
builder.roomName = "my-room"
5
}
6
room = TwilioVideo.connect(with: connectOptions, delegate: self)
7
}
8
9
...
10
11
// MARK: TVILocalParticipantDelegate
12
func localParticipant(_ participant: TVILocalParticipant, didChange networkQualityLevel: TVINetworkQualityLevel) {
13
14
print("Network Quality Level Changed: \(networkQualityLevel)")
15
}

Known Issues

  • When network quality is enabled and the Client reconnects to a Room, it sends extra network quality messages to Twilio's Servers. [CSDK-2876]
  • Network quality reports may not be received after heavy packet loss. [CSDK-2871]
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.8.1 (March 21, 2019)

281-march-21-2019 page anchor

Bug Fixes

  • Fixed a crash that could occur under poor network conditions when preferring H.264 and:
    • Connecting to a Group Room that supports H.264
    • Connecting to a Peer-to-Peer Room with one or more Firefox Participants
    • Connected to a Peer-to-Peer Room when the first Firefox Participant joins
    • Disabling a TVILocalVideoTrack
    • [ISDK-2317]
  • Fixed a race condition where stopping a TVICameraSource, waiting for its completion handler, and then starting a new TVICameraSource could result in the 2nd source being interrupted.

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.8.0 (March 14, 2019)

280-march-14-2019 page anchor

API Changes

  • Implemented the Dominant Speaker functionality for Group Rooms:
    • To enable the dominant speaker functionality, set the TVIConnectOptions.dominantSpeakerEnabled property to YES when connecting to a Group Room.
    • To determine the current dominant speaker, query the TVIRoom.dominantSpeaker property for a TVIRemoteParticipant. Note, this will return nil if:
      • There is no dominant speaker OR
      • The TVIConnectOptions.dominantSpeakerEnabled property was set to NO OR
      • Using a Peer-to-Peer room
    • When there is a dominant speaker, the TVIRoom.dominantSpeaker property will return the appropriate TVIRemoteParticipant.
    • Implementing [TVIRoomDelegate room:dominantSpeakerDidChange:] method on your TVIRoomDelegate will allow you to receive callbacks when the dominant speaker in a Group Room changes. The dominantSpeakerDidChange: argument will contain the TVIRemoteParticipant of the dominant speaker, or nil if there is no longer a dominant speaker.
1
@IBAction func connectToRoom(sender: AnyObject) {
2
let connectOptions = TVIConnectOptions(token: accessToken) { (builder) in
3
builder.dominantSpeakerEnabled = true
4
builder.roomName = "my-room"
5
}
6
room = TwilioVideo.connect(with: connectOptions, delegate: self)
7
}
8
9
...
10
11
// MARK: TVIRoomDelegate
12
func room(_ room: TVIRoom, dominantSpeakerDidChange participant: TVIRemoteParticipant?) {
13
var identity = "N/A"
14
15
if let participant = participant {
16
identity = participant.identity
17
}
18
19
print("Dominant Speaker Changed: \(identity)")
20
}

Bug Fixes

  • Fixed a crash related to stats gathering which could occur when insights reporting is enabled. [CSDK-2751]
  • Fixed a crash related to media state summarization which could occur when disconnecting from a Room. [CSDK-2776]
  • Fixed a crash related to stats gathering which could occur in the media monitor component. [CSDK-2786]
  • [TVIRoom getStatsWithBlock:] will execute the provided block if called while TVIRoom.state == TVIRoomStateReconnecting. [CSDK-2787]

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.7.0 (February 14, 2019)

270-february-14-2019 page anchor

API Changes

  • Added new TVIRoomStateReconnecting to signify that the Client is attempting to reconnect to the Room due to a network disruption.
    • If you have application logic that depends on TVIRoomStateConnected, then you may want to update it to include TVIRoomStateReconnecting.
1
// Before
2
func updateStatsDisplay() {
3
if let room = self.room,
4
room.state == .connected {
5
room.getStatsWith { ([TVIStatsReport]) in
6
// Populate UI with stats report.
7
}
8
}
9
}
1
// After
2
func updateStatsDisplay() {
3
if let room = self.room,
4
room.state == .connected || room.state == .reconnecting {
5
room.getStatsWith { ([TVIStatsReport]) in
6
// Populate UI with stats report.
7
}
8
}
9
}
  • Added two new delegate methods to TVIRoomDelegate
    • [TVIRoomDelegate room:isReconnectingWithError:] - Invoked when the Client experiences a network interruption in signaling or media. The TVIRoom.state property will transition to TVIRoomStateReconnecting and the Client will attempt to restore the connection.
    • [TVIRoomDelegate didReconnectToRoom:] - Invoked after the Client successfully reconnects to the Room. If the reconnection attempts fail, [TVIRoomDelegate room\:didDisconnectWithError:] is invoked instead.

Enhancements

  • TwilioVideo.framework is now built with Xcode 10.1.

Bug Fixes

  • Fixed a bug where video tracks configured for screencast could be simulcasted with empty spatial layers. [CSDK-2540]

Known Issues

  • [TVIRoom getStatsWithBlock:] will not execute the provided block if called while TVIRoom.state == TVIRoomStateReconnecting. [CSDK-2787]
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.6.0 (December 19, 2018)

260-december-19-2018 page anchor

API Changes

  • Added properties to control the torch and camera zoom while capturing:
    • TVICameraSource.torchLevel
    • TVICameraSource.torchMode
    • TVICameraSource.zoomFactor
  • Removed TVICameraSourceOptions.torchMode and TVICameraSourceOptions.torchLevel.
  • Added TVILocalVideoTrack.source property to retrieve the TVIVideoSource used when creating the local video track.

Bug Fixes

  • TVILocalVideoTrack.capturer and TVILocalVideoTrack.constraints no longer return nil when called while the VideoSource APIs are being used. [ISDK-2331]
  • TVICameraSourceStartedBlock is now fired when calling [TVICameraSource selectCaptureDevice:completion:] repeatedly, with the same device. [ISDK-2321]

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.6.0-preview2 (December 13, 2018)

260-preview2-december-13-2018 page anchor

This preview refines the TVICameraSource APIs, introducing manual orientation, torch and zoom controls. We've also squashed a few bugs with TVIVideoSource and picked up the latest fixes from the 2.5.6 release.

API Changes

  • The torch may not switch on when starting TVICameraSource if the supplied TVICameraSourceOptions.torchMode is set to AVCaptureTorchModeOn. [ISDK-2327]
  • Introduced [TVICameraSource initWithDelegate:] method.
  • Introduced TVICameraSourceOptions and TVICameraSourceOptionsBuilder classes, including options for the torch and camera zoom.
  • Replaced [TVICameraSource initWithPreviewEnabled:delegate:] with [TVICameraSource initWithOptions:delegate:], which accepts TVICameraSourceOptions.
  • TVICameraSourceStartedBlock now includes a TVIVideoFormat argument.

Enhancements

  • Added [TVICameraSource updateVideoOrientation:] method to enable manual control of orientation tags. #324(link takes you to an external page)
  • Added helper function TVIVideoOrientationIsValid.
  • Refactored internals of TVIConnectOptions for improved resource management. [ISDK-1943]

Bug Fixes

  • Fixed a bug where the signaling connection would not recover after a network handover. [CSDK-2623]
  • Fixed a bug where the SDK might close the signaling connection after connecting to a Group Room using CallKit when the application is backgrounded. #29(link takes you to an external page)
  • Fixed a crash when downscaling RGB32 images tagged with TVIVideoOrientationDown. [ISDK-2307]
  • TVIVideoSink.sourceRequirements is populated after calling TVIVideoSink.onFormatRequest(). [ISDK-2309]
  • It is now possible to drop frames using a format request. [ISDK-2264]
  • Fixed a memory leak when removing a TVIAudioSink from a TVIAudioTrack.
  • The return value for TVICameraSource.init is now correctly marked as null_unspecified.
  • TVICameraSourceStartedBlock is now fired when calling [TVICameraSource selectCaptureDevice:format:completion:] repeatedly, with different formats.
  • [TVICameraSource supportedFormatsForDevice:] no longer returns duplicate formats.

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • TVICameraSourceStartedBlock is not fired when calling [TVICameraSource selectCaptureDevice:completion:] repeatedly, with the same device. [ISDK-2321]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.6.0-preview1 (December 3, 2018)

260-preview1-december-3-2018 page anchor

This release introduces new TVIVideoSource APIs as a replacement for TVIVideoCapturer. A Source is a producer of video content (such as frames from the Camera), and delivers that content to a Sink.

We have updated ReplayKitExample(link takes you to an external page) to use the TVIVideoSource APIs, and you can try this app today. We will be updating our other examples during the preview period.

As part of this transition we are deprecating the following classes, protocols, and methods:

  • TVICameraCapturer
  • TVICameraCapturerDelegate
  • TVILocalVideoTrack.capturer
  • TVILocalVideoTrack.constraints
  • TVILocalVideoTrack.trackWithCapturer:
  • TVILocalVideoTrack.trackWithCapturer:enabled:constraints:name:
  • TVIVideoCapturer
  • TVIVideoCaptureConsumer
  • TVIVideoConstraints
  • TVIVideoConstraintsBuilder

The existing TVIVideoCapturer APIs will continue to function until the next major release of our SDK. The following replacement APIs are now available in this preview:

  • TVICameraSource
  • TVICameraSourceDelegate
  • TVILocalVideoTrack.trackWithSource:
  • TVILocalVideoTrack.trackWithSource:enabled:name:
  • TVIVideoSource
  • TVIVideoSink

Enhancements

  • It is possible to produce video from the camera in any aspect ratio using TVICameraSource and [TVIVideoSource requestOutputFormat:]. For example, you can now stream square 480x480 video for multi-party conferencing scenarios.
  • The H.264 encoding pipeline can now use hardware acceleration for cropping (in addition to scaling) when a TVIVideoSource is used.

Bug Fixes

  • Cropping a TVIVideoFrame to produce an I420 buffer (suitable for VP8 and VP9 encoding) no longer stretches the source image.

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • Crash when downscaling RGB32 images tagged with TVIVideoOrientationDown. [ISDK-2307]
  • TVIVideoSink.sourceRequirements is not populated after calling TVIVideoSink.onFormatRequest(). [ISDK-2309]
  • Output format requests only support cropping and scaling, and can't drop frames to hit a target frame rate. [ISDK-2264]
  • The signaling connection may not recover after a network handover. [CSDK-2623]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)
  • When iPhone is locked, if user connects to a group Room by answering an incoming call request on CallKit UI, the phone gets disconnected from Room after 90 seconds. #29(link takes you to an external page)

2.5.6 (December 5, 2018)

256-december-5-2018 page anchor

Bug Fixes

  • Fixed a bug where the signaling connection would not recover after a network handover. [CSDK-2623]
  • Fixed a bug where the SDK might close the signaling connection after connecting to a Group Room using CallKit when the application is backgrounded. #29(link takes you to an external page)

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.5.5 (November 28, 2018)

255-november-28-2018 page anchor

Bug Fixes

  • Resolved an issue where TVIVideoView could display video which was rotated incorrectly on an iPhone XS, iPhone XS Max, or iPhone XR running iOS 12.1. #326(link takes you to an external page)
  • Resolved an issue where switching cameras on an iPhone XS, iPhone XS Max, or iPhone XR running iOS 12.1 could cause the application to hang. [ISDK-2268]

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • The signaling connection may not recover after a network handover. [CSDK-2623]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)
  • When iPhone is locked, if user connects to a group Room by answering an incoming call request on CallKit UI, the phone gets disconnected from Room after 90 seconds. #29(link takes you to an external page)

2.5.4 (November 26, 2018)

254-november-26-2018 page anchor

Enhancements

  • Improved the detection of, and recovery from media connection failures. Worst case recovery times have been reduced by up to 10 seconds.
  • Removed forced ICE restarts after a signaling connection handover. Superfluous ICE restarts use up resources, create extra signaling traffic, and involve an extra round trip time to re-establish ice connection.
  • Chooses a lower cost network for media traffic when one becomes available. For eg., when a call is originally on LTE and Wifi becomes available, media traffic is moved to the Wifi network.

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • TVIVideoView can display video which is rotated incorrectly on an iPhone XS, iPhone XS Max, or iPhone XR running iOS 12.1. #326(link takes you to an external page)
  • The signaling connection may not recover after a network handover. [CSDK-2623]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)
  • When iPhone is locked, if user connects to a group Room by answering an incoming call request on CallKit UI, the phone gets disconnected from Room after 90 seconds. #29(link takes you to an external page)

2.5.3 (October 18, 2018)

253-october-18-2018 page anchor

Enhancements

  • Reduced signaling traffic in Group Rooms when communicating with an ICE-lite agent.

Bug Fixes

  • Fixed a bug where the Client could send additional ICE candidates after signaling the end of candidates, or mark candidates with a username from a future offer.
  • Made the reliance on MetalKit.framework optional so apps consuming TwilioVideo.framework can be run in an iOS 9.x simulator. #130(link takes you to an external page) [ISDK-2207]
  • Fixed a crash in rendering a disabled TVILocalVideoTrack using OpenGL renderer. [ISDK-2211]

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • The signaling connection may not recover after a network handover. [CSDK-2623]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.5.2 (October 8, 2018)

252-october-8-2018 page anchor

Enhancements

  • TwilioVideo is now built and distributed as both a dynamic framework, TwilioVideo, and a static library, libTwilioVideo.a. The static library is not available as a Carthage or CocoaPods dependency and is only available as a manual download from the Video iOS Releases(link takes you to an external page) page.

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.5.1 (October 4, 2018)

251-october-4-2018 page anchor

Bug Fixes

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.5.0 (September 27, 2018)

250-september-27-2018 page anchor

API Changes

Known Issues


2.4.1 (September 21, 2018)

241-september-21-2018 page anchor

Bug Fixes

  • Fixed a crash which might occur during teardown when signaling::PeerConnectionSignaling processes a close message.
  • Fixed a potential crash caused by a memory corruption when a custom audio device is created. [ISDK-2176]
  • Fixed a crash that occurs when WebRTC fails to create local session description.
  • Fixed a crash that might occur when session description callbacks arrive from WebRTC after we have destroyed the PeerConnection instance.

Known Issues


2.4.0 (August 28, 2018)

240-august-28-2018 page anchor

Enhancements

  • TwilioVideo.framework is now built with Xcode 9.4.1.
  • When a Room is completed via the REST API, connected Clients will now receive a [TVIRoomDelegate room\:didDisconnectWithError:] callback with the error code TVIErrorRoomRoomCompletedError.
  • The signaling Client has been updated to support version 2 of the Room Signaling Protocol (RSP). Clients can now recover when a Group Room is transitioned to a new Media Server.
  • Added a softwareAecEnabled property to TVIAudioOptions to use the software acoustic echo cancellation.
  • We have defined several new error codes:
    • TVIErrorRoomSubscriptionOperationNotSupportedError
    • TVIErrorRoomRoomCompletedError
    • TVIErrorTrackServerTrackCapacityReachedError
  • TwilioVideo.framework now uses C++14 internally.
  • Introduced a safer threading model in the signaling layer that prevents occasional crashes and missing Track subscription events.
  • The SDK no longer waits for pending events when closing a PeerConnection speeding up the teardown process.
  • Added ECS debugging support at the signaling layer that will help in troubleshooting ice server related issues.

Bug Fixes

  • The signaling Client is more lenient when encountering unexpected RSP messages.
  • Fixed a rare crash when TVIRoom is destroyed while fetching ICE servers. [CSDK-2499]
  • Resolved a scenario where an ICE restart could be ignored after experiencing signaling glare.

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • A crash occurs when WebRTC fails to create local session description.
  • A crash might occur when session description callbacks arrive from WebRTC after we have destroyed the PeerConnection instance.
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)
  • A crash occurs when disabling a TVILocalVideoTrack published with the H.264 codec. [ISDK-2210] #308(link takes you to an external page)

2.3.0 (August 7, 2018)

230-august-7-2018 page anchor

We have promoted 2.3.0-preview2 to 2.3.0. This release is based on WebRTC 67 and also resolves conflicts when using Twilio Video alongside other WebRTC based dependencies.

Known Issues


2.3.0-preview2 (August 2, 2018)

230-preview2-august-2-2018 page anchor

Features

  • Objective-C classes in WebRTC are prefixed with TVI. It is now possible to use the Video SDK side by side with any other Chromium WebRTC based dependency in the same application.

API Changes

Bug Fixes

  • The TVIVideoRenderingType.OpenGLES renderer doesn't display i420, and y420 frames produced by a TVIVideoCapturer. [ISDK-2078]
  • Retry failed ICE Server requests up to TVIIceOptions.iceServersTimeout to increase reliability.
  • Fixed a crash which could occur when AVAudioSession.inputNumberOfChannels == 0 and TVIDefaultAudioDevice is used. [ISDK-2143]
  • TVIDefaultAudioDevice no longer overrides AVAudioSession.preferredInputNumberOfChannels and AVAudioSession.preferredOutputNumberOfChannels after executing your block. The default block has also been updated to set channel preferences.
  • App extensions are supported with H.264 codecs.

Known Issues


2.3.0-preview1 (June 29, 2018)

230-preview1-june-29-2018 page anchor

Enhancements

  • This release is based on Chromium WebRTC 67.
  • TVIAVAudioSessionConfigurationBlock now configures AVAudioSession.preferredIOBufferDuration to 20 milliseconds by default, to match changes in WebRTC.
  • We have enabled multi-threaded VP8 encoding when the device has 3 or more CPU cores and the output size is greater than 640x480.

API Changes

  • Deprecated the TVIAudioOptions.levelControl and TVIAudioOptions.levelControlInitialPeakLevelDBFS properties as they are no longer supported in Chromium WebRTC 67.
  • Opus audio is now decoded in mono, which can be seen when attaching a TVIAudioSink to a TVIRemoteAudioTrack.

Bug Fixes

  • Fixed a crash which might occur when processing the stats reports when calling [TVIRoom getStatsWithBlock:].
  • A subscriber may not send a keyframe request to the publisher when it initially subscribes to an H.264 encoded Track in a Group Room. [CSDK-2034]
  • The SDK is compatible with Firefox 63+ in a Peer-to-Peer Room. #35(link takes you to an external page)
  • The SDK is compatible with Chrome 76+ in a Peer-to-Peer Room. #52(link takes you to an external page)

Known Issues

  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • The TVIVideoRenderingTypeOpenGLES renderer doesn't display i420, and y420 frames produced by a TVIVideoCapturer. [ISDK-2078]
  • A crash might occur when AVAudioSession.inputNumberOfChannels == 0 and TVIDefaultAudioDevice is used. [ISDK-2143]
  • App extensions may not be supported yet. [ISDK-2047]
  • The Video SDK may call UIApplication APIs from a background thread. [ISDK-2051]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded. #17(link takes you to an external page)
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)
  • A crash occurs when disabling a TVILocalVideoTrack published with the H.264 codec. [ISDK-2210] #308(link takes you to an external page)

2.2.2 (July 25, 2018)

222-july-25-2018 page anchor

Enhancements

  • Clarified the header docs for TVIVideoViewDelegate.
  • Updated certificate bundle to include "Starfield Class 2 CA" and "Starfield Services Root Certificate Authority - G2" using release-2.0.0 of cert-bundle.

Bug Fixes

  • Fixed a crash which might occur when processing the stats reports when calling [TVIRoom getStatsWithBlock:].
  • Retry failed ICE Server requests up to TVIIceOptions.iceServersTimeout to increase reliability.
  • Fixed a memory leak which could occur after creating SDPs.

Known Issues


2.2.1 (June 20, 2018)

221-june-20-2018 page anchor

Improvements

  • Refactored internal signaling reachability events, which reduced thread hops on Apple platforms.
  • Increased the signaling disconnect timeout interval to 7 seconds when a network connection is available.

Bug Fixes

  • A timer overflow could cause events to occur sooner than expected.
  • Fixed a bug that caused disconnected responses to be dropped and delayed [TVIRoomDelegate room\:didDisconnectWithError:] callbacks by up to 1 second.

Known Issues

  • The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35(link takes you to an external page)
  • Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52(link takes you to an external page)
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • A crash may occur when processing the stats reports when calling [TVIRoom getStatsWithBlock:].
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded.
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.2.0 (June 7, 2018)

220-june-7-2018 page anchor

Enhancements

  • TVIRoom's delegate property is no longer read only. #13(link takes you to an external page)
  • When invalidating TVIVideoView, the black frame is rendered synchronously rather than on the next vsync.

Bug Fixes

  • Corrected the @return documentation for the [TwilioVideo connectWithOptions:delegate:] method. #14(link takes you to an external page)
  • Fixed a bug where [TVIVp8Codec isEqual:] returned YES when TVIVp8Codec.isSimulcast did not match.

Known Issues

  • The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35(link takes you to an external page)
  • Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52(link takes you to an external page)
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • A crash may occur when processing the stats reports when calling [TVIRoom getStatsWithBlock:].
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded.
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.1.0 (May 25, 2018)

210-may-25-2018 page anchor

Enhancements

  • TwilioVideo.framework is now built with the Xcode 9.3 toolchain.
  • Improved thread safety when accessing the TVIVideoRenderer collection in TVIVideoTrack.
  • Added an initializer to TVIVp8Codec to enable simulcast. Enabling simulcast causes the encoder to generate multiple spatial and temporal layers for the video that is published. Simulcast should only be enabled in a Group Room.
  • Fixed an issue where the aspect ratio in TVIVideoView could be incorrect. #266(link takes you to an external page)
  • Added two new properties to TVIIceOptions to control how ICE servers are fetched.
    • abortOnIceServersTimeout- Require ICE server fetching to complete, and disallow the use of default STUN servers if the request fails.
    • iceServersTimeout - A custom timeout to use when fetching ICE servers.

Bug Fixes

  • Fixed a bug where the SDK could crash when unsubscribing from a TVIRemoteDataTrack and disconnecting from a Room at the same time.
  • Fixed a rare crash that occurs during PeerConnectionSignaling teardown.
  • Fixed an issue in PeerConnectionSignaling which could cause DTLS roles to be negotiated incorrectly in a multi-party Peer-to-Peer Room.
  • Fixed build configuration to reduce file size of libtwilio-video for Darwin and iOS.

Known Issues


2.0.1 (May 4, 2018)

201-may-4-2018 page anchor

Features

  • TVIVideoView now uses MTKView from MetalKit.framework when Metal rendering is selected.

Bug Fixes

  • Resolved a rare crash involving TVIVideoView and an internal class named TVIDisplayLinkTimer when Metal rendering is used.
  • Fixed a bug where the SDK could invoke UIView APIs on a background thread while invalidating a TVIVideoView.

Known Issues


2.0.0 (April 26, 2018)

200-april-26-2018 page anchor

This is our first Generally Available (GA) 2.0 release.

Thank you for the feedback that you've provided on our preview and beta releases. This version includes some minor API changes around TVIVideoFrame and TVIVideoRenderer / TVIVideoView reuse, but otherwise is very similar to 2.0.0-beta4.

Features

  • TVIVideoFrame.timestamp now uses CMTime instead of int64_t (in microseconds). We've found that developers writing custom TVIVideoCapturers are sometimes confused at having to convert time into microseconds. Furthermore, this conversion can be a destructive operation which causes the original timescale to be lost. For those working with CFTimeInterval we've also added an initializer which accepts this argument. The following code snippet demonstrates how to modify your capture logic when dealing with a source which produces CMSampleBuffers.
1
// Before
2
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
3
CMTime presentationTimestamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
4
int64_t timestamp = (int64_t)(CMTimeGetSeconds( presentationTimestamp ) * INT64_C( 1000000 ));
5
TVIVideoFrame *frame = [[TVIVideoFrame alloc] initWithTimestamp:timestamp
6
buffer:CMSampleBufferGetImageBuffer( sampleBuffer )
7
orientation:TVIVideoOrientationUp];
8
9
[_captureConsumer consumeCapturedFrame:frame];
10
}
1
// After
2
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
3
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
4
TVIVideoFrame *frame = [[TVIVideoFrame alloc] initWithTimestamp:timestamp
5
buffer:CMSampleBufferGetImageBuffer( sampleBuffer )
6
orientation:TVIVideoOrientationUp];
7
8
[_captureConsumer consumeCapturedFrame:frame];
9
}
  • TVIVideoFrame initializers are now marked as nullable instead of null_unspecified.
  • Added the optional invalidateRenderer method to the TVIVideoRenderer protocol. This method, if implemented, will be invoked when a TVIVideoRenderer object is removed from a video track by calling the [TVIVideoTrack removeRenderer:] method. This method allows the TVIVideoRenderer to perform any necessary cleanup that is required, for instance when the TVIVideoRender is to be reused with a different video track.
  • TVIVideoView implements the invalidateRenderer protocol method and will now better support reusing the view between different video tracks. #240(link takes you to an external page) Now, when a TVIVideoView is removed as a renderer for a video track, the following will occur:
    • A black frame is rendered to the view to clear the last frame and then the view is resized back to its original internal dimensions.
    • The hasVideoData flag is reset. This will allow the [TVIVideoViewDelegate videoViewDidReceiveData:] method to be fired again when new video data arrives.
    • The videoDimensions, videoOrientation, viewShouldRotateContent and mirror properties are reset to their respective default values.

Bug Fixes

  • The H.264 encoder now supports inputs in TVIPixelFormatYUV420PlanarFullRange or TVIPixelFormatYUV420PlanarVideoRange.

Known Issues

  • The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35(link takes you to an external page)
  • Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52(link takes you to an external page)
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • The Video SDK could invoke UIView APIs on a background thread while invalidating a TVIVideoView.
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded.
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.0.0-beta4 (April 10, 2018)

200-beta4-april-10-2018 page anchor

Features

  • Added a framesEncoded stats field to TVILocalVideoTrackStats.
  • Removed trackId from TVIBaseTrackStats. trackSid can be used to identify track stats in a TVIStatsReport.
  • Removed trackId from TVILocalAudioTrack, TVILocalDataTrack, and TVILocalVideoTrack. trackSid or name can be used to identify local tracks.
  • Added TVIRemoteAudioTrack.sid, TVIRemoteVideoTrack.sid and TVIRemoteDataTrack.sid properties.
  • Replaced TVIAudioCodec enumeration with TVIAudioCodec, TVIG722Codec, TVIIsacCodec, TVIOpusCodec, TVIPcmaCodec and TVIPcmuCodec classes.
  • Replaced TVIVideoCodec enumeration with TVIH264Codec, TVIVp8Codec and TVIVp9Codec classes.

Improvements

  • Simplified the internal process for retrieving ice servers and resolving outbound DNS.
  • The media engine now uses a dedicated thread for networking operations.
  • Reduced the time needed to shutdown the signaling stack while disconnecting from a Room.
  • Increased the signaling disconnect timeout interval to 1 second.
  • Enable monotonic clock support in the signaling Client.
  • Initial Connect message now includes Client version metadata.

Bug Fixes

  • Fixed an issue where [TVIRoomDelegate room\:didDisconnectWithError:] was not raised for connected Participants when a Room is completed via the REST API.
  • Fixed an issue where the value of [TVIRoom hash] could change between the time a TVIRoom object is created and when it connects. This issue could cause issues when the TVIRoom object was stored in a collection.
  • Quieted unnecessary warning logs when preferring codecs.
  • Fixed an issue where application thread would block up to 30 seconds when connecting to and destroying a TVIRoom in bad network conditions.
  • Fixed a bug where [TVIRoomDelegate room\:didDisconnectWithError:] was not getting invoked due to a race condition between a network handover and a user initiated [TVIRoom disconnect] call. #235(link takes you to an external page)
  • ICE URIs using the turns scheme are now supported. The SDK will now use turns by default if turn is enabled for your Room.
  • ICE URIs using the stuns scheme are now supported.
  • Resolved a condition where ICE candidates might not be applied in Peer-to-Peer Rooms.
  • Resolved an issue with clock rollover in the Room signaling layer that resulted in high CPU usage and disconnects.
  • The signaling Client no longer logs access tokens.

Known Issues

  • The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35(link takes you to an external page)
  • Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52(link takes you to an external page)
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • The H.264 encoder does not support inputs in TVIPixelFormatYUV420PlanarFullRange or TVIPixelFormatYUV420PlanarVideoRange. [ISDK-1489]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded.
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.0.0-beta3 (March 21, 2018)

200-beta3-march-21-2018 page anchor

Enhancements

  • Added the functions TVIAudioSessionActivated() and TVIAudioSessionDeactivated() to support backgrounding for custom TVIAudioDevices. [ISDK-1842]
  • Removed the reconnectAfterReturningToForeground property from TVIConnectOptions and TVIConnectOptionsBuilder. The SDK will continue to support the default behavior of terminating signaling connections when AVAudioSession is inactive and the app is backgrounded.

Bug Fixes

  • Fixed a bug where TVIDefaultAudioDevice was not able to play or record audio if the user joins a Room with a bluetooth device. #236(link takes you to an external page)
  • Resolved a deadlock in TVIAudioDevice which could occur while invoking TVIAudioDeviceFormatChanged().

Known Issues

  • The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35(link takes you to an external page)
  • Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52(link takes you to an external page)
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • The H.264 encoder does not support inputs in TVIPixelFormatYUV420PlanarFullRange or TVIPixelFormatYUV420PlanarVideoRange. [ISDK-1489]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded.
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.0.0-beta2 (February 27, 2018)

200-beta2-february-27-2018 page anchor

Enhancements

  • TVIAudioDeviceExecuteWorkerBlock executes the supplied block asynchronously.

Bug Fixes

  • Audio is not resumed for Alice if Alice is connected to a Room and receives an incoming cellular call and the caller cancels the call (iOS 9.x).
  • Resolved an issue where the device model was being incorrectly reported to Insights.
  • Improved thread safety while executing TVIAudioDeviceFormatChanged and TVIAudioDeviceExecuteWorkerBlock. It should no longer be possible for these functions to access an invalid TVIAudioDeviceContext.

Known Issues

  • The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35(link takes you to an external page)
  • Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52(link takes you to an external page)
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • TVIDefaultAudioDevice is not able to play or record audio if the user joins a Room with a bluetooth device. #236(link takes you to an external page)
  • The signaling connection is closed upon entering the background when an audio device besides TVIDefaultAudioDevice is used in a Room. [ISDK-1842]
  • The H.264 encoder does not support inputs in TVIPixelFormatYUV420PlanarFullRange or TVIPixelFormatYUV420PlanarVideoRange. [ISDK-1489]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded.
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.0.0-beta1 (February 7, 2018)

200-beta1-february-7-2018 page anchor

This release is focused on enabling more advanced audio use cases in Twilio Video. In the past you've been able to use TVIAudioSink to access raw audio samples from a TVIAudioTrack. However, these APIs did not allow developers to control the mechanism by which audio is captured and rendered in a Room.

We're now pleased to introduce TVIAudioDevice. This protocol works in concert with TVIAudioSink, giving you the ability to replace TVIDefaultAudioDevice. By implementing the TVIAudioDevice protocol, you can write your own audio capturer to feed audio samples to the Video SDK and an audio renderer to receive the remote Participant's audio samples. For example, you could integrate with ReplayKit2 and capture application audio for broadcast or play music using AVAssetReader.

See AudioDeviceExample(link takes you to an external page) which uses a custom Audio Device with CoreAudio to play the remote Participant's stereo audio. In the future, we will add more AudioDevices to the repo.

Please note, if you are providing your own custom audio device, it is necessary to support audio capturing in order to create an instance of TVILocalAudioTrack. Also, if the supplied audio device does not support audio rendering then the you will not be able to receive any audio samples via TVIAudioSink.

Enhancements

  • Added the ability to provide your own audio capturing and rendering via the TVIAudioDevice protocol. As a part of this change we've also added TVIAudioFormat which describes audio that is being captured and rendered.
  • Introduced TwilioVideo.audioDevice class property, and removed TVIConnectOptions.audioDevice. You should set your audio device on TwilioVideo before performing any other actions with the SDK such as creating Tracks or connecting to a Room.
  • The class factory methods for TVILocalAudioTrack and TVILocalDataTrack now return nullable instances.

Bug Fixes

Known Issues

  • The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35(link takes you to an external page)
  • Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52(link takes you to an external page)
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • TVIDefaultAudioDevice is not able to play or record audio if the user joins a Room with a bluetooth device. #236(link takes you to an external page)
  • The signaling connection is closed upon entering the background when an audio device besides TVIDefaultAudioDevice is used in a Room. [ISDK-1842]
  • The H.264 encoder does not support inputs in TVIPixelFormatYUV420PlanarFullRange or TVIPixelFormatYUV420PlanarVideoRange. [ISDK-1489]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded.
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)

2.0.0-preview9 (January 19, 2018)

200-preview9-january-19-2018 page anchor

Enhancements

  • Our C++ core library is now built with the Xcode 9.1 toolchain (matching video-ios).

Bug Fixes

  • Clarified header docs for [TVIRoomDelegate room\:didFailToConnectWithError:], [TVIRoomDelegate roomDidStartRecording:] and [TVIRoomDelegate roomDidStopRecording:].
  • Don't publish Ice Candidate stats unless an active pair is present.

Known Issues


2.0.0-preview8 (January 9, 2018)

200-preview8-january-9-2018 page anchor

As of this release we are removing support for iOS 8 and raising our minimum target to iOS 9.0. Twilio Video 1.x releases will continue to support iOS 8.1 and later.

Enhancements

  • [TVICameraCapturerDelegate cameraCapturerWasInterrupted:reason:] now uses AVCaptureSessionInterruptionReason instead of TVICameraCapturerInterruptionReason.
  • Added subscription failure callbacks to TVIRemoteParticipantDelegate.
    • failedToSubscribeToAudioTrack:error:forParticipant:
    • failedToSubscribeToDataTrack:error:forParticipant:
    • failedToSubscribeToVideoTrack:error:forParticipant:
  • This release deprecates TVIAudioController and adds a new TVIDefaultAudioDevice class. The TVIDefaultAudioDevice class allows you to record and playback audio and allows to configure AVAudioSession when you are connected to a Room.
  • TVIAudioController.startAudio() and TVIAudioController.stopAudio() have been removed in favor of a new property called TVIDefaultAudioDevice.enabled. This property provides developers with a mechanism to enable or disable the activation of the audio device prior to connecting to a Room or to stop or start the audio device while you are already connected to a Room. A Room can now be connected without activating the audio device by setting TVIDefaultAudioDevice.enabled to NO and can be enabled during the lifecycle of the Room by setting TVIDefaultAudioDevice.enabled to YES. The default value is YES. This API change was made to ensure full compatibility with CallKit as well as supporting other use cases where developers may need to disable the audio device during a call.
  • TVIDefaultAudioDevice can be provided to TVIConnectOptions while connecting to a Room.
  • TVIRoom has a new property audioDevice which points to the audio device used by the Room.

Examples #1 - Changing the audio route from speaker to receiver in a live call:

1
TVIDefaultAudioDevice *audioDevice = [TVIDefaultAudioDevice audioDevice];
2
3
//...connect to a Room with audioDevice. By default the audio route will be configured to speaker.
4
5
room.audioDevice.block = ^ {
6
// We will execute `kDefaultAVAudioSessionConfigurationBlock` first.
7
kDefaultAVAudioSessionConfigurationBlock();
8
9
// Overwrite the audio route
10
AVAudioSession *session = [AVAudioSession sharedInstance];
11
NSError *error = nil;
12
if (![session setMode:AVAudioSessionModeVoiceChat error:&error]) {
13
NSLog(@"AVAudiosession setMode %@",error);
14
}
15
16
if (![session overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&error]) {
17
NSLog(@"AVAudiosession overrideOutputAudioPort %@",error);
18
}
19
};
20
room.audioDevice.block();

Example #2 - Connecting to a Room using the AVAudioSessionCategoryPlayback category:

1
TVIDefaultAudioDevice *audioDevice = [TVIDefaultAudioDevice audioDeviceWithBlock:^ {
2
3
// Execute the `kDefaultAVAudioSessionConfigurationBlock` first.
4
kDefaultAVAudioSessionConfigurationBlock();
5
6
// Overwrite the category to `playback`
7
AVAudioSession *session = [AVAudioSession sharedInstance];
8
NSError *error = nil;
9
if (![session setCategory:AVAudioSessionCategoryPlayback
10
mode:AVAudioSessionModeVideoChat
11
options:AVAudioSessionCategoryOptionAllowBluetooth
12
error:&error]) {
13
NSLog(@"AVAudioSession setCategory:options:mode:error: %@",error);
14
}
15
}];
16
17
TVIConnectOptions *connectOptions = [TVIConnectOptions optionsWithToken:token
18
block:^(TVIConnectOptionsBuilder *builder) {
19
builder.audioDevice = audioDevice;
20
}];
21
22
TVIRoom *room = [TwilioVideo connectWithOptions: connectOptions]
  • Our C++ core library is now built with the Xcode 9.0 toolchain.
  • Added several properties to TVIIceCandidatePairStats
    • activeCandidatePair - indicates if the candidate pair is active.
    • localCandidateIp - the IP address of the local candidate associated with this candidate pair.
    • remoteCandidateIp - the IP address of the remote candidate associated with this candidate pair.
    • relayProtocol - the relay protocol

Bug Fixes

  • TVICameraCapturer.init() is now annotated as null_unspecified instead of inheriting from NSObject.init() to match other initializers. [ISDK-1728]
  • Fixed a potential crash when connecting to Group Rooms and publishing Audio, Video and Data Tracks.
  • Fixed a crash which could occur in the signaling layer when disconnecting from a Room while receiving messages.
  • Resolved a multi-threading issue where TVIRemoteParticipantDelegate callbacks could be missed leading to [TVIRemoteParticipant unsubscribedFrom*Track:publication:forParticipant:] events raised when the underlying C++ core track is nullptr.

Known Issues


2.0.0-preview7 (November 9, 2017)

200-preview7-november-9-2017 page anchor

Enhancements

  • TwilioVideo.framework is now built with Xcode 9.1.

Bug Fixes

  • TVIAudioSink now pre-allocates buffers used on a real-time CoreAudio thread. #104(link takes you to an external page) [ISDK-1412]
  • The name parameter has been removed from the TVILocalDataTrack trackWithOptions:name: method. Track names can now be provided in the TVIDataTrackOptions object. [ISDK-1708]
  • TVITrackPublications track property now returns nil from within the unsubscribedFrom*Track:publication:forParticipant: callback invocation. [ISDK-1710]
  • Fixed a potential crash when publishing or unpublishing a Data Track. [CSDK-1934]

Known Issues

  • The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35(link takes you to an external page)
  • Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52(link takes you to an external page)
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • The H.264 encoder does not support inputs in TVIPixelFormatYUV420PlanarFullRange or TVIPixelFormatYUV420PlanarVideoRange. [ISDK-1489]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded.
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)
  • AVPlayer audio content does not mix properly with Room audio. #402(link takes you to an external page)

2.0.0-preview6 (November 3, 2017)

200-preview6-november-3-2017 page anchor

Features

  • Data tracks are now supported in both Peer-to-Peer and Group Rooms.
  • The following delegate methods were added to TVILocalParticipantDelegate. [ISDK-1625]
    • localParticipant:failedToPublishAudioTrack:withError:
    • localParticipant:failedToPublishDataTrack:withError:
    • localParticipant:failedToPublishVideoTrack:withError:

Known Issues


2.0.0-preview5 (October 23, 2017)

200-preview5-october-23-2017 page anchor

Features

  • Added new TVIDataTrack API. A data track represents a unidirectional source that allows sharing string and binary data with all Participants in a Room. Data tracks function similarly to audio and video tracks and can be provided via TVIConnectOptions and published using [TVILocalParticipant publishDataTrack:]. Messages sent on the data track are not guaranteed to be delivered to all the Participants. Data tracks are currently supported in Peer-to-Peer Rooms only. The following snippets demonstrate how to send and receive messages with data tracks.

Creating a TVILocalDataTrack

TVILocalDataTrack *localDataTrack = [TVILocalDataTrack track];

Connecting to a Room with a TVILocalDataTrack

1
TVIConnectOptions *connectOptions = [TVIConnectOptions optionsWithToken:accessToken
2
block:^(TVIConnectOptionsBuilder *builder) {
3
builder.dataTracks = @[localDataTrack];
4
}];
5
6
TVIRoom *room = [TwilioVideo connectWithOptions:connectOptions delegate:self];

Publishing a TVILocalDataTrack

1
// ... Connected to room
2
TVILocalParticipant *localParticipant = room.localParticipant;
3
4
[localParticipant publishDataTrack:dataTrack];

Observing TVIRemoteDataTrackPublication and TVIRemoteDataTrack on TVIRemoteParticipantDelegate

1
@interface MyClass : NSObject <TVIRemoteParticipantDelegate>
2
3
// Participant has published data track
4
- (void)remoteParticipant:(nonnull TVIRemoteParticipant *)participant
5
publishedDataTrack:(nonnull TVIRemoteDataTrackPublication *)publication;
6
7
8
// Participant has unpublished data track
9
- (void)remoteParticipant:(nonnull TVIRemoteParticipant *)participant
10
unpublishedDataTrack:(nonnull TVIRemoteDataTrackPublication *)publication;
11
12
// Data track has been subscribed to and messages can be observed.
13
- (void)subscribedToDataTrack:(nonnull TVIRemoteDataTrack *)dataTrack
14
publication:(nonnull TVIRemoteDataTrackPublication *)publication
15
forParticipant:(nonnull TVIRemoteParticipant *)participant;
16
17
// Data track has been unsubsubscribed from and messages cannot be observed.
18
- (void)unsubscribedFromDataTrack:(nonnull TVIRemoteDataTrack *)dataTrack
19
publication:(nonnull TVIRemoteDataTrackPublication *)publication
20
forParticipant:(nonnull TVIRemoteParticipant *)participant;
21
@end

Sending messages on TVILocalDataTrack

1
NSString *message = @"Hello DataTrack!";
2
[localDataTrack sendString:message];
3
4
NSData *messageBuffer = [NSData dataWithBytes:bytes length:length];
5
[localDataTrack sendData:messageBuffer];

Observing messages from data track

1
@interface MyClass : NSObject <TVIRemoteDataTrackDelegate>
2
3
- (void)remoteDataTrack:(nonnull TVIRemoteDataTrack *)remoteDataTrack didReceiveString:(nonnull NSString *)message;
4
5
- (void)remoteDataTrack:(nonnull TVIRemoteDataTrack *)remoteDataTrack didReceiveData:(nonnull NSData *)message;
6
7
@end

Bug Fixes

  • The H.264 decoder explicitly requests Metal compatibility on 64-bit devices. [ISDK-1464]
  • Codec preferences now function correctly in a hybrid codec Group Room. [CSDK-1733]
  • TVIAudioSinks added to a TVILocalAudioTrack now raise callbacks. Audio recording does not start until you join an empty Group Room or a Peer-to-Peer Room with one or more Participants. #104(link takes you to an external page)

Known Issues

  • The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35(link takes you to an external page)
  • Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52(link takes you to an external page)
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • The H.264 encoder does not support inputs in TVIPixelFormatYUV420PlanarFullRange or TVIPixelFormatYUV420PlanarVideoRange. [ISDK-1489]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded.
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Data tracks are only supported in Peer-to-Peer Rooms. [VIDEO-827]
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)
  • AVPlayer audio content does not mix properly with Room audio. #402(link takes you to an external page)
  • TVIAudioSink should pre-allocate buffers used on a real-time CoreAudio thread. #104(link takes you to an external page) [ISDK-1412]

2.0.0-preview4 (September 22, 2017)

200-preview4-september-22-2017 page anchor

Features

  • Added a trackSid property to TVIBaseTrackStats.
  • The trackId, ssrc and codec properties in TVIBaseTrackStats are now annotated as nonnull.

Bug Fixes

  • TVIAudioCodecPCMU, TVIAudioCodecPCMA and TVIAudioCodecG722 operate at 64 kbps. Setting a maximum bitrate for these codecs no longer results in a loss of audio and video.
  • Setting an incorrect maximum bitrate for TVIAudioCodecISAC no longer results in a crash.

Known Issues

  • The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35(link takes you to an external page)
  • Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52(link takes you to an external page)
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • The H.264 encoder does not support inputs in TVIPixelFormatYUV420PlanarFullRange or TVIPixelFormatYUV420PlanarVideoRange. [ISDK-1489]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded.
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)
  • AVPlayer audio content does not mix properly with Room audio. #402(link takes you to an external page)
  • TVIAudioSinks added to a TVILocalAudioTrack do not raise any callbacks. #104(link takes you to an external page)
  • Codec preferences do not function correctly in a hybrid codec Group Room. [CSDK-1733]
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Network handoff failure may occur if signaling connection loss is detected before the SCNetworkReachability callback is invoked.

2.0.0-preview3 (September 19, 2017)

200-preview3-september-19-2017 page anchor

Bug fixes

  • The H.264 codec invokes UIApplication APIs from a background thread. [ISDK-1494]
  • H.264 frames can not be encoded or decoded while the application is foregrounded, but inactive. [ISDK-1495, ISDK-1496]
  • Resolved a deadlock in VTDecompressionSessionInvalidate which could occur on iOS 11.0 when receiving H.264 video. [ISDK-1502]

Known issues

  • The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35(link takes you to an external page)
  • Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52(link takes you to an external page)
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • The H.264 encoder does not support inputs in TVIPixelFormatYUV420PlanarFullRange or TVIPixelFormatYUV420PlanarVideoRange. [ISDK-1489]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded.
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)
  • AVPlayer audio content does not mix properly with Room audio. #402(link takes you to an external page)
  • TVIAudioSinks added to a TVILocalAudioTrack do not raise any callbacks. #104(link takes you to an external page)
  • TVIAudioCodecPCMU, TVIAudioCodecPCMA and TVIAudioCodecG722 operate at 64 kbps. Setting a maximum bitrate for these codecs results in a loss of audio and video.
  • Setting a maximum bitrate for TVIAudioCodecISAC results in a crash.
  • Codec preferences do not function correctly in a hybrid codec Group Room. [CSDK-1733]
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Network handoff failure may occur if signaling connection loss is detected before the SCNetworkReachability callback is invoked.

2.0.0-preview2 (September 12, 2017)

200-preview2-september-12-2017 page anchor

Bug fixes

  • Resolved a potential crash when unpublishing Tracks right before disconnecting from a Room.
  • Fixed some properties which were missed during docs generation.

Known issues

  • The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35(link takes you to an external page)
  • Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52(link takes you to an external page)
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • The H.264 encoder does not support inputs in TVIPixelFormatYUV420PlanarFullRange or TVIPixelFormatYUV420PlanarVideoRange. [ISDK-1489]
  • The H.264 codec invokes UIApplication APIs from a background thread. [ISDK-1494]
  • H.264 frames can not be encoded or decoded while the application is foregrounded, but inactive. [ISDK-1495, ISDK-1496]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded.
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)
  • AVPlayer audio content does not mix properly with Room audio. #402(link takes you to an external page)
  • TVIAudioSinks added to a TVILocalAudioTrack do not raise any callbacks. #104(link takes you to an external page)
  • TVIAudioCodecPCMU, TVIAudioCodecPCMA and TVIAudioCodecG722 operate at 64 kbps. Setting a maximum bitrate for these codecs results in a loss of audio and video.
  • Setting a maximum bitrate for TVIAudioCodecISAC results in a crash.
  • Codec preferences do not function correctly in a hybrid codec Group Room. [CSDK-1733]
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Network handoff failure may occur if signaling connection loss is detected before the SCNetworkReachability callback is invoked.

2.0.0-preview1 (September 11, 2017)

200-preview1-september-11-2017 page anchor

Our first 2.0 preview release delivers several important features including:

  • Support for the H.264 video codec.
  • Audio and video codec selection including iSAC, VP9 and more.
  • Sender side bandwidth controls.
  • Tracks can be named, and are assigned Server identifiers (SIDs).
  • A new object model which separates Track media and signaling, paving the way for selective subscription controls.

The full list of changes is:

  • Added TVIRemoteAudioTrack and TVIRemoteVideoTrack. These new classes are derived from TVIAudioTrack and TVIVideoTrack respectively. They have following common properties:
    • sid - Returns a unique identifier for the Track within the scope of a Room
    • isSubscribed - Indicates if the TVILocalParticipant is receiving audio or video.
  • Added a playbackEnabled property to TVIRemoteAudioTrack which allows developers to mute the audio received from a remote Participant.
  • Migrated the functionality of TVIParticipant into a new class called TVIRemoteParticipant. TVILocalParticipant and TVIRemoteParticipant are now derived from TVIParticipant.
  • Renamed TVIParticipantDelegate to TVIRemoteParticipantDelegate and changed the delegate to return TVIRemoteParticipant, TVIRemoteAudioTrack, and TVIRemoteVideoTrack in callbacks.
  • Added the following methods to TVIRemoteParticipantDelegate:
    • subscribedToAudioTrack:forParticipant: - Audio will start flowing from a remote Participant's audio Track after receiving this event.
    • unsubscribedFromAudioTrack:forParticipant: - Audio will stop flowing from a remote Participant's audio Track after receiving this event.
    • subscribedToVideoTrack:forParticipant: - Video will start flowing from a remote Participant's video Track after receiving this event.
    • unsubscribedFromVideoTrack:forParticipant: - Video will stop flowing from a remote Participant's video Track after receiving this event.
  • Renamed TVITrackStats to TVIRemoteTrackStats, TVIAudioTrackStats to TVIRemoteAudioTrackStats and TVIVideoTrackStats to TVIRemoteVideoTrackStats
  • Added TVITrackPublication, TVIAudioTrackPublication and TVIVideoTrackPublication which represent the mapping between a Track and its server generated sid.
  • The audioTracks and videoTracks getters on TVIParticipant now return TVITrackPublications instead of TVITracks.
  • Added TVILocalAudioTrackPublication and TVILocalVideoTrackPublication to represent a published TVILocalAudioTrack and TVILocalVideoTrack. Track publication classes are derived from TVIAudioTrackPublication and TVIVideoTrackPublication respectively.
  • Renamed [TVILocalParticipant addAudioTrack:] and [TVILocalParticipant addVideoTrack:] to [TVILocalParticipant publishAudioTrack:] and [TVILocalParticipant publishVideoTrack:].
  • Added TVILocalParticipantDelegate which provides the following callbacks:
    • localParticipant:publishedAudioTrack: - Invoked when a local audio Track has been published to a Room.
    • localParticipant:publishedVideoTrack: - Invoked when a local video Track has been published to a Room.
  • Added localAudioTracks and localVideoTracks collections to TVILocalParticipant. These collections return TVILocalAudioTrackPublications and TVILocalVideoTrackPublications respectively.
  • Added a name property to TVITrack. Names can be assigned to a TVILocalAudioTrack and TVILocalVideoTrack using their class factory methods.
  • Removed the trackId property from TVITrack and moved it into TVILocalAudioTrack and TVILocalVideoTrack.
  • Added TVIAudioCodec and TVIVideoCodec as part of the new codec preferences API. Audio and video codec preferences can be set in TVIConnectOptions.
  • Added TVIRemoteAudioTrackPublication and TVIRemoteVideoTrackPublication to represent a remote Participant's published audio and video Tracks. Track publication classes are derived from TVIAudioTrackPublication and TVIVideoTrackPublication respectively.
  • Added TVIEncodingParameters which constrains how much bandwidth is used to share audio and video. This object has been added to TVIConnectOptions and can also be set on TVILocalParticipant after joining a Room.
  • Added support for the H.264 video codec in Peer-to-Peer and Group Rooms.

Bug fixes

  • Fixed a potential crash when calling [TVIRoom disconnect:] before [TVIRoomDelegate didConnectToRoom:] is called and then destroying the TVIRoom in the [TVIRoomDelegate room\:didDisconnectWithError:] callback.

Known issues

  • The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35(link takes you to an external page)
  • Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52(link takes you to an external page)
  • Unpublishing and republishing a TVILocalAudioTrack or TVILocalVideoTrack might not be seen by Participants. #34(link takes you to an external page)
  • The H.264 encoder does not support inputs in TVIPixelFormatYUV420PlanarFullRange or TVIPixelFormatYUV420PlanarVideoRange. [ISDK-1489]
  • The H.264 codec invokes UIApplication APIs from a background thread. [ISDK-1494]
  • H.264 frames can not be encoded or decoded while the application is foregrounded, but inactive. [ISDK-1495, ISDK-1496]
  • Typically, a maximum of three H.264 encoders can be used at once. When this limit is exceeded no errors are raised and new video Tracks are not encoded.
  • There is a potential crash when unpublishing Tracks right before disconnecting from a Room.
  • Participant disconnect event can take up to 120 seconds to occur. #99(link takes you to an external page)
  • AVPlayer audio content does not mix properly with Room audio. #402(link takes you to an external page)
  • TVIAudioSinks added to a TVILocalAudioTrack do not raise any callbacks. #104(link takes you to an external page)
  • TVIAudioCodecPCMU, TVIAudioCodecPCMA and TVIAudioCodecG722 operate at 64 kbps. Setting a maximum bitrate for these codecs results in a loss of audio and video.
  • Setting a maximum bitrate for TVIAudioCodecISAC results in a crash.
  • Codec preferences do not function correctly in a hybrid codec Group Room. [CSDK-1733]
  • Publishing H.264 video at greater than 1280x720 @ 30fps is not supported. If a failure occurs then no error is raised to the developer. [ISDK-1590]
  • Network handoff failure may occur if signaling connection loss is detected before the SCNetworkReachability callback is invoked.

Need some help?

Terms of service

Copyright © 2024 Twilio Inc.