- Updated SDK compile and target SDK level to 34 (Android 14)
- Changed resize logic for handling screen rotation in
DefaultScreenCaptureSource
to avoid restart the capturing, which lead to security exception - Registered required
MediaProjection.Callback
before creating the virtual display - [Demo] Declaimed required permissions for foreground service in manifest file
- [Demo] Fixed memory leak for
ScreenShareServiceConnection
after screen rotations - [Demo] Added
microphone
foreground service for app to still capture microphone audio after being backgrounded
- Changed resize logic for handling screen rotation in
- Support configurable reconnecting timeout.
- Added non-functional x86 stubs. Projects can now build Arm and x86 targets, which may be useful if bundling an app. x86 targets will not function and are not intended to be installed or run on any x86 device or emulator. Important: Only Arm devices are supported.
- 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 spinner to join screen to configure the audio device capabilities
- Audio recording permissions will only be required when using
- 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 = AudioDeviceCapabilities.None)
.
- Move BackgroundFilterVideoFrameProcessor.filterByteBuffer to local variable in getProcessedFrame() to prevent race condition
- 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
amazon-chime-sdk-media-no-video-codecs
that excludes software video codecs. This can be used to replaceamazon-chime-sdk-media
if developers do not need video and content share functionality, or software video codec support.
- Support sending and receiving redundant audio data to help reduce the effects of packet loss on audio quality. See README for more details.
- Pass client UTC offset to audio and video client for metrics.
- 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
- Changed
- Added additional session statuses for audio device I/O timeouts.
- [Demo] Fixed the remote video render delay
- Fixed bugs that occured at video capacity
- [Demo] Updated demo to use new functionality to prevent camera from toggling at video limit
- Fixed background filtered video rendering before joining a meeting session
- Fixed memory leak issue in rgba video rendering
- Gracefully deserialize malformed ingestion events JSON data in local database to prevent crashes.
- 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
- Use thread safe mutableSet for observers
- Changed
listSupportedVideoCaptureFormats
to find max fps from device - Added
AudioRecordingPresetOverride
to allow builders to pass in openSL ES recording preset configuration incase the default used by us does not work for some android devices.
- Fixed background blur and replacement pixelated video on desktop. (Issue aws-samples/amazon-chime-react-native-demo#145)
- Updated unit tests according to above fix
- Load model only when frame dimensions change
- Fixed crash from openGL due to potential race condition.
- [Demo] Fixed videos paused when change from other tabs to video tab and reopen app from background
- [Demo] Fixed screen sharing is unavailable to present videos
- [Demo] Fixed demo application not subscribing remote videos properly
- Added support for background blur and replacement video filter processor. See background video filters for more details.
- [Demo] Adder two new video filters - background blur and replacement.
- Added
audioStreamType
inAudioVideoConfiguration
for supporting audio stream configuration.
- Fixed calling start multiple times without stop crashes video in some phones. (Issue #356)
- Added replicated meeting guide.
- Added proper call of demotion callback on audio or video disconnection.
- Added support for media replication to link multiple WebRTC media sessions together to reach larger and global audiences. Participants connected to a replica session can be granted access to join the primary session and can switch sessions with their existing WebRTC connection.
- Catch and ignore the exception from rendering one video frame and move on to the next. This helps workaround a openGL error on some Android 12 devices at initial rendering phase.
- [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
- Added Maven Support for Android SDK.
- Fixed out of order logging on
TextureRenderView
. - Fixed Maven release process error and skipped 0.14.1
- 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.
- Fixed crash when rgba video frames are sent to DefaultVideoRenderView directly in preview use case.
- [Demo] Fixed demo app crashes when screen share is off and then leave meeting.
- Changed the silence threshold to 0.2 from 0.0 for
DefaultActiveSpeakerPolicy
(Issue #259) to be more consistent with other platform. - Expose weights/rates/thresholds to
DefaultActiveSpeakerPolicy
constructor to make builders easier to customizeDefaultActiveSpeakerPolicy
.
-
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.
- [Demo] Added binding to screen share service to avoid condition where screen share starts before service.
- Fixed an issue where
DefaultCameraCaptureSource
cannot be used withoutDefaultMeetingSession
(Issue #309)
- Breaking Changed the behavior of
DefaultScreenCaptureSource
to better handle failure cases (Issue #317).- Previously errors with getting the media projection either resulted in a SecurityException or silently failed.
- Now
onCaptureFailed
fromCaptureSourceObserver
will be called to handle errors with getting the media projection.
- Updated targetSdkVersion from 28 to 30
- Fixed Screen share rotation issue (Issue #289)
- [Demo] Fixed crash when end meeting while screen sharing
- Added events ingestion to report meeting events to Amazon Chime backend.
- [Documentation] Fixed documentation to say
Amazon Voice Focus
instead ofvoice focus
- [Documentation] Added sample code to the meeting event guide
- Disabled simulcast for P2P calls, which helps improving video quality of two-party meetings.
- [Demo] Fixed video flickering issue when active speakers were detected by using
DiffUtil
instead ofnotifyDataSetChanged
to update the video adapter. - Fixed
DefaultDeviceController
not passing correct route for USB headset.
- Enabled send-side bandwidth estimation in video client, which improves video quality in poor network conditions.
- Fixed
CreateMeetingResponse
andMeetingSessionConfiguration
to have nullableexternalMeetingId
since this is not required.
- Added additional constructor of
MeetingSessionConfiguration
to create it withoutexternalMeetingId
- Added
initializeAudioClientAppInfo
toAppInfoUtil
for use with audio client. - Added support for
TYPE_USB_HEADSET
inDefaultDeviceController
for cases like USB-C headphone. - Added
AUDIO_USB_HEADSET
as a new enum inMediaDeviceType
.
- Fixed
DefaultCameraCaptureSource
,DefaultSurfaceTextureCaptureSource
concurrency issue (Issue #221).
- Added Analytics
EventAnalyticsController
,EventAnalyticsFacade
,EventAnalyticsObserver
to handle analytics.- Added
EventAttributes
,EventName
,MeetingHistoryEventName
for meeting event information. - Added
externalMeetingId
to property ofMeetingSessionConfiguration
. - Added
PermissionError
toCaptureSourceError
. - Breaking Added
eventAnalyticsController
to property ofAudioVideoFacade
. - [Demo] Added
PostLogger
to demo application to showcase sending events to backend. - [Documentation] Added analytics API usage documentation.
- Analytics
- Breaking Changed to take
EventAnalyticsController
as an additional parameter ofDefaultAudioVideoFacade
constructor. - Changed to take
EventAnalyticsController
as an additional parameter ofDefaultAudioClientObserver
,DefaultAudioClientController
constructor.
- Breaking Changed to take
- Fixed a case when front camera is missing in the phone. (Issue #218)
- 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
minFps
toSurfaceTextureCaptureSource
as a property to help encoder improve the quality. - Added
createContentShareMeetingSessionConfiguration
as helper function inMeetingSessionConfiguration
to generate content configuration based on the existing session. - Added screen share feature in demo app.
- Added message for video tiles paused by poor network in demo app.
- Added logic to
stopRemoteVideo
/startRemoteVideo
when application is background/foregrounded to save network bandwidth in demo app. - Added TURN uris received callback.
- [Documentation] Added usage documentation.
- Breaking
AudioVideoFacade
now also implementsContentShareController
. - Breaking Changed to take
ContentShareController
as an additional parameter ofDefaultAudioVideoFacade
constructor. - Changed AudioManager mode to be
MODE_IN_COMMUNICATION
only after builders callaudioVideo.start()
. - Update text of additional options on demo app.
- Changes that support a speed up of video client initialization.
requestTurnCreds
callback will only be invoked as a backup for media layer logic. The signaling url is now passed into video client start. A new callbackonTurnURIsReceived
will be invoked when TURN uris are received by the client. This allows urls to be modified with urlRewriter or custom builder logic. - Changed the demo app behavior so that when user starts/stops local video, the app does not switch to the Video tab automatically.
- Fixed potential concurrency issue on
VideoSourceAdapter
. - Fixed a video connection issue on network where DNS 8.8.8.8 is blocked.
ACCESS_NETWORK_STATE
permission is required to discover available DNS on the network.
- Fix a bug that internal capture source was not stopped properly when the video client was being stopped.
- Fix camera capture start failure on certain Android devices when there are no FPS ranges at or below desired FPS max.
- Added video pagination feature in the Android demo app. Remote videos will be paginated into several pages. Each page contains at most 4 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 Android demo app. Video tiles of active speakers will be promoted to the top of the list automatically.
- Fixed a demo app issue that
SurfaceView
was not cleared up correctly when switching between Screen tab and Video tab. - Fixed a demo app issue that
mirror
property was not reset whenVideoHolder
is recycled. - Fixed rotation issue in demo app.
- Refactored video view to resemble iOS UI so that video doesn't get cropped.
- Breaking Remove the internal video tile mapping entry not only when the video is unbound, but also when the video is removed. This fixes
onVideoTileAdded(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
onVideoTileRemoved(tileState)
callback is called. Please check yourVideoTileObserver
s and make sure youronVideoTileRemoved(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
This release includes support for custom video sources, and therefore includes a lot of additional APIs. Though most builders who have not been making modifications to internal render path should not need to make any changes and will not hit any compile time issues, there are some small breaking changes to certain render path APIs to ensure consistency within data flow across the SDK. Recommendations are below, and all breaking changes should result in compile time errors (if you implemented the class yourself), if you continue to have difficulty resolving issues please cut an issue.
- 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 Android demo app.
- Added
VideoFrame
,VideoRotation
,VideoContentHint
,VideoFrameBuffer
,VideoFrameI420Buffer
,VideoFrameRGBABuffer
,VideoFrameTextureBuffer
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
EglCore
,DefaultEglCore
,EglCoreFactory
,DefaultEglCoreFactory
,GlVideoFrameDrawer
,DefaultGlVideoFrameDrawer
,SurfaceTextureCaptureSource
,DefaultSurfaceTextureCaptureSource
,SurfaceTextureCaptureSourceFactory
,DefaultSurfaceTextureCaptureSourceFactory
, for shared graphics related needs. - Added
listVideoDevices
andlistSupportedVideoCaptureFormats
toMediaDevice.Companion
. - Added
SurfaceRenderView
andTextureRenderView
an open source implementation of rendering onto aSurfaceView
andTextureView
respectively. - Added
VideoLayoutMeasure
andEglRenderer
+DefaultEglRenderer
internal helper classes for use within aforementioned render views. - 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
inDefaultDeviceController
for API 24 or greater for developers to get currently used device
- The render path has been changed to use
VideoFrame
s for consistency with the send side, this includes:- Breaking
VideoTileController.onReceiveFrame
now takesVideoFrame?
instead ofAny?
.- Builders with a custom
VideoTileController
will have to update APIs correspondingly. - Currently the buffer type of all frames coming from the AmazonChimeSDKMedia library should be
VideoFrameI420Buffer
which should have the same API as the legacy, closed source buffer used.
- Builders with a custom
- Breaking
VideoTileController.initialize
andVideoTileContoller.destroy
have been removed due to not being used.- Builders with a custom
VideoTileController
will have to remove APIs. - Previously these functions were called by internal
VideoClientController
, but now they no longer share state; if custom implementations need initialization, it must be done externally.
- Builders with a custom
- Breaking
VideoTile.renderFrame
now takesVideoFrame
instead ofAny
and has been replaced by extendingVideoSink
and usingonReceivedVideoFrame
.- Builders with a custom
VideoTile
will have to update APIs correspondingly. - Currently the buffer type of all frames coming from the AmazonChimeSDKMedia library should be
VideoFrameI420Buffer
which should have the same API as the legacy, closed source buffer used.
- Builders with a custom
- Breaking
VideoTile.bind
no longer takesbindParams: Any?
which was being used to injectEGLContext
from internal classes.- Builders with a custom
VideoTile
will have to update APIs correspondingly, and add bind parameters outside of interface functions if necessary.
- Builders with a custom
- Breaking
VideoRenderView
is now just aVideoSink
(i.e. it now acceptsVideoFrame
object viaVideoSink.onReceivedVideoFrame
rather thenAny?
viarender
).- Builders with a custom
VideoTile
will have to update APIs correspondingly. - Currently the buffer type of all frames coming from the AmazonChimeSDKMedia library should be
VideoFrameI420Buffer
which should have the same API as the legacy, closed source buffer used.
- Builders with a custom
- Breaking
VideoRenderView.initialize
andVideoRenderView.finalize
have been abstracted away toEglVideoRenderView
and are now namedinit
andrelease
respectively. - Breaking
DefaultVideoRenderView.setMirror
is now a class variablemirror
.DefaultVideoRenderView.setScalingType
is now a class variablescalingType
, and takesVideoScalingType
DefaultVideoRenderView
now inherits fromSurfaceTextureView
.
- 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 library; 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. - Breaking Changed the default log level of
ConsoleLogger
toINFO
level fromWARN
.
- Breaking Changed behavior to no longer call
onVideoTileSizeChanged
when a video is paused to fix a bug where pausing triggered this callback with width=0 and height=0. - Fix audio issue when using Bluetooth device by changing the sample rate to 16kHz.
- Breaking Fixed
listAudioDevices
to stop returning A2DP bluetooth devices, which are one way communication devices such as Bluetooth Speaker - Fixed
videoTileDidAdd
not being called for paused tiles.
- Revert structured concurrency which can lead to deadlock
- Changed
MAX_TILE_COUNT
in the demo app from 4 to 16. Now the demo app can support at most 16 remote video tiles.
- Pass correct microphone input value for audio client in
DefaultAudioClientController
for better audio input quality
- Replace usage of GlobalScope with structured concurrency
- Fixed the issue that
listAudioDevices
does not return built-in handset for some devices - Fixed a bug that attendee events got filtered out due to absence of
externalUserId
- Breaking Added additional field for
MeetingSessionCredentials
- Added data message APIs
- Breaking Added
isLocalTile
to constructor ofDefaultVideoTile
,VideoTileFactory
andVideoTileState
- Added icons for the demo app
- Added
SplashActivity
in demo app for displaying the launch screen - Added choose device list in the demo app for speaker button
- Added metrics table in the demo app
- Added
onVideoTileSizeChanged
API inVideoTileObserver
for video stream content size change - Added attendee id to local video tile
- Changed the theme to support dark theme
- Updated
DefaultAudioClientController
to teardown bluetooth SCO connection after audioClient is stopped. Also reset AudioManager mode and speakerphone state to what it was before the call when audioClient is stopped. Also added bluetooth SCO connection teardown when audio device other than bluetooth is chosen
- Added
onAttendeesDropped
API inRealtimeObserver
for attendee who got dropped
- Breaking Added additional fields for
CreateAttendeeResponse
andCreateMeetingResponse
- Added
Versioning
class andsdkVersion
API for retrieving current version of SDK - Added
onAudioSessionDropped
API inAudioVideoObserver
for temporary disconnects - Added new parameter
urlRewriter
inMeetingSessionConfiguration
for customizing url - Updated demo application to use pause and resume feature
- 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 bug where
onAudioSessionStarted()
was called twice - Fixed bug where
stop()
hung when it was called inonAttendeesLeft()
- Fixed main thread freezing issue caused by calling
stop()
when in reconnecting state - Fixed bug where
onAudioSessionStopped()
was not getting called after callingstop()
- Fixed an issue that blocked user from removing paused video tiles.
- Added proguard rules for release build type
- Fix bug where external id for self is sometimes empty
- Update
DefaultActiveSpeakerPolicy
to use consistentcutoffThreshold
in all platforms