- Fixed a crash caused by AVCaptureSession in DefaultCameraCaptureSource when repeatedly toggling camera on/off.
- Add Obj-C support for BackgroundReplacementConfiguration and BackgroundReplacementVideoFrameProcessor
- Support configurable reconnecting timeout
- Fixed dependency conflicts when importing no-video-codecs flavour using CocoaPods
- Fixed invalid bundle error when integrating Machine Learning SDK using SPM
- Improved the Media SDK binary size
- Allow A2DP Bluetooth speakers to be used as audio outputs
- Fixed a bug in "Output Only" mode where receiving a phone call and hanging up would cause audio output to stop working and disconnect the attendee after 30 seconds
- Added support for building with Xcode 15.
- Added privacy manifest files to media and machine learning dependencies.
- The privacy manifest is a beta feature. Please comment on the linked Github issue for any suggestions or issues encountered related to the privacy manifest: #624
- Added code signatures to iOS SDK as well as media and machine learning dependencies.
- Added
AudioDeviceCapabilities
toAudioVideoConfiguration
, which allows configuring whether the audio input and output devices are enabled or disabled before starting a meeting.- Audio recording permissions will only be required when using
AudioDeviceCapabilities.inputAndOutput
- [Demo] Added picker to join screen to configure the audio device capabilities
- Audio recording permissions will only be required when using
- Fixing a race condition in the SDK layer when SDK is built with Xcode 15.
- Fixed a SIGABRT crash in the machine learning dependency when SDK is built with Xcode 15.
-
Breaking Removed support for Bitcode as Xcode 15 has removed support for Bitcode.
- Migration Guide:
- If previously building an app with Bitcode, build without bitcode enabled or build with Xcode 15.
- If downloading binaries from Github, there should be no change in the name of the binary, but note there will only be one binary available for download and it will not contain Bitcode.
- If downloading directly from the link address used on Github and were previously not using Bitcode, remove the string
-without-bitcode
from your url strings. - If using Cocopods, edit your Podfile to remove
-Bitcode
and-No-Bitcode
from all Amazon Chime SDK pod names. - If using SPM, no changes are required.
- Migration Guide:
-
Breaking Removed support for iOS 11. Apps building with the Amazon Chime SDK must target iOS 12 or above.
-
Breaking Removed
AudioMode.nodevice
, which is now replaced byAudioDeviceCapabilities.none
. Apps which previously usedAudioMode.nodevice
can achieve the same functionality by usingAudioDeviceCapabilities.none
when constructing anAudioVideoConfiguration
, e.g.AudioVideoConfiguration(audioDeviceCapabilities: .none)
.
- Fixed content share doesn't resume correctly after auto reconnection
- Add support for high-definition WebRTC sessions with 1080p webcam video and 4K screen share, and decode support for VP9. Developers can choose video encoding bitrates up to 2.5Mbps, frame rates up to 30fps.
- Add a new alternative media binary
AmazonChimeSDKMediaNoVideoCodecs
that excludes software video codecs. This can be used to replaceAmazonChimeSDKMedia
if developers do not need video and content share functionality, or software video codec support.
- Fixed Obj-C support for BackgroundBlurVideoFrameProcessor and BackgroundBlurConfiguration
- Support sending and receiving redundant audio data to help reduce the effects of packet loss on audio quality. See README for more details.
- [Demo] Added picker in join screen to enable and disable audio redundancy
- [Demo] Added SPM target
- Pass client UTC offset to audio and video client for metrics.
- Give explicit type for empty dictionary to fix Xcode 14.3 compile error.
- Added support for building with Xcode 14.
- Breaking Updated the Ingestion related APIs / classes to support generic attributes, no changes required if not using custom
EventClientConfiguration
and the following classes.- Changed
SDKEvent.eventAttributes
fromEventAttributes
to String-keyed map - Added
tag
,metadataAttributes
toEventClientConfiguration
- Replaced class
IngestionMetadata
with Dictionary[String: AnyCodable?]
- Changed
- Use xcframework for
AmazonChimeSDKMedia
dependency by default. - [Documentation] Updated Readme to reflect
AmazonChimeSDKMedia
dependency used is an xcframework by default.
- Breaking Removed support for Xcode versions less than Xcode 14. This includes removing support for iOS versions less than iOS 11. See Xcode 14 release notes for all deprecations and removals of support.
- Fixed osVersion is missing in ingestion event
- [Demo] Replaced toast-swift with custom toast implementation to fix the demo build errors
- Added additional session statuses for audio device I/O timeouts.
- Fixed data message handling null terminator when sending
- [Demo] Fix slow video rendering issue in demo app.
- Fixed data message sending non-UTF8 bytes issue
- Fixed bugs that occured at video capacity
- [Demo] Updated demo to use new functionality to prevent camera from toggling at video limit
- Added support to set max bit rate for local video and content share
- [Demo] Add video configuration options to set max bit rate for local video in meeting
- [Demo] Fixed frame rate display in device selection view
- Changed
updateDeviceCaptureFormat
to match fps after resolution
- Breaking Fixed
SegmentationProcessor
protocol warnings. This change migrates theSegmentationProcessor
from Swift to Objective-C. In the process, the first named parameterheight
is removed.
- Added support to expose simulcast configuration
- [Demo] Fixed an issue where selecting multiple locations of same locale does not throw error.
- Added background blur and background replacement features. See background video filters for more details.
- [Demo] Adder two new video filters - background blur and replacement.
- Added support default initializer support for
DefaultVideoRenderView
for convenience.
- Added arm64 simulator slice
- Added replicated meeting guide.
- Added proper call of demotion callback on audio or video disconnection.
- [Demo] Added overridden endpoint url capability to live transcription API.
- Added support to live transcription for new features including personally identifiable information content identification and redaction, partial results stabilization, custom language models, and language identification for Amazon Transcribe and PHI content identification for Amazon Transcribe Medical.
- [Demo] Added language identification configuration for live transcription API.
- Added the meetingStartDurationMs event in ingestionEvents to record the time that elapsed between the start request and the beginning of the meeting.
- Added priority based downlink policy to control the way how a recipient subscribes to the remote video sources. i.e.
updateVideoSourceSubscriptions(_:_:)
inVideoClientController
.
- Changed ContentShareController to use inbound turn credentials
- Added APIs for Audio Video configuration i.e
AudioVideoConfiguration
to be used during a meeting session. - Added support for joining meetings using one of
AudioMode.Mono16K
,AudioMode.Mono48K
andAudioMode.Stereo48K
audio modes. - Breaking The
AudioMode.Stereo48K
will be set as the default audio mode if not explicitly specified when starting the audio session. Earlier, Mono/16KHz audio was the default and the only audio mode supported. - [Demo] Added ways to join a meeting using various audio modes.
- Supports integration with Amazon Transcribe and Amazon Transcribe Medical for live transcription. The Amazon Chime Service uses its active talker algorithm to select the top two active talkers, and sends their audio to Amazon Transcribe (or Amazon Transcribe Medical) in your AWS account. User-attributed transcriptions are then sent directly to every meeting attendee via data messages. Use transcriptions to overlay subtitles, build a transcript, or perform real-time content analysis. For more information, visit the live transcription guide.
- [Demo] Added meeting captions functionality based on the live transcription APIs. You will need to have a serverless deployment to create new AWS Lambda endpoints for live transcription. Follow the live transcription guide to create necessary service-linked role so that the demo app can call Amazon Transcribe and Amazon Transcribe Medical on your behalf.
- Fixed an issue that returns the
Other
type one of 2 duplicate audio devices on iOS 15.
- Fixed an issue where sending a ByteArray through data message fails
- Exposed torch availability
- Fixed an issue where audio session is stopped when switch between bluetooth device and speaker.
- Fixed an issue on iOS 15 where
DefaultDeviceController
returns a duplicate entry for bluetooth audio device inlistAudioDevices()
.
- Breaking (internal APIs) Removed unused and incorrect
isDeviceFrontFacing
andsetFrontCameraAsCurrentDevice
from internalVideoClientController
. Removed internalVideoDevice
constructors forMediaDevice
.
- Added events ingestion to report meeting events to Amazon Chime backend.
- [Documentation] Fixed active speaker observer example in README which if used caused a memory leak.
- [Demo] Fixed video flickering when active speaker updates.
- [Documentation] Added sample code to the meeting event guide
- [Documentation] Fixed documentation to say
Amazon Voice Focus
instead ofvoice focus
- [Documentation] Updated instruction of enabling content share in README
- Disabled simulcast for P2P calls, which helps improving video quality of two-party meetings.
- Added additional constructor of
MeetingSessionConfiguration
to create it withoutexternalMeetingId
- Fixed an issue where
VideoCaptureFormat
andDefaultModality
are not exposed to ObjC. - Fixed a concurrency issue on
DefaultCameraCaptureSource
betweenstart()
andstop()
invocations. - Fixed an issue where
MeetingHistoryEvent
did not expose its properties. - Fixed
CreateMeetingResponse
andMeetingSessionConfiguration
to have nullableexternalMeetingId
since this is not required. - [Demo] Fixed demo application to handle null
externalMeetingId
. - [Demo] Fixed demo application where
InAppScreenShare
doesn't restart due to observer not added.
- Enabled send-side bandwidth estimation in video client, which improves video quality in poor network conditions.
- Pass SDK metadata to Media AudioClient for metrics.
- Fixed few memory leaks in the SDK layer.
- Fixed a memory leak that occurred stopping meeting with just audio.
- Fixed a memory leak that occurred stopping meeting when local video was on.
- Fixed a memory leak that occurred stopping meeting when content share was on.
DefaultAudioClientController
takes additional parameter ofActiveSpeakerDetectorFacade
- Breaking
DefaultAudioVideoController
takes additional parameter ofVideoTileController
. - [Demo] Demo application is updated to remove observer or sink it adds.
- Breaking
DefaultActiveSpeaker
no longer depends onAudioClientObserver
.
- Added support for XCFramework. AmazonChimeSDK and AmazonChimeSDKMedia binaries now contain .xcframework format as well. See
README.md
for updated Setup instructions. - Added Analytics
- Added
EventAnalyticsController
,EventAnalyticsFacade
,EventAnalyticsObserver
to handle analytics. - Added
EventAttributesName
,EventName
for meeting event information. - Added
externalMeetingId
to property ofMeetingSessionConfiguration
. - Breaking Added
eventAnalyticsController
to property ofMeetingSession
. - [Demo] Added
PostLogger
to demonstrate making HTTP POST request to server with logs. - [Documentation] Added usage guide for analytics.
- Added
- Analytics
- Changed to take
EventAnalyticsController
as an additional parameter ofDefaultAudioClientObserver
,DefaultAudioClientController
constructor. - Breaking Changed to take
EventAnalyticsController
as an additional parameter ofDefaultAudioVideoFacade
constructor.
- Changed to take
- Fixed data message conversion that sometimes does not handle null terminator when converting from string to c-string. (Issue #217)
- Breaking Added content share metrics as new enums in
ObservableMetric
. - Added content share APIs that supports a 2nd video sending stream such as screen capture, read content share guide for details.
- Added in app only screen share to demo app.
- Added
AmazonChimeSDKDemoBroadcast
Broadcast Upload Extension to the demo app to share device level screen. - Added message for video tiles paused by poor network in demo app.
- Update demo application to pause/resume remote videos and stop/start local video when app is in background/foreground
- [Documentation] Added usage documentation.
- Fix the demo application bug that front camera video was not mirrored without selecting video device on the video preview page.
- Fix the ObjC demo application issue that remote VideoRenderView was not cleared when remote video tile was removed.
- Breaking
AudioVideoFacade
now also implementsContentShareController
. - Breaking
DefaultAudioVideoFacade
init requires aContentShareController
instance. - Update text of additional options on demo app.
MeetingSessionURLs
andMeetingSessionCredentials
now conform toCodable
.- Changes that support a speed up of video client initialization.
videoClientRequestTurnCreds
callback will only be invoked as a backup for media layer logic. The signaling url is now passed into video client start. A new callbackvideoClientTurnURIsReceived
will be invoked when TURN uris are received by the client. This allows urls to be modified with urlRewriter or customer builder logic.
- Fix a bug that internal capture source was not stopped properly when the video client was being stopped. (Issue #200)
- Fix a bug that
self
was weakly-referenced incorrectly in several closures and causedaudioClient.stopSession()
not being called as expected. (Issue #193)
- Breaking Remove the internal video tile mapping entry not only when the video is unbound, but also when the video is removed. This fixes
videoTileDidAdd(tileState)
is sometimes not called issue, and provides better API symmetry so that builders no longer need to callunbindVideoView(tileId:)
if they did not callbindVideoView(videoView:tileId:)
.- After this fix, the internal video tile mapping entry will be removed before
videoTileDidRemove(tileState:)
callback is called. Please check yourVideoTileObserver
s and make sure yourvideoTileDidRemove(tileState:)
handlers do not call any SDK APIs that depend on the existance of video tiles (e.g.bindVideoView(videoView:tileId:)
).
- After this fix, the internal video tile mapping entry will be removed before
- Added new APIs in
RealtimeControllerFacade
to enable/disable Amazon Voice Focus (ML-based noise suppression) and get the on/off status of Amazon Voice Focus. - Added Amazon Voice Focus feature in Swift demo app.
- Added more verbose logging from media layer to SDK layer for builders to control log level. Set
LogLevel
toINFO
or above for production application to not be bombarded with logs. - Added
getActiveAudioDevice
API inDefaultDeviceController
. - Added
VideoFrame
,VideoRotation
,VideoContentHint
,VideoFrameBuffer
,VideoFramePixelBuffer
classes, enums, and interfaces to hold video frames of various raw types. - Added
VideoSource
andVideoSink
to facilitate transfer ofVideoFrame
objects. - Added
CameraCaptureSource
,CaptureSourceError
,CaptureSourceObserver
,VideoCaptureFormat
, andVideoCaptureSource
interfaces and enums to facilitate releasing capturers as part of the SDK. - Added
DefaultCameraCaptureSource
implementation ofCameraCaptureSource
. - Added
listVideoDevices
andlistSupportedVideoCaptureFormats
toMediaDevice.Companion
. - Added TURN uris received callback.
- Fixed
DefaultDeviceController
not removing itself as observer fromNotificationCenter
after deallocation and causes crash in Swift demo app. - Fixed a crash in Swift demo app when user opens the device selection Action Sheet in iPad.
- Fixed a crash in Swift demo app when building with Xcode 12:
DefaultActiveSpeakerPolicy.init()
not implemented. - Fixed a bug in Swift demo app: self video disappears when a remote video tile is added.
- Fixed a bug in Swift demo app: MeetingModel is not deallocated properly after meeting ends.
- Breaking Changed behavior to no longer call
videoTileSizeDidChange
when a video is paused to fix a bug where pausing triggered this callback with width=0 and height=0. - Fixed
videoTileDidAdd
not being called for paused tiles.
- Breaking Changed default log level of
ConsoleLogger
to INFO. - The render path has been changed to use
VideoFrame
s for consistency with the send side, this includes:- Breaking
VideoTileController.onReceiveFrame
now takesVideoFrame?
instead ofCVPixelBuffer?
.- Builders with a custom
VideoTileController
will have to update APIs correspondingly. All currentVideoFrame
objects used by the SDK will containVideoFramePixelBuffer
buffers, which containCVPixelBuffer
s internally.
- Builders with a custom
- Breaking
VideoTile.renderFrame
now takesVideoFrame
instead ofCVPixelBuffer?
and has been replaced by extendingVideoSink
and usingonReceivedVideoFrame
.- Builders with a custom
VideoTile
will have to update APIs correspondingly. All currentVideoFrame
objects used by the SDK will containVideoFramePixelBuffer
buffers, which containCVPixelBuffer
s internally.
- Builders with a custom
- Breaking
VideoRenderView
is now just aVideoSink
(i.e. it now acceptsVideoFrame
object viaVideoSink.onReceivedVideoFrame
rather thenCVPixelBuffer?
viarender
).- Builders with a custom
VideoTile
will have to update APIs correspondingly. All currentVideoFrame
objects used by the SDK will containVideoFramePixelBuffer
buffers, which containCVPixelBuffer
s internally.
- Builders with a custom
- Breaking
- If no custom source is provided, the SDK level video client will use a
DefaultCameraCaptureSource
instead of relying on capture implementations within the AmazonChimeSDKMedia framework; though behavior should be identical, please open an issue if any differences are noticed. - Added additional, optional
id
(unique ID) parameter toMediaDevice
for video capture devices.
- Changed the max number of remote video tiles per page in the Swift demo app from 2 to 6.
- Breaking The returned label for the Built-In Speaker
MediaDevice
has been changed from "Build-in Speaker" to "Built-in Speaker". - Breaking
timestampMs
onDataMessage
type is changed toInt64
to prevent overflow on 32-bit system. - Changed
maxRemoteVideoTileCount
in the Swift demo app from 8 to 16. Now the Swift demo app can support at most 16 remote video tiles.
- Fixed a crash when joining meeting on device with 32-bit system (iPhone 5/5c) due to integer overflow in
DefaultActiveSpeakerDetector
- Fixed a crash when sending DataMessage on 32-bit system (iPhone 5/5c)
- Fixed a crash when opening ObjC demo app on iPhone 5/5c
- Breaking Removed audio permission check in
DefaultAudioVideoController
which is performed inDefaultAudioClientController
. For developers who has their ownAudioClientController
implementation, please make sure to check audio permission instart()
.
- Fixed a bug that attendee events got filtered out due to absence of
externalUserId
DefaultDeviceController
now uses the correctMediaDeviceType
for the default Built-In Speaker. (#62)
- Breaking Added additional
externalUserId
field forMeetingSessionCredentials
- Added video pagination feature in the Swift demo app. Remote videos will be paginated into several pages. Each page contains at most 2 remote videos, and user can switch between different pages. Videos that are not being displayed will not consume any network bandwidth or computation resource.
- Added active-speaker-based video tile feature in the Swift demo app. Video tiles of active speakers will be promoted to the top of the list automatically.
- Breaking Changed the behavior of
DefaultVideoRenderView
so that it clears the internalImageView
when it receives a nil frame. - Changed the Swift demo app so that it will not subscribe to video streams when user is not viewing the Videos tab.
- Fixed a bug that attendee events got filtered out due to absence of
externalUserId
- Fixed the video flicker issue when binding video tile to a recycled
DefaultVideoRenderView
. - Fixed the local video binding issue when local video was not enabled yet.
- Added data message API
- Breaking Added
videoTileSizeDidChange
API inVideoTileObserver
for video stream content size change - Breaking Added
isLocalTile
to constructor ofDefaultVideoTile
andVideoTileState
- CallKit integration in demo app. Added options to join meeting as incoming or outgoing call. Since our demo app does not have Push Notification for incoming calls, we mimic the behavior by delaying reporting incoming calls to give user time to background the app or lock screen.
- Added icons and launch screen for demo app
- Added attendee id to local video tile
- Breaking Throw MediaError.audioFailedToStart when AudioClient fails to start
- Breaking Changed the constructor for
DefaultVideoTileController
- Changed UI for iOS demo app
DefaultVideoRenderView
now supports dynamically changingcontentMode
at run time.- Changed video render frame type from
Any?
toCVPixelBuffer?
DefaultAudioClientController
no longer defaults to Speaker as audio output when starting audio session.
- Breaking Added
start(callKitEnabled:)
inAudioVideoControllerFacade
to accept a Bool typecallKitEnabled
parameter, which is set tofalse
by default inDefaultAudioVideoFacade
. Pass intrue
if your VoIP call has CallKit integration so that audio session interruptions are properly handled by the SDK.
start()
inDefaultAudioVideoFacade
now assumes the VoIP call to start has no CallKit integration by default to properly handle audio session interruptions. Usestart(callKitEnabled:)
to override the default behavior for calls that have CallKit integration.- Initializers of all the public SDK classes are now publicly accessible to builders.
- Fixed random crashes caused by concurrency issues.
- Breaking Added
attendeesDidDrop
API inRealtimeObserver
for attendee who got dropped
- Breaking Added additional fields for
CreateAttendeeResponse
andCreateMeetingResponse
- Breaking Added
audioSessionDidDrop
API inAudioVideoObserver
for temporary disconnects - Added
Versioning
class andsdkVersion
API for retrieving current version of SDK - Added
init(frame: CGRect)
initializer inDefaultVideoRenderView
to properly initializeDefaultVideoRenderView
in ObjC code. - Added basic video features and
MetricsObserver
callback handler in the ObjC demo app. - Added multiple video tiles support in Swift demo app.
- Added attendee name label in Swift demo app.
- Added new parameter
urlRewriter
inMeetingSessionConfiguration
for customizing url
- Updated demo app to work with updated amazon-chime-sdk-js serverless demo. Note that you will need to redeploy the serverless demo to work with the updated demo app
- Updated methods for
AudioVideoObserver
,RealtimeObserver
,DeviceChangeObserver
,VideoTileObserver
, andMetricsObserver
to be called on main thread. Make sure to dispatch long-running tasks to another thread to avoid blocking the main thread.
- Fixed main thread freezing issue caused by calling
stop()
when in reconnecting state - Fixed a bug where
audioSessionDidStopWithStatus()
was not getting called after callingstop()
- Fixed an issue in
bindVideoView()
, unbind first to prevent unexpected side effect. - Fixed an issue that blocked user from removing paused video tiles.
- Turn on library evolution and module stability
- Added full bitcode support in
AmazonChimeSDKMedia.framework
andAmazonChimeSDK.framework
. Also added corresponding versions without bitcode. Links can be found in the README file.
- Fix bug where external id for self is sometimes empty
- Enable BUILD_LIBRARY_FOR_DISTRIBUTION to add Xcode 11.4 (Swift 5.2) support