- 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