Changelog: Twilio Video iOS 2.x
The Twilio Programmable Video SDKs use Semantic Versioning.
2.12.0 (October 22, 2020)
Maintenance
- Re-introduced support for iOS 32-bit architectures (
armv7
andi386
).
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
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
2.11.0 (September 15, 2020)
This release improves support for local network privacy 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.
Enhancements
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
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
.
let connectOptions = TVIConnectOptions(token: accessToken) { (builder) in
// A permissions request may be triggered on iOS 14.
builder.networkPrivacyPolicy = .allowAll
})
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
- Fixed an SCTP related WebRTC security vulnerability detailed here.
Maintenance
- Removed support for iOS 32-bit architectures (
armv7
andi386
).
Known Issues
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
2.10.2 (October 29, 2019)
Bug Fixes
- Fixed a crash on the iOS 13 simulator when rendering received H.264 video, or any other video in the
TVIPixelFormatYUV420BiPlanarFullRange
orTVIPixelFormatYUV420BiPlanarVideoRange
formats. [ISDK-2631] - Fixed a bug where
TVICameraSource
might produce distorted frames after being interrupted withAVCaptureSessionInterruptionReasonVideoDeviceInUseByAnotherClient
on iOS 13.0. #53
Known Issues
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
2.10.1 (August 16, 2019)
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
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
2.10.0 (April 24, 2019)
This release adds support for publish only Participants (such as a ReplayKit Broadcast Extension) 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
- Selecting
let connectOptions = TVIConnectOptions(token: accessToken) { (builder) in
builder.automaticSubscriptionEnabled = true
builder.roomName = "my-room"
}
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
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
2.9.0 (April 18, 2019)
API Changes
- Implemented the Network Quality functionality for Group Rooms:
- To enable the Network Quality functionality, set the
TVIConnectOptions.networkQualityEnabled
property toYES
when connecting to a Group Room. - To determine the current network quality level for your Local Participant, query the
TVILocalParticipant.networkQualityLevel
. Note, this will returnTVINetworkQualityLevelUnknown
if:- The
TVIConnectOptions.networkQualityEnabled
property was set toNO
OR - Using a Peer-to-Peer room OR
- The network quality level has not yet been computed
- The
- Network Quality Level for Remote Participants will be available in a future release.
- Implementing
[TVILocalParticipantDelegate localParticipant:networkQualityLevelDidChange:]
method on yourTVILocalParticipantDelegate
will allow you to receive callbacks when the network quality level changes.
- To enable the Network Quality functionality, set the
@IBAction func connectToRoom(sender: AnyObject) {
let connectOptions = TVIConnectOptions(token: accessToken) { (builder) in
builder.networkQualityEnabled = true
builder.roomName = "my-room"
}
room = TwilioVideo.connect(with: connectOptions, delegate: self)
}
...
// MARK: TVILocalParticipantDelegate
func localParticipant(_ participant: TVILocalParticipant, didChange networkQualityLevel: TVINetworkQualityLevel) {
print("Network Quality Level Changed: \(networkQualityLevel)")
}
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
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
2.8.1 (March 21, 2019)
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 newTVICameraSource
could result in the 2nd source being interrupted.
Known Issues
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
2.8.0 (March 14, 2019)
API Changes
- Implemented the Dominant Speaker functionality for Group Rooms:
- To enable the dominant speaker functionality, set the
TVIConnectOptions.dominantSpeakerEnabled
property toYES
when connecting to a Group Room. - To determine the current dominant speaker, query the
TVIRoom.dominantSpeaker
property for aTVIRemoteParticipant
. Note, this will returnnil
if:- There is no dominant speaker OR
- The
TVIConnectOptions.dominantSpeakerEnabled
property was set toNO
OR - Using a Peer-to-Peer room
- When there is a dominant speaker, the
TVIRoom.dominantSpeaker
property will return the appropriateTVIRemoteParticipant
. - Implementing
[TVIRoomDelegate room:dominantSpeakerDidChange:]
method on yourTVIRoomDelegate
will allow you to receive callbacks when the dominant speaker in a Group Room changes. ThedominantSpeakerDidChange:
argument will contain theTVIRemoteParticipant
of the dominant speaker, ornil
if there is no longer a dominant speaker.
- To enable the dominant speaker functionality, set the
@IBAction func connectToRoom(sender: AnyObject) {
let connectOptions = TVIConnectOptions(token: accessToken) { (builder) in
builder.dominantSpeakerEnabled = true
builder.roomName = "my-room"
}
room = TwilioVideo.connect(with: connectOptions, delegate: self)
}
...
// MARK: TVIRoomDelegate
func room(_ room: TVIRoom, dominantSpeakerDidChange participant: TVIRemoteParticipant?) {
var identity = "N/A"
if let participant = participant {
identity = participant.identity
}
print("Dominant Speaker Changed: \(identity)")
}
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 whileTVIRoom.state == TVIRoomStateReconnecting
. [CSDK-2787]
Known Issues
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
2.7.0 (February 14, 2019)
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 includeTVIRoomStateReconnecting
.
- If you have application logic that depends on
// Before
func updateStatsDisplay() {
if let room = self.room,
room.state == .connected {
room.getStatsWith { ([TVIStatsReport]) in
// Populate UI with stats report.
}
}
}
// After
func updateStatsDisplay() {
if let room = self.room,
room.state == .connected || room.state == .reconnecting {
room.getStatsWith { ([TVIStatsReport]) in
// Populate UI with stats report.
}
}
}
- Added two new delegate methods to
TVIRoomDelegate
[TVIRoomDelegate room:isReconnectingWithError:]
- Invoked when the Client experiences a network interruption in signaling or media. TheTVIRoom.state
property will transition toTVIRoomStateReconnecting
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 whileTVIRoom.state == TVIRoomStateReconnecting
. [CSDK-2787]- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
2.6.0 (December 19, 2018)
API Changes
- Added properties to control the torch and camera zoom while capturing:
TVICameraSource.torchLevel
TVICameraSource.torchMode
TVICameraSource.zoomFactor
- Removed
TVICameraSourceOptions.torchMode
andTVICameraSourceOptions.torchLevel
. - Added
TVILocalVideoTrack.source
property to retrieve theTVIVideoSource
used when creating the local video track.
Bug Fixes
TVILocalVideoTrack.capturer
andTVILocalVideoTrack.constraints
no longer returnnil
when called while theVideoSource
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
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
2.6.0-preview2 (December 13, 2018)
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 suppliedTVICameraSourceOptions.torchMode
is set toAVCaptureTorchModeOn
. [ISDK-2327] - Introduced
[TVICameraSource initWithDelegate:]
method. - Introduced
TVICameraSourceOptions
andTVICameraSourceOptionsBuilder
classes, including options for the torch and camera zoom. - Replaced
[TVICameraSource initWithPreviewEnabled:delegate:]
with[TVICameraSource initWithOptions:delegate:]
, which acceptsTVICameraSourceOptions
. TVICameraSourceStartedBlock
now includes aTVIVideoFormat
argument.
Enhancements
- Added
[TVICameraSource updateVideoOrientation:]
method to enable manual control of orientation tags. #324 - 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
- Fixed a crash when downscaling RGB32 images tagged with
TVIVideoOrientationDown
. [ISDK-2307] TVIVideoSink.sourceRequirements
is populated after callingTVIVideoSink.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 aTVIAudioTrack
. - The return value for
TVICameraSource.init
is now correctly marked asnull_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
orTVILocalVideoTrack
might not be seen by Participants. #34 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
- 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
2.6.0-preview1 (December 3, 2018)
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 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
orTVILocalVideoTrack
might not be seen by Participants. #34 - Crash when downscaling RGB32 images tagged with
TVIVideoOrientationDown
. [ISDK-2307] TVIVideoSink.sourceRequirements
is not populated after callingTVIVideoSink.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
- 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
- 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
2.5.6 (December 5, 2018)
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
Known Issues
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
2.5.5 (November 28, 2018)
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 - 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
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
- 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
2.5.4 (November 26, 2018)
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
orTVILocalVideoTrack
might not be seen by Participants. #34 TVIVideoView
can display video which is rotated incorrectly on an iPhone XS, iPhone XS Max, or iPhone XR running iOS 12.1. #326- 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
- 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
- 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
2.5.3 (October 18, 2018)
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 consumingTwilioVideo.framework
can be run in an iOS 9.x simulator. #130 [ISDK-2207] - Fixed a crash in rendering a disabled
TVILocalVideoTrack
using OpenGL renderer. [ISDK-2211]
Known Issues
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
2.5.2 (October 8, 2018)
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 Cocoapoads dependency and is only available as a manual download from the Video iOS Releases page.
Known Issues
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
2.5.1 (October 4, 2018)
Bug Fixes
- Fixed a crash that occurs when disabling a
TVILocalVideoTrack
published with the H.264 codec. [ISDK-2210] #308
Known Issues
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
2.5.0 (September 27, 2018)
API Changes
- We have deprecated the usage of
TVIScreenCapturer
on iOS 12.0 and above, due to performance issues on some device andUIView
combinations. We recommend that anyone who is interested in sharing their screen use ReplayKit, along with a customTVIVideoCapturer
instead. We are putting the finishing touches on a new ReplayKit example app. #303
Known Issues
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
- A crash occurs when disabling a
TVILocalVideoTrack
published with the H.264 codec. [ISDK-2210] #308
2.4.1 (September 21, 2018)
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
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
- A crash occurs when disabling a
TVILocalVideoTrack
published with the H.264 codec. [ISDK-2210] #308
2.4.0 (August 28, 2018)
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 codeTVIErrorRoomRoomCompletedError
. - 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 toTVIAudioOptions
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
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
- A crash occurs when disabling a
TVILocalVideoTrack
published with the H.264 codec. [ISDK-2210] #308
2.3.0 (August 7, 2018)
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
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
- A crash occurs when disabling a
TVILocalVideoTrack
published with the H.264 codec. [ISDK-2210] #308
2.3.0-preview2 (August 2, 2018)
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
- Deprecated the usage of
TVIVideoRenderingType.OpenGLES
on iOS 12.0+ to match Apple's deprecation notice for OpenGLES.framework.
Bug Fixes
- The
TVIVideoRenderingType.OpenGLES
renderer doesn't display i420, and y420 frames produced by aTVIVideoCapturer
. [ISDK-2078] - Retry failed ICE Server requests up to
TVIIceOptions.iceServersTimeout
to increase reliability. - Fixed a crash which could occur when
AVAudioSession.inputNumberOfChannels == 0
andTVIDefaultAudioDevice
is used. [ISDK-2143] TVIDefaultAudioDevice
no longer overridesAVAudioSession.preferredInputNumberOfChannels
andAVAudioSession.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
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
- 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
- A crash occurs when disabling a
TVILocalVideoTrack
published with the H.264 codec. [ISDK-2210] #308
2.3.0-preview1 (June 29, 2018)
Enhancements
- This release is based on Chromium WebRTC 67.
TVIAVAudioSessionConfigurationBlock
now configuresAVAudioSession.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
andTVIAudioOptions.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 aTVIRemoteAudioTrack
.
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
- The SDK is compatible with Chrome 76+ in a Peer-to-Peer Room. #52
Known Issues
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - The
TVIVideoRenderingTypeOpenGLES
renderer doesn't display i420, and y420 frames produced by aTVIVideoCapturer
. [ISDK-2078] - A crash might occur when
AVAudioSession.inputNumberOfChannels == 0
andTVIDefaultAudioDevice
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
- 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
- A crash occurs when disabling a
TVILocalVideoTrack
published with the H.264 codec. [ISDK-2210] #308
2.2.2 (July 25, 2018)
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
- The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
2.2.1 (June 20, 2018)
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
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
2.2.0 (June 7, 2018)
Enhancements
TVIRoom
'sdelegate
property is no longer read only. #13- 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 - Fixed a bug where
[TVIVp8Codec isEqual:]
returnedYES
whenTVIVp8Codec.isSimulcast
did not match.
Known Issues
- The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
2.1.0 (May 25, 2018)
Enhancements
TwilioVideo.framework
is now built with the Xcode 9.3 toolchain.- Improved thread safety when accessing the
TVIVideoRenderer
collection inTVIVideoTrack
. - 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 - 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
- The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - 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
2.0.1 (May 4, 2018)
Features
TVIVideoView
now usesMTKView
from MetalKit.framework when Metal rendering is selected.
Bug Fixes
- Resolved a rare crash involving
TVIVideoView
and an internal class namedTVIDisplayLinkTimer
when Metal rendering is used. - Fixed a bug where the SDK could invoke
UIView
APIs on a background thread while invalidating aTVIVideoView
.
Known Issues
- The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - The aspect ratio in
TVIVideoView
could be incorrect. #266 - 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
2.0.0 (April 26, 2018)
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 usesCMTime
instead ofint64_t
(in microseconds). We've found that developers writing customTVIVideoCapturer
s 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 withCFTimeInterval
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 producesCMSampleBuffer
s.
// Before
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
CMTime presentationTimestamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
int64_t timestamp = (int64_t)(CMTimeGetSeconds( presentationTimestamp ) * INT64_C( 1000000 ));
TVIVideoFrame *frame = [[TVIVideoFrame alloc] initWithTimestamp:timestamp
buffer:CMSampleBufferGetImageBuffer( sampleBuffer )
orientation:TVIVideoOrientationUp];
[_captureConsumer consumeCapturedFrame:frame];
}
// After
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
TVIVideoFrame *frame = [[TVIVideoFrame alloc] initWithTimestamp:timestamp
buffer:CMSampleBufferGetImageBuffer( sampleBuffer )
orientation:TVIVideoOrientationUp];
[_captureConsumer consumeCapturedFrame:frame];
}
TVIVideoFrame
initializers are now marked asnullable
instead ofnull_unspecified
.- Added the optional
invalidateRenderer
method to theTVIVideoRenderer
protocol. This method, if implemented, will be invoked when aTVIVideoRenderer
object is removed from a video track by calling the[TVIVideoTrack removeRenderer:]
method. This method allows theTVIVideoRenderer
to perform any necessary cleanup that is required, for instance when theTVIVideoRender
is to be reused with a different video track. TVIVideoView
implements theinvalidateRenderer
protocol method and will now better support reusing the view between different video tracks. #240 Now, when aTVIVideoView
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
andmirror
properties are reset to their respective default values.
Bug Fixes
- The H.264 encoder now supports inputs in
TVIPixelFormatYUV420PlanarFullRange
orTVIPixelFormatYUV420PlanarVideoRange
.
Known Issues
- The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - The Video SDK could invoke
UIView
APIs on a background thread while invalidating aTVIVideoView
. - 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
2.0.0-beta4 (April 10, 2018)
Features
- Added a
framesEncoded
stats field toTVILocalVideoTrackStats
. - Removed
trackId
fromTVIBaseTrackStats
.trackSid
can be used to identify track stats in aTVIStatsReport
. - Removed
trackId
fromTVILocalAudioTrack
,TVILocalDataTrack
, andTVILocalVideoTrack
.trackSid
orname
can be used to identify local tracks. - Added
TVIRemoteAudioTrack.sid
,TVIRemoteVideoTrack.sid
andTVIRemoteDataTrack.sid
properties. - Replaced
TVIAudioCodec
enumeration withTVIAudioCodec
,TVIG722Codec
,TVIIsacCodec
,TVIOpusCodec
,TVIPcmaCodec
andTVIPcmuCodec
classes. - Replaced
TVIVideoCodec
enumeration withTVIH264Codec
,TVIVp8Codec
andTVIVp9Codec
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 aTVIRoom
object is created and when it connects. This issue could cause issues when theTVIRoom
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 - ICE URIs using the
turns
scheme are now supported. The SDK will now useturns
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
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - The H.264 encoder does not support inputs in
TVIPixelFormatYUV420PlanarFullRange
orTVIPixelFormatYUV420PlanarVideoRange
. [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
2.0.0-beta3 (March 21, 2018)
Enhancements
- Added the functions
TVIAudioSessionActivated()
andTVIAudioSessionDeactivated()
to support backgrounding for customTVIAudioDevice
s. [ISDK-1842] - Removed the
reconnectAfterReturningToForeground
property fromTVIConnectOptions
andTVIConnectOptionsBuilder
. 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 - Resolved a deadlock in
TVIAudioDevice
which could occur while invokingTVIAudioDeviceFormatChanged()
.
Known Issues
- The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - The H.264 encoder does not support inputs in
TVIPixelFormatYUV420PlanarFullRange
orTVIPixelFormatYUV420PlanarVideoRange
. [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
2.0.0-beta2 (February 27, 2018)
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
andTVIAudioDeviceExecuteWorkerBlock
. It should no longer be possible for these functions to access an invalidTVIAudioDeviceContext
.
Known Issues
- The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 TVIDefaultAudioDevice
is not able to play or record audio if the user joins a Room with a bluetooth device. #236- 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
orTVIPixelFormatYUV420PlanarVideoRange
. [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
2.0.0-beta1 (February 7, 2018)
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 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 addedTVIAudioFormat
which describes audio that is being captured and rendered. - Introduced
TwilioVideo.audioDevice
class property, and removedTVIConnectOptions.audioDevice
. You should set your audio device onTwilioVideo
before performing any other actions with the SDK such as creating Tracks or connecting to a Room. - The class factory methods for
TVILocalAudioTrack
andTVILocalDataTrack
now returnnullable
instances.
Bug Fixes
TVIDefaultAudioDevice
is not able to play or record audio after anAVAudioSessionInterruptionNotification
is triggered. #221
Known Issues
- The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 TVIDefaultAudioDevice
is not able to play or record audio if the user joins a Room with a bluetooth device. #236- 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
orTVIPixelFormatYUV420PlanarVideoRange
. [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
2.0.0-preview9 (January 19, 2018)
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
- The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 TVIDefaultAudioDevice
is not able to play or record audio if the user joins a Room with a bluetooth device. #236TVIDefaultAudioDevice
is not able to play or record audio after anAVAudioSessionInterruptionNotification
is triggered. #221- The H.264 encoder does not support inputs in
TVIPixelFormatYUV420PlanarFullRange
orTVIPixelFormatYUV420PlanarVideoRange
. [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
- AVPlayer audio content does not mix properly with Room audio. #402
2.0.0-preview8 (January 9, 2018)
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 usesAVCaptureSessionInterruptionReason
instead ofTVICameraCapturerInterruptionReason
.- Added subscription failure callbacks to
TVIRemoteParticipantDelegate
.failedToSubscribeToAudioTrack:error:forParticipant:
failedToSubscribeToDataTrack:error:forParticipant:
failedToSubscribeToVideoTrack:error:forParticipant:
- This release deprecates
TVIAudioController
and adds a newTVIDefaultAudioDevice
class. TheTVIDefaultAudioDevice
class allows you to record and playback audio and allows to configureAVAudioSession
when you are connected to a Room. TVIAudioController.startAudio()
andTVIAudioController.stopAudio()
have been removed in favor of a new property calledTVIDefaultAudioDevice.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 settingTVIDefaultAudioDevice.enabled
toNO
and can be enabled during the lifecycle of the Room by settingTVIDefaultAudioDevice.enabled
toYES
. The default value isYES
. 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 toTVIConnectOptions
while connecting to a Room.TVIRoom
has a new propertyaudioDevice
which points to the audio device used by the Room.
Examples #1 - Changing the audio route from speaker to receiver in a live call:
TVIDefaultAudioDevice *audioDevice = [TVIDefaultAudioDevice audioDevice];
//...connect to a Room with audioDevice. By default the audio route will be configured to speaker.
room.audioDevice.block = ^ {
// We will execute `kDefaultAVAudioSessionConfigurationBlock` first.
kDefaultAVAudioSessionConfigurationBlock();
// Overwrite the audio route
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *error = nil;
if (![session setMode:AVAudioSessionModeVoiceChat error:&error]) {
NSLog(@"AVAudiosession setMode %@",error);
}
if (![session overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:&error]) {
NSLog(@"AVAudiosession overrideOutputAudioPort %@",error);
}
};
room.audioDevice.block();
Example #2 - Connecting to a Room using the AVAudioSessionCategoryPlayback
category:
TVIDefaultAudioDevice *audioDevice = [TVIDefaultAudioDevice audioDeviceWithBlock:^ {
// Execute the `kDefaultAVAudioSessionConfigurationBlock` first.
kDefaultAVAudioSessionConfigurationBlock();
// Overwrite the category to `playback`
AVAudioSession *session = [AVAudioSession sharedInstance];
NSError *error = nil;
if (![session setCategory:AVAudioSessionCategoryPlayback
mode:AVAudioSessionModeVideoChat
options:AVAudioSessionCategoryOptionAllowBluetooth
error:&error]) {
NSLog(@"AVAudioSession setCategory:options:mode:error: %@",error);
}
}];
TVIConnectOptions *connectOptions = [TVIConnectOptions optionsWithToken:token
block:^(TVIConnectOptionsBuilder *builder) {
builder.audioDevice = audioDevice;
}];
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 asnull_unspecified
instead of inheriting fromNSObject.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 isnullptr
.
Known Issues
- The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 TVIDefaultAudioDevice
is not able to play or record audio if the user joins a Room with a bluetooth device. #236TVIDefaultAudioDevice
is not able to play or record audio after anAVAudioSessionInterruptionNotification
is triggered. #221- The H.264 encoder does not support inputs in
TVIPixelFormatYUV420PlanarFullRange
orTVIPixelFormatYUV420PlanarVideoRange
. [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
- AVPlayer audio content does not mix properly with Room audio. #402
2.0.0-preview7 (November 9, 2017)
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 [ISDK-1412]- The
name
parameter has been removed from theTVILocalDataTrack trackWithOptions:name:
method. Track names can now be provided in theTVIDataTrackOptions
object. [ISDK-1708] TVITrackPublication
strack
property now returnsnil
from within theunsubscribedFrom*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
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - The H.264 encoder does not support inputs in
TVIPixelFormatYUV420PlanarFullRange
orTVIPixelFormatYUV420PlanarVideoRange
. [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
- AVPlayer audio content does not mix properly with Room audio. #402
2.0.0-preview6 (November 3, 2017)
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
- The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - The H.264 encoder does not support inputs in
TVIPixelFormatYUV420PlanarFullRange
orTVIPixelFormatYUV420PlanarVideoRange
. [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
- AVPlayer audio content does not mix properly with Room audio. #402
TVIAudioSink
should pre-allocate buffers used on a real-time CoreAudio thread. #104 [ISDK-1412]
2.0.0-preview5 (October 23, 2017)
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 viaTVIConnectOptions
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
TVIConnectOptions *connectOptions = [TVIConnectOptions optionsWithToken:accessToken
block:^(TVIConnectOptionsBuilder *builder) {
builder.dataTracks = @[localDataTrack];
}];
TVIRoom *room = [TwilioVideo connectWithOptions:connectOptions delegate:self];
Publishing a TVILocalDataTrack
// ... Connected to room
TVILocalParticipant *localParticipant = room.localParticipant;
[localParticipant publishDataTrack:dataTrack];
Observing TVIRemoteDataTrackPublication
and TVIRemoteDataTrack
on TVIRemoteParticipantDelegate
@interface MyClass : NSObject <TVIRemoteParticipantDelegate>
// Participant has published data track
- (void)remoteParticipant:(nonnull TVIRemoteParticipant *)participant
publishedDataTrack:(nonnull TVIRemoteDataTrackPublication *)publication;
// Participant has unpublished data track
- (void)remoteParticipant:(nonnull TVIRemoteParticipant *)participant
unpublishedDataTrack:(nonnull TVIRemoteDataTrackPublication *)publication;
// Data track has been subscribed to and messages can be observed.
- (void)subscribedToDataTrack:(nonnull TVIRemoteDataTrack *)dataTrack
publication:(nonnull TVIRemoteDataTrackPublication *)publication
forParticipant:(nonnull TVIRemoteParticipant *)participant;
// Data track has been unsubsubscribed from and messages cannot be observed.
- (void)unsubscribedFromDataTrack:(nonnull TVIRemoteDataTrack *)dataTrack
publication:(nonnull TVIRemoteDataTrackPublication *)publication
forParticipant:(nonnull TVIRemoteParticipant *)participant;
@end
Sending messages on TVILocalDataTrack
NSString *message = @"Hello DataTrack!";
[localDataTrack sendString:message];
NSData *messageBuffer = [NSData dataWithBytes:bytes length:length];
[localDataTrack sendData:messageBuffer];
Observing messages from data track
@interface MyClass : NSObject <TVIRemoteDataTrackDelegate>
- (void)remoteDataTrack:(nonnull TVIRemoteDataTrack *)remoteDataTrack didReceiveString:(nonnull NSString *)message;
- (void)remoteDataTrack:(nonnull TVIRemoteDataTrack *)remoteDataTrack didReceiveData:(nonnull NSData *)message;
@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]
TVIAudioSink
s added to aTVILocalAudioTrack
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
Known Issues
- The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - The H.264 encoder does not support inputs in
TVIPixelFormatYUV420PlanarFullRange
orTVIPixelFormatYUV420PlanarVideoRange
. [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
- AVPlayer audio content does not mix properly with Room audio. #402
TVIAudioSink
should pre-allocate buffers used on a real-time CoreAudio thread. #104 [ISDK-1412]
2.0.0-preview4 (September 22, 2017)
Features
- Added a
trackSid
property toTVIBaseTrackStats
. - The
trackId
,ssrc
andcodec
properties inTVIBaseTrackStats
are now annotated asnonnull
.
Bug Fixes
TVIAudioCodecPCMU
,TVIAudioCodecPCMA
andTVIAudioCodecG722
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
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - The H.264 encoder does not support inputs in
TVIPixelFormatYUV420PlanarFullRange
orTVIPixelFormatYUV420PlanarVideoRange
. [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
- AVPlayer audio content does not mix properly with Room audio. #402
TVIAudioSink
s added to aTVILocalAudioTrack
do not raise any callbacks. #104- 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)
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
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - The H.264 encoder does not support inputs in
TVIPixelFormatYUV420PlanarFullRange
orTVIPixelFormatYUV420PlanarVideoRange
. [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
- AVPlayer audio content does not mix properly with Room audio. #402
TVIAudioSink
s added to aTVILocalAudioTrack
do not raise any callbacks. #104TVIAudioCodecPCMU
,TVIAudioCodecPCMA
andTVIAudioCodecG722
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)
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
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - The H.264 encoder does not support inputs in
TVIPixelFormatYUV420PlanarFullRange
orTVIPixelFormatYUV420PlanarVideoRange
. [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
- AVPlayer audio content does not mix properly with Room audio. #402
TVIAudioSink
s added to aTVILocalAudioTrack
do not raise any callbacks. #104TVIAudioCodecPCMU
,TVIAudioCodecPCMA
andTVIAudioCodecG722
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)
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
andTVIRemoteVideoTrack
. These new classes are derived fromTVIAudioTrack
andTVIVideoTrack
respectively. They have following common properties:sid
- Returns a unique identifier for the Track within the scope of aRoom
isSubscribed
- Indicates if theTVILocalParticipant
is receiving audio or video.
- Added a
playbackEnabled
property toTVIRemoteAudioTrack
which allows developers to mute the audio received from a remote Participant. - Migrated the functionality of
TVIParticipant
into a new class calledTVIRemoteParticipant
.TVILocalParticipant
andTVIRemoteParticipant
are now derived fromTVIParticipant
. - Renamed
TVIParticipantDelegate
toTVIRemoteParticipantDelegate
and changed the delegate to returnTVIRemoteParticipant
,TVIRemoteAudioTrack
, andTVIRemoteVideoTrack
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
toTVIRemoteTrackStats
,TVIAudioTrackStats
toTVIRemoteAudioTrackStats
andTVIVideoTrackStats
toTVIRemoteVideoTrackStats
- Added
TVITrackPublication
,TVIAudioTrackPublication
andTVIVideoTrackPublication
which represent the mapping between a Track and its server generatedsid
. - The
audioTracks
andvideoTracks
getters onTVIParticipant
now returnTVITrackPublication
s instead ofTVITrack
s. - Added
TVILocalAudioTrackPublication
andTVILocalVideoTrackPublication
to represent a publishedTVILocalAudioTrack
andTVILocalVideoTrack
. Track publication classes are derived fromTVIAudioTrackPublication
andTVIVideoTrackPublication
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
andlocalVideoTracks
collections toTVILocalParticipant
. These collections returnTVILocalAudioTrackPublication
s andTVILocalVideoTrackPublication
s respectively. - Added a
name
property toTVITrack
. Names can be assigned to aTVILocalAudioTrack
andTVILocalVideoTrack
using their class factory methods. - Removed the
trackId
property fromTVITrack
and moved it intoTVILocalAudioTrack
andTVILocalVideoTrack
. - Added
TVIAudioCodec
andTVIVideoCodec
as part of the new codec preferences API. Audio and video codec preferences can be set inTVIConnectOptions
. - Added
TVIRemoteAudioTrackPublication
andTVIRemoteVideoTrackPublication
to represent a remote Participant's published audio and video Tracks. Track publication classes are derived fromTVIAudioTrackPublication
andTVIVideoTrackPublication
respectively. - Added
TVIEncodingParameters
which constrains how much bandwidth is used to share audio and video. This object has been added toTVIConnectOptions
and can also be set onTVILocalParticipant
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 theTVIRoom
in the[TVIRoomDelegate room:didDisconnectWithError:]
callback.
Known issues
- The SDK is incompatible with Firefox 63+ in a Peer-to-Peer Room. #35
- Data Tracks might not be subscribed with Chrome 76+ in a Peer-to-Peer Room. #52
- Unpublishing and republishing a
TVILocalAudioTrack
orTVILocalVideoTrack
might not be seen by Participants. #34 - The H.264 encoder does not support inputs in
TVIPixelFormatYUV420PlanarFullRange
orTVIPixelFormatYUV420PlanarVideoRange
. [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
- AVPlayer audio content does not mix properly with Room audio. #402
TVIAudioSink
s added to aTVILocalAudioTrack
do not raise any callbacks. #104TVIAudioCodecPCMU
,TVIAudioCodecPCMA
andTVIAudioCodecG722
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 signaling connection loss is detected before the SCNetworkReachability callback is invoked.
Need some help?
We all do sometimes; code is hard. Get help now from our support team, or lean on the wisdom of the crowd by visiting Twilio's Stack Overflow Collective or browsing the Twilio tag on Stack Overflow.