diff --git a/extensions-marketplace/develop/integrate/superclarity.mdx b/extensions-marketplace/develop/integrate/superclarity.mdx index 14691db1f..686557bcf 100644 --- a/extensions-marketplace/develop/integrate/superclarity.mdx +++ b/extensions-marketplace/develop/integrate/superclarity.mdx @@ -1,5 +1,5 @@ --- -title: "Super Clarity" +title: "Super Clarity (beta)" sidebar_position: 7 type: docs description: > diff --git a/shared/chat-sdk/reference/release-notes/ios.mdx b/shared/chat-sdk/reference/release-notes/ios.mdx index 90987d7a6..3089a94d9 100644 --- a/shared/chat-sdk/reference/release-notes/ios.mdx +++ b/shared/chat-sdk/reference/release-notes/ios.mdx @@ -16,7 +16,7 @@ v1.2.0 was released on December 6, 2023. - Added the function of pinning a conversation: - `AgoraChatManager#pinConversation`: Pins a conversation. - `AgoraChatManager#getPinnedConversationsFromServerWithCursor`: Retrieves the pinned conversations from the server. -- Added the `AgoraChatManager#getConversationsFromServerWithCursor` method to retrieve the conversation list from the server. +- Added the `AgoraChatManager#getConversationsFromServerWithCursor` method to retrieve the conversation list from the server. Marked `getConversationsFromServer` and `getConversationsFromServerByPage:pageSize:completion:` deprecated. - Added the `AgoraChatManager#getAllConversations:` method to retrieve local conversations in the reverse chronological order of when conversations are active. - Added `AgoraChatFetchServerMessagesOption` as the parameter configuration class for retrieving historical messages from the server. - Added the `AgoraChatManager#fetchMessagesFromServerBy` method to retrieve historical messages of a conversation from the server according to `AgoraChatFetchServerMessagesOption`, the parameter configuration class for retrieving historical messages. diff --git a/shared/chat-sdk/reference/release-notes/react-native.mdx b/shared/chat-sdk/reference/release-notes/react-native.mdx index 41a884bcf..53a674c56 100644 --- a/shared/chat-sdk/reference/release-notes/react-native.mdx +++ b/shared/chat-sdk/reference/release-notes/react-native.mdx @@ -1,5 +1,13 @@ +## v1.2.1 + +v1.2.1 was released on February 2, 2024. + +#### Improvements + +- Updated native Android dependencies to support Android 14 (API34). + ## v1.2.0 v1.2.0 was released on December 6, 2023. @@ -17,8 +25,7 @@ v1.2.0 was released on December 6, 2023. - Added the function of pinning a conversation: - `ChatManager.pinConversation`: Pins a conversation. - `ChatManager.fetchPinnedConversationsFromServerWithCursor`: Retrieves a list of pinned conversations from the server. -- Added the `ChatManager.fetchConversationsFromServerWithCursor` method to retrieve the conversation list from the server. - Marked the `ChatManager.fetchAllConversations` method deprecated. +- Marked the `ChatManager.fetchAllConversations` method deprecated. - Added the `ChatManager.fetchHistoryMessagesByOptions` method to retrieve historical messages of a conversation from the server according to `ChatFetchMessageOptions`, the parameter configuration class for pulling historical messages. - Added `ChatFetchMessageOptions` as the parameter configuration class for pulling historical messages from the server. - Added the function of managing custom attributes of group members: diff --git a/shared/chat-sdk/reference/release-notes/web.mdx b/shared/chat-sdk/reference/release-notes/web.mdx index 62c18e480..8870a8c68 100644 --- a/shared/chat-sdk/reference/release-notes/web.mdx +++ b/shared/chat-sdk/reference/release-notes/web.mdx @@ -16,7 +16,7 @@ v1.2.0 was released on December 6, 2023. - Added the function of pinning a conversation: - `pinConversation`: Pins a conversation. - `getServerPinnedConversations`: Retrieves the pinned conversations from the server. -- Added the `getServerConversations` method to retrieve the conversation list from the server. +- Added the `getServerConversations` method to retrieve the conversation list from the server. Marked `getConversationlist` deprecated. - Added the `searchOptions` parameter object to the `getHistoryMessages` method for pulling historical messages from the server. - Added the function of managing custom attributes of group members: - `setGroupMemberAttributes`: Sets custom attributes of a group member. diff --git a/shared/flexible-classroom/release-notes/android.mdx b/shared/flexible-classroom/release-notes/android.mdx index abcd45534..e3bf102fe 100644 --- a/shared/flexible-classroom/release-notes/android.mdx +++ b/shared/flexible-classroom/release-notes/android.mdx @@ -300,7 +300,7 @@ As of v1.1.5.1, developers can set the latency level of an audience member. By d - Ultra-low latency: The latency from the sender to the receiver is 400 ms to 800 ms. - Low latency: The latency from the sender to the receiver is 1500 ms to 2000 ms. -The charges for low latency and ultra-low latency are different. For details, see the [pricing page](/interactive-live-streaming/reference/pricing). +The charges for low latency and ultra-low latency are different. For details, see the [pricing page](/interactive-live-streaming/overview/pricing). **Support for setting whether students automatically send streams after going onto the "stage"** diff --git a/shared/flexible-classroom/release-notes/ios.mdx b/shared/flexible-classroom/release-notes/ios.mdx index 668616f0c..93af11833 100644 --- a/shared/flexible-classroom/release-notes/ios.mdx +++ b/shared/flexible-classroom/release-notes/ios.mdx @@ -317,7 +317,7 @@ As of v1.1.5, developers can set the latency level of an audience member. By def - Ultra-low latency: The latency from the sender to the receiver is 400 ms to 800 ms. - Low latency: The latency from the sender to the receiver is 1500 ms to 2000 ms. -The charges for low latency and ultra-low latency are different. For details, see the [pricing page](/interactive-live-streaming/reference/pricing). +The charges for low latency and ultra-low latency are different. For details, see the [pricing page](/interactive-live-streaming/overview/pricing). **Support for setting whether students automatically send streams after going onto the "stage" (Android/iOS)** diff --git a/shared/flexible-classroom/release-notes/js.mdx b/shared/flexible-classroom/release-notes/js.mdx index e47acc337..1781cd0f2 100644 --- a/shared/flexible-classroom/release-notes/js.mdx +++ b/shared/flexible-classroom/release-notes/js.mdx @@ -1,3 +1,34 @@ +## v2.9.20 + +v2.9.20 was released on January 17, 2024. + +#### New features + +This release adds a notification which occurs when it takes too long to start the whiteboard. + +#### Improvements + +This release made the following improvements: + +- Upgraded the RTM service to v1.5.1. +- Optimized network connection by enabling RTC and RTM Cloud Proxy configurations. +- Enhanced the experience of searching for a member student during interaction. +- Improved the display format of the time span during which a student is in the classroom. + +#### Issues fixed + +This release fixed the following issues: + +- Users could join a room before the room was created. +- The loudspeaker list was incorrectly displayed when a user plugged in or unplugged an external audio device. +- The AI noise suppression switch was incorrectly displayed. +- Some words in the user interface of the group discussion were incorrect. +- Abnormalities occurred when a user left the discussion group. +- Issues occurred with sound card capturing. +- The callback was not triggered when the user attribute in a lecture hall was modified. +- Occasionally, when a student frequently enabled or disabled video from a mobile device, the teacher could not subscribe to the video of the student. +- Occasionally, the teacher/student could not operate the whiteboard after joining a discussion group. +- An occasional error occurred when uploading courseware, which lead to failure in displaying the courseware list. ## v2.9.0 @@ -7,12 +38,12 @@ v2.9.0 was released on November 22, 2023. #### New features -This version adds the following new features: +This version adds the following new scenarios: - Online classroom scenarios and the introduction of a new UI style and interactive experience that are closer to the usage habits of educational users. See the following documentation: - - [Scene SDK](../develop/customize-ui/customize-ui-scene-sdk) - - [API Reference](ui-scene) + - [FcrUIScene SDK](../develop/customize-ui/customize-ui-scene-sdk) + - [API Reference](../client-api/ui-scene) One-to-one private chat function. This function does not currently support retrieving historical messages from servers on demand. diff --git a/shared/signaling/release-notes/web.mdx b/shared/signaling/release-notes/web.mdx index efcdd11bf..fc251eda0 100644 --- a/shared/signaling/release-notes/web.mdx +++ b/shared/signaling/release-notes/web.mdx @@ -10,6 +10,22 @@ import * as lock from '@docs/shared/signaling/reference/api-ref/shared/_lock.mdx +### v2.1.7 + +v2.1.7 was released on January 22, 2024. + +#### Improvements + +1. Optimized the processing logic of expired user status data when disconnected and reconnected. + +2. Improved the reliability of message transmission in a Stream Channel under weak network conditions. + +#### Fixed issues + +- When calling the `getOnlineUsers` method and setting `includeUserId` to `true`, the parameter `includeState` set to `false` was missing from the `nextPage` return value. +- In the case of randomly subscribing to a Topic, what the user `message` received in the event notification `publisher` was inconsistent with the actual message sender. +- After repeatedly subscribing to the same channel, unsubscribing or leaving the channel failed. + ### v2.1.5 v2.1.5 was released on October 17, 2023 diff --git a/shared/video-sdk/reference/release-notes/android.mdx b/shared/video-sdk/reference/release-notes/android.mdx index d419bd7d6..03890c395 100644 --- a/shared/video-sdk/reference/release-notes/android.mdx +++ b/shared/video-sdk/reference/release-notes/android.mdx @@ -1,10 +1,11 @@ +import KnownIssues from '@docs/shared/video-sdk/reference/known-issues/android.mdx'; If your target platform is Android 12 or higher, add the `android.permission.BLUETOOTH_CONNECT` permission to the `AndroidManifest.xml` file of the Android project to enable the Bluetooth function of the Android system. ### Known issues -See [Known issues](known-issues). + ### v4.3.0 @@ -579,7 +580,7 @@ As of this release, the SDK optimizes the video encoder algorithm and upgrades t Call the `setVideoEncoderConfiguration` method to set the expected video encoding resolution in the video encoding parameters configuration. -
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
+
The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing.
#### New features @@ -876,10 +877,10 @@ This release optimizes the trigger logic of `onVideoSizeChanged`, which can also This release fixed the following issues. -1. When calling `setVideoEncoderConfigurationEx` in the channel to increase the resolution of the video, it occasionally failed. +1. When calling `setVideoEncoderConfigurationEx` in the channel to increase the resolution of the video, it occasionally failed. 2. In online meeting scenarios, the local user and the remote user might not hear each other after the local user is interrupted by a call. 3. After calling `setCloudProxy` to set the cloud proxy, calling `joinChannelEx` to join multiple channels failed. -4. When using the Agora media player to play videos, after you play and pause the video, and then call the seek method to specify a new position for playback, the video image might remain unchanged; if you call the resume method to resume playback, the video might be played in a speed faster than the original one. +4. When using the Agora media player to play videos, after you play and pause the video, and then call the seek method to specify a new position for playback, the video image might remain unchanged; if you call the resume method to resume playback, the video might be played in a speed faster than the original one. #### API changes @@ -910,7 +911,7 @@ This release fixed the following issues. - `enableDualStreamModeEx` - + **Deprecated** @@ -918,7 +919,7 @@ This release fixed the following issues. **Deleted** -- `enableDualStreamMode` [2/3] +- `enableDualStreamMode` [2/3] ### v4.0.0 @@ -969,7 +970,7 @@ The UHD resolution (4K, 60 fps) is currently in beta and requires certain device High resolution typically means higher performance consumption. To avoid a decrease in experience due to insufficient device performance, Agora recommends that you enable FHD and UHD video resolutions on devices with better performance. -The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing. +The increase in the default resolution affects the aggregate resolution and thus the billing rate. See Pricing. **3. Agora media player** diff --git a/shared/video-sdk/reference/release-notes/electron.mdx b/shared/video-sdk/reference/release-notes/electron.mdx index ec6170c9f..7ca6d7317 100644 --- a/shared/video-sdk/reference/release-notes/electron.mdx +++ b/shared/video-sdk/reference/release-notes/electron.mdx @@ -2,6 +2,214 @@ import * as data from '@site/data/variables'; +### v4.3.0 + +v4.3.0 was released on February 28, 2024. + +#### Compatibility changes + +This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, update the code in the app after upgrading to this release. + +1. **Renaming parameters in callbacks** + + In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Modify the parameter settings in the callbacks after upgrading to this release. + + | Callback | Original parameter name | New parameter name | + | ---------------------------------- | ----------------------- | ----------------------- | + | `onLocalAudioStateChanged` | `error` | `reason` | + | `onLocalVideoStateChanged` | `error` | `reason` | + | `onDirectCdnStreamingStateChanged` | `error` | `reason` | + | `onRtmpStreamingStateChanged` | `errCode` | `reason` | + + | Original enumeration class | New enumeration class | + | ---------------------------- | -------------------------- | + | `LocalAudioStreamError` | `LocalAudioStreamReason` | + | `LocalVideoStreamError` | `LocalVideoStreamReason` | + | `DirectCdnStreamingError` | `DirectCdnStreamingReason` | + | `MediaPlayerError` | `MediaPlayerReason` | + | `RtmpStreamPublishErrorType` | `RtmpStreamPublishReason` | + + **Note:** For specific renaming of enumerations, please refer to [API changes](#api-changes). + +2. **Channel media relay** + + To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below: + + | Deleted methods and callbacks | Alternative methods and callbacks | + | ----------------------------------------------------- | ---------------------------------- | + | `startChannelMediaRelay`,`updateChannelMediaRelay` | `startOrUpdateChannelMediaRelay` | + | `startChannelMediaRelayEx`,`updateChannelMediaRelayEx` | `startOrUpdateChannelMediaRelayEx` | + | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | + +3. **Reasons for local video state changes** + + This release makes the following modifications to the enumerations in the LocalVideoStreamReason class: + + - The value of `LocalVideoStreamReasonScreenCapturePaused` (formerly `LocalVideoStreamReasonScreenCapturePaused`) has been changed from `23` to `28`. + - The value of `LocalVideoStreamReasonScreenCaptureResumed` (formerly `LocalVideoStreamReasonScreenCaptureResumed`) has been changed from `24` to `29`. + - The `LocalVideoStreamReasonCodecNotSupport` enumeration has been changed to `LocalVideoStreamReasonCodecNotSupport`. + +4. **Audio loopback capturing** + + - Before v4.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will not be disabled. + - As of v4.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will be disabled as well. If you need to enable audio loopback capturing, you need to enable the audio module by calling the enableAudio method and then call enableLoopbackRecording. + +#### New features + +1. **Local preview with multiple views** + + This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows: + + 1. Call setupLocalVideo + to set the first view: Set the `position` parameter to `PositionPostCapturerOrigin` (introduced in this release) in `VideoCanvas`. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. + 2. Call setupLocalVideo + to set the second view: Set the `position` parameter to `PositionPostCapturer` in `VideoCanvas`, the video observed here has the effect of video preprocessing. + 3. Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects. + +2. **Query Device Score** + + This release adds the queryDeviceScore method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video scenarios, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business scenarios is varied. For specific score recommendations, please contact [technical support](mailto:support@agora.io). + +3. **Select different audio tracks for local playback and streaming** + + This release introduces the selectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in scenarios like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the openWithMediaSource method and enable this function by setting the `enableMultiAudioTrack` parameter in MediaSource. + +4. **Others** + + This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK. + + - setRemoteSubscribeFallbackOption: Sets fallback option for the subscribed video stream in weak network conditions. + - onRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve. + - setPlaybackDeviceVolume: Sets the volume of the audio playback device. + - getRecordingDeviceVolume: Sets the volume of the audio capturing device. + - setPlayerOptionInInt and setPlayerOptionInString: Sets media player options for providing technical previews or special customization features. + - enableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source. + +#### Improvements + +1. **SDK task processing scheduling optimization** + + This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects: + + - The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%. + - The API call duration and response time are reduced by 5% to 50%. + - The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in scenarios involving high resolutions and frame rates. + - The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific scenarios. + +2. **In-ear monitoring volume boost** + + This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling setInEarMonitoringVolume. + +3. **Spatial audio effects usability improvement** + + - This release optimizes the design of the setZones method, supporting the ability to set the `zones` parameter to `NULL`, indicating the clearing of all echo cancellation zones. + - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the ILocalSpatialAudioEngine method. + +4. **Other Improvements** + + This release also includes the following improvements: + + - The onLocalVideoStateChanged callback is improved with the inclusion of the `LocalVideoStreamReasonScreenCaptureAutoFallback` enumeration, signaling unexpected errors during the screen sharing process (potentially due to window blocking failure), resulting in performance degradation without impacting the screen sharing process itself. + - This release optimizes the SDK's domain name resolution strategy, improving the stability of calling to resolve domain names in complex network environments. + - When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color. + - This release adds the `earMonitorDelay` and `aecEstimatedDelay` members in LocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. + - The onPlayerCacheStats callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started. + - The onPlayerPlaybackStats callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through PlayerPlaybackStats. + +#### Issues fixed + +This release fixed the following issues: + +- When sharing two screen sharing video streams simultaneously, the reported `captureFrameRate` in the onLocalVideoStats callback is 0, which is not as expected. +- When sharing in a specified screen area, the mouse coordinates within the shared area are inaccurate. When the mouse is near the border of the shared area, the mouse may not be visible in the shared screen. +- The SDK failed to detect any changes in the audio routing after plugging in and out 3.5 mm earphones. + +#### API changes + +**Added** + +- The `subviewUid` member in VideoCanvas +- enableCustomAudioLocalPlayback +- queryDeviceScore +- The `CustomVideoSource` enumeration in MediaSourceType +- The `RouteBluetoothDeviceA2DP` enumeration in AudioRoute +- selectMultiAudioTrack +- onPlayerCacheStats +- onPlayerPlaybackStats +- PlayerPlaybackStats + +**Modified** + +- All `ERROR` fields in the following enumerations are changed to `REASON`: + - `LocalAudioStreamErrorOk` + - `LocalAudioStreamErrorFailure` + - `LocalAudioStreamErrorDeviceNoPermission` + - `LocalAudioStreamErrorDeviceBusy` + - `LocalAudioStreamErrorRecordFailure` + - `LocalAudioStreamErrorEncodeFailure` + - `LocalAudioStreamErrorRecordInvalidId` (Windows) + - `LocalAudioStreamErrorPlayoutInvalidId` (Windows) + - `LocalVideoStreamErrorOk` + - `LocalVideoStreamErrorFailure` + - `LocalVideoStreamErrorDeviceNoPermission` + - `LocalVideoStreamErrorDeviceBusy` + - `LocalVideoStreamErrorCaptureFailure` + - `LocalVideoStreamErrorCodecNotSupport` + - `LocalVideoStreamErrorDeviceNotFound` + - `LocalVideoStreamErrorDeviceDisconnected` + - `LocalVideoStreamErrorDeviceInvalidId` + - `LocalVideoStreamErrorScreenCaptureWindowMinimized` + - `LocalVideoStreamErrorScreenCaptureWindowClosed` + - `LocalVideoStreamErrorScreenCaptureWindowOccluded` + - `DirectCdnStreamingErrorOk` + - `DirectCdnStreamingErrorFailed` + - `DirectCdnStreamingErrorAudioPublication` + - `DirectCdnStreamingErrorVideoPublication` + - `DirectCdnStreamingErrorNetConnect` + - `DirectCdnStreamingErrorBadName` + - `PlayerErrorNone` + - `PlayerErrorInvalidArguments` + - `PlayerErrorInternal` + - `PlayerErrorNoResource` + - `PlayerErrorInvalidMediaSource` + - `PlayerErrorUnknownStreamType` + - `PlayerErrorObjNotInitialized` + - `PlayerErrorCodecNotSupported` + - `PlayerErrorVideoRenderFailed` + - `PlayerErrorInvalidState` + - `PlayerErrorUrlNotFound` + - `PlayerErrorInvalidConnectionState` + - `PlayerErrorSrcBufferUnderflow` + - `PlayerErrorInterrupted` + - `PlayerErrorNotSupported` + - `PlayerErrorTokenExpired` + - `PlayerErrorUnknown` + - `RtmpStreamPublishErrorOk` + - `RtmpStreamPublishErrorInvalidArgument` + - `RtmpStreamPublishErrorEncryptedStreamNotAllowed` + - `RtmpStreamPublishErrorConnectionTimeout` + - `RtmpStreamPublishErrorInternalServerError` + - `RtmpStreamPublishErrorRtmpServerError` + - `RtmpStreamPublishErrorTooOften` + - `RtmpStreamPublishErrorReachLimit` + - `RtmpStreamPublishErrorNotAuthorized` + - `RtmpStreamPublishErrorStreamNotFound` + - `RtmpStreamPublishErrorFormatNotSupported` + - `RtmpStreamPublishErrorNotBroadcaster` + - `RtmpStreamPublishErrorTranscodingNoMixStream` + - `RtmpStreamPublishErrorNetDown` + - `RtmpStreamPublishErrorInvalidPrivilege` + - `RtmpStreamUnpublishErrorOk` + +**Deleted** + +- `startChannelMediaRelay` +- `updateChannelMediaRelay` +- `startChannelMediaRelayEx` +- `updateChannelMediaRelayEx` +- `onChannelMediaRelayEvent` +- `ChannelMediaRelayEvent` + ### v4.2.6 v4.2.6 was released on November 24, 2023. diff --git a/shared/video-sdk/reference/release-notes/flutter.mdx b/shared/video-sdk/reference/release-notes/flutter.mdx index 4a5479e5f..51525f604 100644 --- a/shared/video-sdk/reference/release-notes/flutter.mdx +++ b/shared/video-sdk/reference/release-notes/flutter.mdx @@ -1,8 +1,241 @@ +import KnownIssues from '@docs/shared/video-sdk/reference/known-issues/flutter.mdx'; ### Known issues -See [Known issues](known-issues). + + +### v6.3.0 + +v6.3.0 was released on February 28, 2024. + +#### Compatibility changes + +This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, you need to update the code in the app after upgrading to this release. + +1. **Renaming parameters in callbacks** + + In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Please modify the parameter settings in the callbacks after upgrading to this release. + + | Callback | Original parameter name | New parameter name | + | ------------------------------------------------------------ | ----------------------- | ----------------------- | + | `onLocalAudioStateChanged` | `error` | `reason` | + | `onLocalVideoStateChanged` | `error` | `reason` | + | `onDirectCdnStreamingStateChanged` | `error` | `reason` | + | `onRtmpStreamingStateChanged` | `errCode` | `reason` | + + | Original enumeration class | New enumeration class | + | -------------------------- | -------------------------- | + | `LocalAudioStreamError` | `localAudioStreamReason` | + | `LocalVideoStreamError` | `LocalVideoStreamReason` | + | `DirectCdnStreamingError` | `DirectCdnStreamingReason` | + | `MediaPlayerError` | `MediaPlayerReason` | + | `RtmpStreamPublishErrorType` | `RtmpStreamPublishReason` | + + **Note:** For specific renaming of enumerations, please refer to [API changes](#api-changes). + +2. **Channel media relay** + + To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below: + + | Deleted methods and callbacks | Alternative methods and callbacks | + | ----------------------------------------------------- | ---------------------------------- | + |
  • `startChannelMediaRelay`
  • `updateChannelMediaRelay`
| `startOrUpdateChannelMediaRelay` | + |
  • `startChannelMediaRelayEx`
  • `updateChannelMediaRelayEx`
| `startOrUpdateChannelMediaRelayEx` | + | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | + +3. **Audio route** + + Starting with this release, `routeBluetooth` in AudioRoute is renamed to `routeHeadsetbluetooth`, representing a Bluetooth device using the HFP protocol. `routeBluetoothSpeaker`(10) is added to represent a Bluetooth device using the A2DP protocol. + +4. **Reasons for local video state changes** + + This release makes the following modifications to the enumerations in the LocalVideoStreamReason class: + + - The value of `localVideoStreamReasonScreenCapturePaused` (formerly `localVideoStreamReasonScreenCapturePaused`) has been changed from 23 to 28. + - The value of `localVideoStreamReasonScreenCaptureResumed` (formerly `localVideoStreamReasonScreenCaptureResumed`) has been changed from 24 to 29. + - The `localVideoStreamErrorEncodeFailure` enumeration has been changed to `localVideoStreamReasonCodecNotSupport`. + +5. **Audio loopback capturing (Windows, macOS)** + + - Before v6.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will not be disabled. + - As of v6.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will be disabled as well. If you need to enable audio loopback capturing, you need to enable the audio module by calling the enableAudio method and then call enableLoopbackRecording. + +#### New features + +1. **Custom mixed video layout on receiving end (Android, iOS)** + + To facilitate customized layout of mixed video stream at the receiver end, this release introduces the onTranscodedStreamLayoutInfo callback. When the receiver receives the channel's mixed video stream sent by the video mixing server, this callback is triggered, reporting the layout information of the mixed video stream and the layout information of each sub-video stream in the mixed stream. The receiver can set a separate `view` for rendering the sub-video stream (distinguished by `subviewUid`) in the mixed video stream when calling the setupRemoteVideo method, achieving a custom video layout effect. + + When the layout of the sub-video streams in the mixed video stream changes, this callback will also be triggered to report the latest layout information in real time. + + Through this feature, the receiver end can flexibly adjust the local view layout. When applied in a multi-person video scenario, the receiving end only needs to receive and decode a mixed video stream, which can effectively reduce the CPU usage and network bandwidth when decoding multiple video streams on the receiving end. + +2. **Local preview with multiple views** + + This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows: + + 1. Call setupLocalVideo to set the first view: Set the `position` parameter to `positionPostCapturerOrigin` (introduced in this release) in `VideoCanvas`. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. + 2. Call setupLocalVideo to set the second view: Set the `position` parameter to `positionPostCapturer` in `VideoCanvas`, the video observed here has the effect of video preprocessing. + 3. Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects. + +3. **Query device score** + + This release adds the queryDeviceScore method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video scenarios, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business scenarios is varied. For specific score recommendations, please contact [technical support](mailto:support@agora.io). + +4. **Select different audio tracks for local playback and streaming** + + This release introduces the selectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in scenarios like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the openWithMediaSource method and enable this function by setting the `enableMultiAudioTrack` parameter in MediaSource. + +5. **Others** + + This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK. + + - setRemoteSubscribeFallbackOption: Sets fallback option for the subscribed video stream in weak network conditions. + - onRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve. + - setPlaybackDeviceVolume (Windows): Sets the volume of the audio playback device. + - setPlaybackDeviceVolume: Sets the volume of the audio capturing device. + - setPlayerOptionInInt and setPlayerOptionInString: Sets media player options for providing technical previews or special customization features. + - enableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source. + +#### Improvements + +1. **SDK task processing scheduling optimization** + + This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects: + + - The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%. + - The API call duration and response time are reduced by 5% to 50%. + - The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in scenarios involving high resolutions and frame rates. + - The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific scenarios. + +2. **In-ear monitoring volume boost** + + This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling setInEarMonitoringVolume. + +3. **Spatial audio effects usability improvement** + + - This release optimizes the design of the setZones method, supporting the ability to set the `zones` parameter to `NULL`, indicating the clearing of all echo cancellation zones. + - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the LocalSpatialAudioEngine method. + +4. **Other Improvements** + + This release also includes the following improvements: + + - The onLocalVideoStateChanged callback is improved with the inclusion of the `localVideoStreamReasonScreenCaptureAutoFallback` enumeration, signaling unexpected errors during the screen sharing process (potentially due to window blocking failure), resulting in performance degradation without impacting the screen sharing process itself (Windows). + - The onPlayerCacheStats callback is added to reports the statistics of the media file being cached. This callback is triggered once per second after file caching is started. + - The onPlayerPlaybackStats callback is added to reports the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through PlayerPlaybackStats. + - This release optimizes the SDK's domain name resolution strategy, improving the stability of calling `setLocalAccessPoint` to resolve domain names in complex network environments. + - When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color. + - This release adds the `earMonitorDelay` and `aecEstimatedDelay` members in LocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. + +#### Issues fixed + +This release fixed the following issues: + +- When sharing two screen sharing video streams simultaneously, the reported `captureFrameRate` in the onLocalVideoStats callback is 0, which is not as expected. +- When sharing in a specified screen area, the mouse coordinates within the shared area are inaccurate. When the mouse is near the border of the shared area, the mouse may not be visible in the shared screen (Windows). +- The SDK failed to detect any changes in the audio routing after plugging in and out 3.5mm earphones (Windows). + +#### API changes + +**Added** + +- onTranscodedStreamLayoutInfo (Android, iOS) +- VideoLayout (Android, iOS) +- The `subviewUid` member in VideoCanvas +- enableCustomAudioLocalPlayback +- selectMultiAudioTrack +- onPlayerCacheStats +- onPlayerPlaybackStats +- PlayerPlaybackStats +- The `earMonitorDelay` and `aecEstimatedDelay` members in LocalAudioStats +- queryDeviceScore +- MediaSourceType +- The `routeBluetoothSpeaker` enumeration in AudioRoute + +**Modified** + +- `routeBluetooth` is renamed as `routeHeadsetbluetooth` +- All `Error` fields in the following enumerations are changed to `Reason`: + - `localAudioStreamErrorOk` + - `localAudioStreamErrorFailure` + - `localAudioStreamErrorDeviceNoPermission` + - `localAudioStreamErrorDeviceBusy` + - `localAudioStreamErrorRecordFailure` + - `localAudioStreamErrorEncodeFailure` + - `localAudioStreamErrorRecordInvalidId` (Windows) + - `localAudioStreamErrorPlayoutInvalidId` (Windows) + - `localVideoStreamErrorOk` + - `localVideoStreamErrorFailure` + - `localVideoStreamErrorDeviceNoPermission` + - `localVideoStreamErrorDeviceBusy` + - `localVideoStreamErrorCaptureFailure` + - `localVideoStreamErrorCodecNotSupport` + - `localVideoStreamErrorCaptureInbackground` (iOS) + - `localVideoStreamErrorCaptureMultipleForegroundApps` (iOS) + - `localVideoStreamErrorDeviceNotFound` + - `localVideoStreamErrorDeviceDisconnected` + - `localVideoStreamErrorDeviceInvalidId` + - `localVideoStreamErrorScreenCaptureWindowMinimized` + - `localVideoStreamErrorScreenCaptureWindowClosed` + - `localVideoStreamErrorScreenCaptureWindowOccluded` + - `localVideoStreamErrorScreenCaptureNoPermission` (Windows) + - `localVideoStreamErrorScreenCapturePaused` (Windows) + - `localVideoStreamErrorScreenCaptureResumed` (Windows) + - `localVideoStreamErrorScreenCaptureWindowHidden` (Windows) + - `localVideoStreamErrorScreenCaptureWindowRecoverFromHidden` (Windows) + - `localVideoStreamErrorScreenCaptureWindowRecoverFromMinimized` (Windows) + - `localVideoStreamErrorScreenCaptureFailure` (Windows) + - `localVideoStreamErrorDeviceSystemPressure` (Windows) + - `directCdnStreamingErrorOk` + - `directCdnStreamingErrorFailed` + - `directCdnStreamingErrorAudioPublication` + - `directCdnStreamingErrorVideoPublication` + - `directCdnStreamingErrorNetConnect` + - `directCdnStreamingErrorBadName` + - `playerErrorNone` + - `playerErrorInvalidArguments` + - `playerErrorInternal` + - `playerErrorNoResource` + - `playerErrorInvalidMediaSource` + - `playerErrorUnknownStreamType` + - `playerErrorObjNotInitialized` + - `playerErrorCodecNotSupported` + - `playerErrorVideoRenderFailed` + - `playerErrorInvalidState` + - `playerErrorUrlNotFound` + - `playerErrorInvalidConnectionState` + - `playerErrorSrcBufferUnderflow` + - `playerErrorInterrupted` + - `playerErrorNotSupported` + - `playerErrorTokenExpired` + - `playerErrorUnknown` + - `rtmpStreamPublishErrorOk` + - `rtmpStreamPublishErrorInvalidArgument` + - `rtmpStreamPublishErrorEncryptedStreamNotAllowed` + - `rtmpStreamPublishErrorConnectionTimeout` + - `rtmpStreamPublishErrorInternalServerError` + - `rtmpStreamPublishErrorRtmpServerError` + - `rtmpStreamPublishErrorTooOften` + - `rtmpStreamPublishErrorReachLimit` + - `rtmpStreamPublishErrorNotAuthorized` + - `rtmpStreamPublishErrorStreamNotFound` + - `rtmpStreamPublishErrorFormatNotSupported` + - `rtmpStreamPublishErrorNotBroadcaster` + - `rtmpStreamPublishErrorTranscodingNoMixStream` + - `rtmpStreamPublishErrorNetDown` + - `rtmpStreamPublishErrorInvalidPrivilege` + - `rtmpStreamUnpublishErrorOk` + +**Deleted** + +- `startChannelMediaRelay` +- `updateChannelMediaRelay` +- `startChannelMediaRelayEx` +- `updateChannelMediaRelayEx` +- `onChannelMediaRelayEvent` +- `ChannelMediaRelayEvent` ### v6.2.6 diff --git a/shared/video-sdk/reference/release-notes/ios.mdx b/shared/video-sdk/reference/release-notes/ios.mdx index 281d28b38..228b8607e 100644 --- a/shared/video-sdk/reference/release-notes/ios.mdx +++ b/shared/video-sdk/reference/release-notes/ios.mdx @@ -1,8 +1,9 @@ +import KnownIssues from '@docs/shared/video-sdk/reference/known-issues/ios.mdx'; ### Known issues -See [Known issues](known-issues). + ### v4.3.0 @@ -324,7 +325,7 @@ v4.2.2 was released on July 27, 2023. 1. **Wildcard token** - This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user id. In scenarios involving multiple channels, such as switching between different channels, using a wildcard token can avoid repeated application of tokens every time users joining a new channel, which reduces the pressure on your token server. See [Wildcard Tokens](https://docportal.shengwang.cn/cn/live-streaming-premium-4.x/wildcard_token?platform=All%20Platforms). + This release introduces wildcard tokens. Agora supports setting the channel name used for generating a token as a wildcard character. The token generated can be used to join any channel if you use the same user id. In scenarios involving multiple channels, such as switching between different channels, using a wildcard token can avoid repeated application of tokens every time users joining a new channel, which reduces the pressure on your token server. See [Secure authentication with tokens](/en/video-calling/get-started/authentication-workflow#wildcard-tokens).
All 4.x SDKs support using wildcard tokens.
@@ -332,7 +333,7 @@ v4.2.2 was released on July 27, 2023. This release adds `preloadChannelByToken [1/2]` and `preloadChannelByToken [2/2]` methods, which allows a user whose role is set as audience to preload channels before joining one. Calling the method can help shortening the time of joining a channel, thus reducing the time it takes for audience members to hear and see the host. - When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you joining a new channel, thus saving the time for switching between channels. See [Wildcard Token](https://docportal.shengwang.cn/cn/live-streaming-premium-4.x/wildcard_token?platform=All%20Platforms). + When preloading more than one channels, Agora recommends that you use a wildcard token for preloading to avoid repeated application of tokens every time you joining a new channel, thus saving the time for switching between channels. See [Secure authentication with tokens](/en/video-calling/get-started/authentication-workflow#wildcard-tokens). 3. **Customized background color of video canvas** diff --git a/shared/video-sdk/reference/release-notes/react-js.mdx b/shared/video-sdk/reference/release-notes/react-js.mdx index 97ab97727..20a46a5c7 100644 --- a/shared/video-sdk/reference/release-notes/react-js.mdx +++ b/shared/video-sdk/reference/release-notes/react-js.mdx @@ -1,8 +1,71 @@ -### v2.0.0-alpha.0 +### v2.1.0 -This is the first alpha release of Video SDK for ReactJS. +v2.1.0 was released on January 5, 2024. +This version updates the built-in SDK for Web in the SDK for React JS to version 4.20.0. Check the related changes in the [Web SDK release notes](../overview/release-notes?platform=web#v4200). - \ No newline at end of file +### v2.0.0 + +v2.0.0 was released on December 22, 2023. + +#### Compatibility changes + +**SDK structural optimization** + +The SDK for ReactJS is developed based on the SDK for Web v4.x. To further enhance usability, this version incorporates all Web SDK APIs into the ReactJS SDK, eliminating the need to integrate the Web SDK separately. + +Upon upgrading to this version, make the following modifications: + +- Reintegrate the React SDK. Taking npm as an example: + + ```sh + # Remove existing dependencies + npm uninstall agora-rtc-react agora-rtc-sdk-ng + # Reinstall dependencies + npm install agora-rtc-react + ``` + +- Adjust the import of the `AgoraRTC` interface from the Web SDK. Taking the combined import of `AgoraRTC` and `AgoraRTCProvider` as an example: + + ```jsx + // Before this version + import AgoraRTC from "agora-rtc-sdk-ng"; + import { AgoraRTCProvider } from "agora-rtc-react"; + // As of this version + import AgoraRTC, { AgoraRTCProvider } from "agora-rtc-react" + ``` + +**NetworkQuality renaming** + +To avoid redundancy with the Web SDK's API, this version makes the following changes to the ReactJS SDK's `NetworkQuality` interface: + +- Rename `NetworkQuality` to `NetworkQualityEx` and have `NetworkQualityEx` inherit the `NetworkQuality` interface from the Web SDK. +- Rename the `uplink` and `downlink` properties to `uplinkNetworkQuality` and `downlinkNetworkQuality`, respectively. + +If you use the `NetworkQuality` interface from the ReactJS SDK, make the necessary code modifications after upgrading to this version. + +#### Improvements + +This version adds the `cameraVideoTrackConfig` parameter to `useLocalCameraTrack`, enabling you to set video capture configurations such as capture devices and encoder when creating a camera video track. + +#### Fixed issues + +This version fixed the issue that the SDK threw the error `CAN_NOT_PUBLISH_MULTIPLE_VIDEO_TRACKS` in Firefox's developer mode. + +#### API Changes + +**Added** + +- `cameraVideoTrackConfig` to `useLocalCameraTrack` + +**Modified** + +- `NetworkQuality` to `NetworkQualityEx` + - `uplink` to `uplinkNetworkQuality` + - `downlink` to `downlinkNetworkQuality` + + + +
diff --git a/shared/video-sdk/reference/release-notes/react-native.mdx b/shared/video-sdk/reference/release-notes/react-native.mdx index c9e5343b1..f96e58ce9 100644 --- a/shared/video-sdk/reference/release-notes/react-native.mdx +++ b/shared/video-sdk/reference/release-notes/react-native.mdx @@ -1,8 +1,220 @@ +import KnownIssues from '@docs/shared/video-sdk/reference/known-issues/react-native.mdx'; ### Known issues -See [Known issues](known-issues). + + +### v4.3.0 + +v4.3.0 was released on February 28, 2024. + +#### Compatibility changes + +This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, you need to update the code in the app after upgrading to this release. + +1. **Renaming parameters in callbacks** + + In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Please modify the parameter settings in the callbacks after upgrading to this release. + + | Callback | Original parameter name | New parameter name | + | ---------------------------------- | ----------------------- | ----------------------- | + | `onLocalAudioStateChanged` | `error` | `reason` | + | `onLocalVideoStateChanged` | `error` | `reason` | + | `onDirectCdnStreamingStateChanged` | `error` | `reason` | + | `onRtmpStreamingStateChanged` | `errCode` | `reason` | + + | Original enumeration class | New enumeration class | + | ---------------------------- | -------------------------- | + | `LocalAudioStreamError` | `LocalAudioStreamReason` | + | `LocalVideoStreamError` | `LocalVideoStreamReason` | + | `DirectCdnStreamingError` | `DirectCdnStreamingReason` | + | `MediaPlayerError` | `MediaPlayerReason` | + | `RtmpStreamPublishErrorType` | `RtmpStreamPublishReason` | + + **Note:** For specific renaming of enumerations, please refer to [API changes](#api-changes). + +2. **Channel media relay** + + To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below: + + | Deleted methods and callbacks | Alternative methods and callbacks | + | ----------------------------------------------------- | ---------------------------------- | + | `startChannelMediaRelay`,`updateChannelMediaRelay` | `startOrUpdateChannelMediaRelay` | + | `startChannelMediaRelayEx`,`updateChannelMediaRelayEx` | `startOrUpdateChannelMediaRelayEx` | + | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | + +3. **Audio route** + + Starting with this release, `RouteBluetooth` in AudioRoute is renamed to `RouteBluetoothDeviceHFP`, representing a Bluetooth device using the HFP protocol. `RouteBluetoothDeviceA2DP`(10) is added to represent a Bluetooth device using the A2DP protocol. + +4. **Reasons for local video state changes** + + This release makes the following modifications to the enumerations in the LocalVideoStreamReason class: + + - The value of `LocalVideoStreamReasonScreenCapturePaused` (formerly `LocalVideoStreamReasonScreenCapturePaused`) has been changed from 23 to 28. + - The value of `LocalVideoStreamReasonScreenCaptureResumed` (formerly `LocalVideoStreamReasonScreenCaptureResumed`) has been changed from 24 to 29. + - The `LocalVideoStreamReasonCodecNotSupport` enumeration has been changed to `LocalVideoStreamReasonCodecNotSupport`. + +#### New features + +1. **Custom mixed video layout on receiving end** + + To facilitate customized layout of mixed video stream at the receiver end, this release introduces the onTranscodedStreamLayoutInfo callback. When the receiver receives the channel's mixed video stream sent by the video mixing server, this callback is triggered, reporting the layout information of the mixed video stream and the layout information of each sub-video stream in the mixed stream. The receiver can set a separate `view` for rendering the sub-video stream (distinguished by `subviewUid`) in the mixed video stream when calling the method, achieving a custom video layout effect. + + When the layout of the sub-video streams in the mixed video stream changes, this callback will also be triggered to report the latest layout information in real time. + + Through this feature, the receiver end can flexibly adjust the local view layout. When applied in a multi-person video scenario, the receiving end only needs to receive and decode a mixed video stream, which can effectively reduce the CPU usage and network bandwidth when decoding multiple video streams on the receiving end. + +2. **Local preview with multiple views** + + This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows: + + 1. Create the first view: Set the `position` parameter to `PositionPostCapturerOrigin` (introduced in this release) in `VideoCanvas`. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. + 2. Create the second view: Set the `position` parameter to `PositionPostCapturer` in `VideoCanvas`, the video observed here has the effect of video preprocessing. + 3. Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects. + +3. **Query device score** + + This release adds the queryDeviceScore + method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video scenarios, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business scenarios is varied. For specific score recommendations, please contact [technical support](mailto:support@agora.io). + +4. **Select different audio tracks for local playback and streaming** + + This release introduces the selectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in scenarios like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the openWithMediaSource method and enable this function by setting the `enableMultiAudioTrack` parameter in MediaSource. + +5. **Others** + + This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK. + + - setRemoteSubscribeFallbackOption: Sets fallback option for the subscribed video stream in weak network conditions. + - onRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve. + - setPlayerOptionInInt and setPlayerOptionInString: Sets media player options for providing technical previews or special customization features. + - enableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source. + +#### Improvements + +1. **SDK task processing scheduling optimization** + + This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects: + + - The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%. + - The API call duration and response time are reduced by 5% to 50%. + - The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in scenarios involving high resolutions and frame rates. + - The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific scenarios. + +2. **In-ear monitoring volume boost** + + This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling setInEarMonitoringVolume. + +3. **Spatial audio effects usability improvement** + + - This release optimizes the design of the setZones method, supporting the ability to set the `zones` parameter to `NULL`, indicating the clearing of all echo cancellation zones. + - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the ILocalSpatialAudioEngine method. + +4. **Other Improvements** + + This release also includes the following improvements: + + - This release optimizes the SDK's domain name resolution strategy, improving the stability of calling to resolve domain names in complex network environments. + - When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color. + - This release adds the `earMonitorDelay` and `aecEstimatedDelay` members in LocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. + - The onPlayerCacheStats callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started. + - The onPlayerPlaybackStats callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through PlayerPlaybackStats. + +#### Issues fixed + +This release fixed the following issue: + +- When sharing two screen sharing video streams simultaneously, the reported `captureFrameRate` in the onLocalVideoStats callback is 0, which is not as expected. + +#### API changes + +**Added** + +- onTranscodedStreamLayoutInfo +- VideoLayout +- The `subviewUid` member in VideoCanvas +- enableCustomAudioLocalPlayback +- queryDeviceScore +- The `CustomVideoSource` enumeration in MediaSourceType +- The `RouteBluetoothDeviceA2DP` enumeration in AudioRoute +- LocalAudioStats: Adds the `earMonitorDelay` and `aecEstimatedDelay` +- selectMultiAudioTrack +- onPlayerCacheStats +- onPlayerPlaybackStats +- PlayerPlaybackStats + +**Modified** + +- `routeBluetooth` is renamed as`RouteBluetoothDeviceHFP` +- All `ERROR` fields in the following enumerations are changed to `REASON`: + - `LocalAudioStreamErrorOk` + - `LocalAudioStreamErrorFailure` + - `LocalAudioStreamErrorDeviceNoPermission` + - `LocalAudioStreamErrorDeviceBusy` + - `LocalAudioStreamErrorRecordFailure` + - `LocalAudioStreamErrorEncodeFailure` + - `LocalVideoStreamErrorOk` + - `LocalVideoStreamErrorFailure` + - `LocalVideoStreamErrorDeviceNoPermission` + - `LocalVideoStreamErrorDeviceBusy` + - `LocalVideoStreamErrorCaptureFailure` + - `LocalVideoStreamErrorCodecNotSupport` + - `LocalVideoStreamErrorCaptureInbackground` (iOS) + - `LocalVideoStreamErrorCaptureMultipleForegroundApps` (iOS) + - `LocalVideoStreamErrorDeviceNotFound` + - `LocalVideoStreamErrorDeviceDisconnected` + - `LocalVideoStreamErrorDeviceInvalidId` + - `DirectCdnStreamingErrorOk` + - `DirectCdnStreamingErrorFailed` + - `DirectCdnStreamingErrorAudioPublication` + - `DirectCdnStreamingErrorVideoPublication` + - `DirectCdnStreamingErrorNetConnect` + - `DirectCdnStreamingErrorBadName` + - `PlayerErrorNone` + - `PlayerErrorInvalidArguments` + - `PlayerErrorInternal` + - `PlayerErrorNoResource` + - `PlayerErrorInvalidMediaSource` + - `PlayerErrorUnknownStreamType` + - `PlayerErrorObjNotInitialized` + - `PlayerErrorCodecNotSupported` + - `PlayerErrorVideoRenderFailed` + - `PlayerErrorInvalidState` + - `PlayerErrorUrlNotFound` + - `PlayerErrorInvalidConnectionState` + - `PlayerErrorSrcBufferUnderflow` + - `PlayerErrorInterrupted` + - `PlayerErrorNotSupported` + - `PlayerErrorTokenExpired` + - `PlayerErrorUnknown` + - `RtmpStreamPublishErrorOk` + - `RtmpStreamPublishErrorInvalidArgument` + - `RtmpStreamPublishErrorEncryptedStreamNotAllowed` + - `RtmpStreamPublishErrorConnectionTimeout` + - `RtmpStreamPublishErrorInternalServerError` + - `RtmpStreamPublishErrorRtmpServerError` + - `RtmpStreamPublishErrorTooOften` + - `RtmpStreamPublishErrorReachLimit` + - `RtmpStreamPublishErrorNotAuthorized` + - `RtmpStreamPublishErrorStreamNotFound` + - `RtmpStreamPublishErrorFormatNotSupported` + - `RtmpStreamPublishErrorNotBroadcaster` + - `RtmpStreamPublishErrorTranscodingNoMixStream` + - `RtmpStreamPublishErrorNetDown` + - `RtmpStreamPublishErrorInvalidPrivilege` + - `RtmpStreamUnpublishErrorOk` + +**Deleted** + +- `startChannelMediaRelay` +- `updateChannelMediaRelay` +- `startChannelMediaRelayEx` +- `updateChannelMediaRelayEx` +- `onChannelMediaRelayEvent` +- `ChannelMediaRelayEvent` + ### v4.2.6 diff --git a/shared/video-sdk/reference/release-notes/unity.mdx b/shared/video-sdk/reference/release-notes/unity.mdx index 84cdbfa9e..26085d6a8 100644 --- a/shared/video-sdk/reference/release-notes/unity.mdx +++ b/shared/video-sdk/reference/release-notes/unity.mdx @@ -1,8 +1,215 @@ +import KnownIssues from '@docs/shared/video-sdk/reference/known-issues/unity.mdx'; ### Known issues -See [Known issues](known-issues). + + +### v4.3.0 + +v4.3.0 was released on February 28, 2024. + +#### Compatibility changes + +This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, you need to update the code in the app after upgrading to this release. + +1. **Renaming parameters in callbacks** + + In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Please modify the parameter settings in the callbacks after upgrading to this release. + + | Callback | Original parameter name | New parameter name | + | ---------------------------------- | ----------------------- | ----------------------- | + | `OnLocalAudioStateChanged` | `error` | `reason` | + | `onLocalVideoStateChanged` | `error` | `reason` | + | `OnDirectCdnStreamingStateChanged` | `error` | `reason` | + | `OnRtmpStreamingStateChanged` | `errCode` | `reason` | + + | Original enumeration class | New enumeration class | + | ---------------------------- | ----------------------------- | + | `LOCAL_AUDIO_STREAM_ERROR` | `LOCAL_AUDIO_STREAM_REASON` | + | `LOCAL_VIDEO_STREAM_ERROR` | `LOCAL_VIDEO_STREAM_REASON` | + | `DIRECT_CDN_STREAMING_ERROR` | `DIRECT_CDN_STREAMING_REASON` | + | `MEDIA_PLAYER_ERROR` | `MEDIA_PLAYER_REASON` | + | `RTMP_STREAM_PUBLISH_ERROR` | `RTMP_STREAM_PUBLISH_REASON` | + + **Note:** For specific renaming of enumerations, please refer to [API changes](#api-changes). + +2. **Channel media relay** + + To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below: + + | Deleted methods and callbacks | Alternative methods and callbacks | + | ------------------------------------------------------------ | ---------------------------------- | + |
  • `startChannelMediaRelay`
  • `updateChannelMediaRelay`
| `startOrUpdateChannelMediaRelay` | + |
  • `startChannelMediaRelayEx`
  • `updateChannelMediaRelayEx`
| `startOrUpdateChannelMediaRelayEx` | + | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | + +3. **Reasons for local video state changes** + + This release makes the following modifications to the enumerations in the LOCAL_VIDEO_STREAM_REASON class: + + - The value of `LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_PAUSED` (formerly `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_PAUSED`) has been changed from 23 to 28. + - The value of `LOCAL_VIDEO_STREAM_REASON_SCREEN_CAPTURE_RESUMED` (formerly `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_RESUMED`) has been changed from 24 to 29. + - The `LOCAL_VIDEO_STREAM_ERROR_CODEC_NOT_SUPPORT` enumeration has been changed to `LOCAL_VIDEO_STREAM_REASON_CODEC_NOT_SUPPORT`. + +#### New features + +1. **Local preview with multiple views** + + This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows: + + 1. Call SetupLocalVideo to set the first view: Set the `position` parameter to `POSITION_POST_CAPTURER_ORIGIN` (introduced in this release) in `VideoCanvas`. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. + 2. Call SetupLocalVideo to set the second view: Set the `position` parameter to `POSITION_POST_CAPTURER` in `VideoCanvas`, the video observed here has the effect of video preprocessing. + 3. Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects. + +2. **Query Device Score** + + This release adds the QueryDeviceScore method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video scenarios, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business scenarios is varied. For specific score recommendations, please contact [technical support](mailto:support@agora.io). + +3. **Select different audio tracks for local playback and streaming** + + This release introduces the SelectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in scenarios like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the OpenWithMediaSource method and enable this function by setting the `enableMultiAudioTrack` parameter in MediaSource. + +4. **Others** + + This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK. + + - SetRemoteSubscribeFallbackOption: Sets fallback option for the subscribed video stream in weak network conditions. + - OnRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve. + - GetRecordingDeviceVolume(Windows): Sets the volume of the audio capturing device. + - SetPlayerOption and SetPlayerOption: Sets media player options for providing technical previews or special customization features. + - EnableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source. + +#### Improvements + +1. **SDK task processing scheduling optimization** + + This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects: + + - The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%. + - The API call duration and response time are reduced by 5% to 50%. + - The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in scenarios involving high resolutions and frame rates. + - The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific scenarios. + +2. **In-ear monitoring volume boost** + + This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling SetInEarMonitoringVolume. + +3. **Spatial audio effects usability improvement** + + - This release optimizes the design of the SetZones method, supporting the ability to set the `zones` parameter to `NULL`, indicating the clearing of all echo cancellation zones. + - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the methods in ILocalSpatialAudioEngine. + +4. **Other Improvements** + + This release also includes the following improvements: + + - This release optimizes the SDK's domain name resolution strategy, improving the stability of calling to resolve domain names in complex network environments. + - When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color. + - This release adds the `earMonitorDelay` and `aecEstimatedDelay` members in LocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. + - The OnPlayerCacheStats callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started. + - The OnPlayerPlaybackStats callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through PlayerPlaybackStats. + +#### Issues fixed + +This release fixed the following issues: + +- When sharing two screen sharing video streams simultaneously, the reported `captureFrameRate` in the OnLocalVideoStats callback is 0, which is not as expected. + +#### API changes + +**Added** + +- The `subviewUid` member in VideoCanvas +- EnableCustomAudioLocalPlayback +- QueryDeviceScore +- The `CUSTOM_VIDEO_SOURCE` enumeration in MEDIA_SOURCE_TYPE +- The `ROUTE_BLUETOOTH_DEVICE_A2DP` enumeration in AudioRoute +- SelectMultiAudioTrack +- OnPlayerCacheStats +- OnPlayerPlaybackStats +- PlayerPlaybackStats + +**Modified** + +- All `ERROR` fields in the following enumerations are changed to `REASON`: + + - `LOCAL_AUDIO_STREAM_ERROR_OK` + - `LOCAL_AUDIO_STREAM_ERROR_FAILURE` + - `LOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSION` + - `LOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSY` + - `LOCAL_AUDIO_STREAM_ERROR_RECORD_FAILURE` + - `LOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURE` + - `LOCAL_AUDIO_STREAM_ERROR_RECORD_INVALID_ID` + - `LOCAL_AUDIO_STREAM_ERROR_PLAYOUT_INVALID_ID` + - `LOCAL_VIDEO_STREAM_ERROR_OK` + - `LOCAL_VIDEO_STREAM_ERROR_FAILURE` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSION` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_BUSY` + - `LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE` + - `LOCAL_VIDEO_STREAM_ERROR_CODEC_NOT_SUPPORT` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_NOT_FOUND` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_DISCONNECTED` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_INVALID_ID` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_MINIMIZED` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_CLOSED` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_OCCLUDED` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_NO_PERMISSION` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_PAUSED` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_RESUMED` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_HIDDEN` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_HIDDEN` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_MINIMIZED` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_FAILURE` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_SYSTEM_PRESSURE` + - `DIRECT_CDN_STREAMING_ERROR_OK` + - `DIRECT_CDN_STREAMING_ERROR_FAILED` + - `DIRECT_CDN_STREAMING_ERROR_AUDIO_PUBLICATION` + - `DIRECT_CDN_STREAMING_ERROR_VIDEO_PUBLICATION` + - `DIRECT_CDN_STREAMING_ERROR_NET_CONNECT` + - `DIRECT_CDN_STREAMING_ERROR_BAD_NAME` + - `PLAYER_ERROR_NONE` + - `PLAYER_ERROR_INVALID_ARGUMENTS` + - `PLAYER_ERROR_INTERNAL` + - `PLAYER_ERROR_NO_RESOURCE` + - `PLAYER_ERROR_INVALID_MEDIA_SOURCE` + - `PLAYER_ERROR_UNKNOWN_STREAM_TYPE` + - `PLAYER_ERROR_OBJ_NOT_INITIALIZED` + - `PLAYER_ERROR_CODEC_NOT_SUPPORTED` + - `PLAYER_ERROR_VIDEO_RENDER_FAILED` + - `PLAYER_ERROR_INVALID_STATE` + - `PLAYER_ERROR_URL_NOT_FOUND` + - `PLAYER_ERROR_INVALID_CONNECTION_STATE` + - `PLAYER_ERROR_SRC_BUFFER_UNDERFLOW` + - `PLAYER_ERROR_INTERRUPTED` + - `PLAYER_ERROR_NOT_SUPPORTED` + - `PLAYER_ERROR_TOKEN_EXPIRED` + - `PLAYER_ERROR_UNKNOWN` + - `RTMP_STREAM_PUBLISH_ERROR_OK` + - `RTMP_STREAM_PUBLISH_ERROR_INVALID_ARGUMENT` + - `RTMP_STREAM_PUBLISH_ERROR_ENCRYPTED_STREAM_NOT_ALLOWED` + - `RTMP_STREAM_PUBLISH_ERROR_CONNECTION_TIMEOUT` + - `RTMP_STREAM_PUBLISH_ERROR_INTERNAL_SERVER_ERROR` + - `RTMP_STREAM_PUBLISH_ERROR_RTMP_SERVER_ERROR` + - `RTMP_STREAM_PUBLISH_ERROR_TOO_OFTEN` + - `RTMP_STREAM_PUBLISH_ERROR_REACH_LIMIT` + - `RTMP_STREAM_PUBLISH_ERROR_NOT_AUTHORIZED` + - `RTMP_STREAM_PUBLISH_ERROR_STREAM_NOT_FOUND` + - `RTMP_STREAM_PUBLISH_ERROR_FORMAT_NOT_SUPPORTED` + - `RTMP_STREAM_PUBLISH_ERROR_NOT_BROADCASTER` + - `RTMP_STREAM_PUBLISH_ERROR_TRANSCODING_NO_MIX_STREAM` + - `RTMP_STREAM_PUBLISH_ERROR_NET_DOWN` + - `RTMP_STREAM_PUBLISH_ERROR_INVALID_PRIVILEGE` + - `RTMP_STREAM_UNPUBLISH_ERROR_OK` + +**Deleted** + +- `StartChannelMediaRelay` +- `UpdateChannelMediaRelay` +- `StartChannelMediaRelayEx` +- `UpdateChannelMediaRelayEx` +- `OnChannelMediaRelayEvent` +- `CHANNEL_MEDIA_RELAY_EVENT` ### v4.2.6 diff --git a/shared/video-sdk/reference/release-notes/web.mdx b/shared/video-sdk/reference/release-notes/web.mdx index f4053d460..37680dc94 100644 --- a/shared/video-sdk/reference/release-notes/web.mdx +++ b/shared/video-sdk/reference/release-notes/web.mdx @@ -21,7 +21,7 @@ This release adds the following new features: **Send the SEI in the H.264 video streams** - This release introduces the `LocalVideoTrack.sendSeiData` method and the `RemoteVideoTrack.on("sei-received")` event to add and send the Supplemental Enhancement Information (SEI) within the H.264 video streams. The SEI data package has a maximum size of 1KB and encompasses dynamic facial capture data, virtual video information, and digital watermarking. To enable this feature, please contact technical support. + This release introduces the `LocalVideoTrack.sendSeiData` method and the `LocalVideoTrack.sei-received` event to add and send the Supplemental Enhancement Information (SEI) within the H.264 video streams. The SEI data package has a maximum size of 1KB and encompasses dynamic facial capture data, virtual video information, and digital watermarking. To enable this feature, please contact technical support. **Note:** @@ -53,11 +53,13 @@ This release fixes the following issue: **Added**: +- `LocalVideoTrack.sei-received` - `LocalVideoTrack.sendSeiData` -- `RemoteVideoTrack.on("sei-received")` +- `RemoteTrack.video-state-changed` - `RemoteVideoTrack.on("video-state-changed")` - `encryptDataStream` parameter to `AgoraRTCClient.setEncryptionConfig` + ### v4.20.0 v4.20.0 was released on December 8, 2023. diff --git a/shared/voice-sdk/reference/release-notes/android.mdx b/shared/voice-sdk/reference/release-notes/android.mdx index a401d50f8..69a0a591c 100644 --- a/shared/voice-sdk/reference/release-notes/android.mdx +++ b/shared/voice-sdk/reference/release-notes/android.mdx @@ -703,5 +703,4 @@ This release adds `voicePitch` in `AudioVolumeInfo` of `onAudioVolumeIndication` This release adds the `onPermissionError` method, which is automatically reported when the audio capture device or camera does not obtain the appropriate permission. You can enable the corresponding device permission according to the prompt of the callback. -
- +
\ No newline at end of file diff --git a/shared/voice-sdk/reference/release-notes/electron.mdx b/shared/voice-sdk/reference/release-notes/electron.mdx index 493119d9c..cd873382f 100644 --- a/shared/voice-sdk/reference/release-notes/electron.mdx +++ b/shared/voice-sdk/reference/release-notes/electron.mdx @@ -1,5 +1,188 @@ +### v4.3.0 + +v4.3.0 was released on February 28, 2024. + +#### Compatibility changes + +This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, update the code in the app after upgrading to this release. + +1. **Renaming parameters in callbacks** + + In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Modify the parameter settings in the callbacks after upgrading to this release. + + | Callback | Original parameter name | New parameter name | + | ---------------------------------- | ----------------------- | ----------------------- | + | `onLocalAudioStateChanged` | `error` | `reason` | + | `onLocalVideoStateChanged` | `error` | `reason` | + | `onDirectCdnStreamingStateChanged` | `error` | `reason` | + | `onRtmpStreamingStateChanged` | `errCode` | `reason` | + + | Original enumeration class | New enumeration class | + | ---------------------------- | -------------------------- | + | `LocalAudioStreamError` | `LocalAudioStreamReason` | + | `LocalVideoStreamError` | `LocalVideoStreamReason` | + | `DirectCdnStreamingError` | `DirectCdnStreamingReason` | + | `MediaPlayerError` | `MediaPlayerReason` | + | `RtmpStreamPublishErrorType` | `RtmpStreamPublishReason` | + + **Note:** For specific renaming of enumerations, please refer to [API changes](#api-changes). + +1. **Channel media relay** + + To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below: + + | Deleted methods and callbacks | Alternative methods and callbacks | + | ----------------------------------------------------- | ---------------------------------- | + | `startChannelMediaRelay`,`updateChannelMediaRelay` | `startOrUpdateChannelMediaRelay` | + | `startChannelMediaRelayEx`,`updateChannelMediaRelayEx` | `startOrUpdateChannelMediaRelayEx` | + | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | + +1. **Audio loopback capturing** + + - Before v4.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will not be disabled. + - As of v4.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will be disabled as well. If you need to enable audio loopback capturing, you need to enable the audio module by calling the enableAudio method and then call enableLoopbackRecording. + +#### New features + +1. **Query Device Score** + + This release adds the queryDeviceScore method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video scenarios, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business scenarios is varied. For specific score recommendations, please contact [technical support](mailto:support@agora.io). + +1. **Select different audio tracks for local playback and streaming** + + This release introduces the selectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in scenarios like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the openWithMediaSource method and enable this function by setting the `enableMultiAudioTrack` parameter in MediaSource. + +1. **Others** + + This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK. + + - setPlaybackDeviceVolume: Sets the volume of the audio playback device. + - getRecordingDeviceVolume: Sets the volume of the audio capturing device. + - setPlayerOptionInInt and setPlayerOptionInString: Sets media player options for providing technical previews or special customization features. + - enableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source. + +#### Improvements + +1. **SDK task processing scheduling optimization** + + This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects: + + - The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%. + - The API call duration and response time are reduced by 5% to 50%. + - The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in scenarios involving high resolutions and frame rates. + - The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific scenarios. + +1. **In-ear monitoring volume boost** + + This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling setInEarMonitoringVolume. + +1. **Spatial audio effects usability improvement** + + - This release optimizes the design of the setZones method, supporting the ability to set the `zones` parameter to `NULL`, indicating the clearing of all echo cancellation zones. + - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the ILocalSpatialAudioEngine method. + +1. **Other Improvements** + + This release also includes the following improvements: + + - This release optimizes the SDK's domain name resolution strategy, improving the stability of calling to resolve domain names in complex network environments. + - This release adds the `earMonitorDelay` and `aecEstimatedDelay` members in LocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. + - The onPlayerCacheStats callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started. + - The onPlayerPlaybackStats callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through PlayerPlaybackStats. + +#### Issues fixed + +This release fixed the following issue: + +- The SDK failed to detect any changes in the audio routing after plugging in and out 3.5 mm earphones. + +#### API changes + +**Added** + +- enableCustomAudioLocalPlayback +- queryDeviceScore +- The `CustomVideoSource` enumeration in MediaSourceType +- The `RouteBluetoothDeviceA2DP` enumeration in AudioRoute +- selectMultiAudioTrack +- onPlayerCacheStats +- onPlayerPlaybackStats +- PlayerPlaybackStats + +**Modified** + +- All `ERROR` fields in the following enumerations are changed to `REASON`: + - `LocalAudioStreamErrorOk` + - `LocalAudioStreamErrorFailure` + - `LocalAudioStreamErrorDeviceNoPermission` + - `LocalAudioStreamErrorDeviceBusy` + - `LocalAudioStreamErrorRecordFailure` + - `LocalAudioStreamErrorEncodeFailure` + - `LocalAudioStreamErrorRecordInvalidId` (Windows) + - `LocalAudioStreamErrorPlayoutInvalidId` (Windows) + - `LocalVideoStreamErrorOk` + - `LocalVideoStreamErrorFailure` + - `LocalVideoStreamErrorDeviceNoPermission` + - `LocalVideoStreamErrorDeviceBusy` + - `LocalVideoStreamErrorCaptureFailure` + - `LocalVideoStreamErrorCodecNotSupport` + - `LocalVideoStreamErrorDeviceNotFound` + - `LocalVideoStreamErrorDeviceDisconnected` + - `LocalVideoStreamErrorDeviceInvalidId` + - `LocalVideoStreamErrorScreenCaptureWindowMinimized` + - `LocalVideoStreamErrorScreenCaptureWindowClosed` + - `LocalVideoStreamErrorScreenCaptureWindowOccluded` + - `DirectCdnStreamingErrorOk` + - `DirectCdnStreamingErrorFailed` + - `DirectCdnStreamingErrorAudioPublication` + - `DirectCdnStreamingErrorVideoPublication` + - `DirectCdnStreamingErrorNetConnect` + - `DirectCdnStreamingErrorBadName` + - `PlayerErrorNone` + - `PlayerErrorInvalidArguments` + - `PlayerErrorInternal` + - `PlayerErrorNoResource` + - `PlayerErrorInvalidMediaSource` + - `PlayerErrorUnknownStreamType` + - `PlayerErrorObjNotInitialized` + - `PlayerErrorCodecNotSupported` + - `PlayerErrorVideoRenderFailed` + - `PlayerErrorInvalidState` + - `PlayerErrorUrlNotFound` + - `PlayerErrorInvalidConnectionState` + - `PlayerErrorSrcBufferUnderflow` + - `PlayerErrorInterrupted` + - `PlayerErrorNotSupported` + - `PlayerErrorTokenExpired` + - `PlayerErrorUnknown` + - `RtmpStreamPublishErrorOk` + - `RtmpStreamPublishErrorInvalidArgument` + - `RtmpStreamPublishErrorEncryptedStreamNotAllowed` + - `RtmpStreamPublishErrorConnectionTimeout` + - `RtmpStreamPublishErrorInternalServerError` + - `RtmpStreamPublishErrorRtmpServerError` + - `RtmpStreamPublishErrorTooOften` + - `RtmpStreamPublishErrorReachLimit` + - `RtmpStreamPublishErrorNotAuthorized` + - `RtmpStreamPublishErrorStreamNotFound` + - `RtmpStreamPublishErrorFormatNotSupported` + - `RtmpStreamPublishErrorNotBroadcaster` + - `RtmpStreamPublishErrorTranscodingNoMixStream` + - `RtmpStreamPublishErrorNetDown` + - `RtmpStreamPublishErrorInvalidPrivilege` + - `RtmpStreamUnpublishErrorOk` + +**Deleted** + +- `startChannelMediaRelay` +- `updateChannelMediaRelay` +- `startChannelMediaRelayEx` +- `updateChannelMediaRelayEx` +- `onChannelMediaRelayEvent` +- `ChannelMediaRelayEvent` + ### v4.2.6 v4.2.6 was released on November 24, 2023. diff --git a/shared/voice-sdk/reference/release-notes/flutter.mdx b/shared/voice-sdk/reference/release-notes/flutter.mdx index 2c25987c6..fc6b67282 100644 --- a/shared/voice-sdk/reference/release-notes/flutter.mdx +++ b/shared/voice-sdk/reference/release-notes/flutter.mdx @@ -1,8 +1,221 @@ +import KnownIssues from '@docs/shared/voice-sdk/reference/known-issues/flutter.mdx'; ### Known issues -See [Known issues](known-issues). + + +### v6.3.0 + +v6.3.0 was released on February 28, 2024. + +#### Compatibility changes + +This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, you need to update the code in the app after upgrading to this release. + +1. **Renaming parameters in callbacks** + + In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Please modify the parameter settings in the callbacks after upgrading to this release. + + | Callback | Original parameter name | New parameter name | + | ------------------------------------------------------------ | ----------------------- | ----------------------- | + | `onLocalAudioStateChanged` | `error` | `reason` | + | `onLocalVideoStateChanged` | `error` | `reason` | + | `onDirectCdnStreamingStateChanged` | `error` | `reason` | + | `onRtmpStreamingStateChanged` | `errCode` | `reason` | + + | Original enumeration class | New enumeration class | + | -------------------------- | -------------------------- | + | `LocalAudioStreamError` | `localAudioStreamReason` | + | `LocalVideoStreamError` | `LocalVideoStreamReason` | + | `DirectCdnStreamingError` | `DirectCdnStreamingReason` | + | `MediaPlayerError` | `MediaPlayerReason` | + | `RtmpStreamPublishErrorType` | `RtmpStreamPublishReason` | + + **Note:** For specific renaming of enumerations, please refer to [API changes](#api-changes). + +1. **Channel media relay** + + To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below: + + | Deleted methods and callbacks | Alternative methods and callbacks | + | ----------------------------------------------------- | ---------------------------------- | + |
  • `startChannelMediaRelay`
  • `updateChannelMediaRelay`
| `startOrUpdateChannelMediaRelay` | + |
  • `startChannelMediaRelayEx`
  • `updateChannelMediaRelayEx`
| `startOrUpdateChannelMediaRelayEx` | + | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | + +1. **Audio route** + + Starting with this release, `routeBluetooth` in AudioRoute is renamed to `routeHeadsetbluetooth`, representing a Bluetooth device using the HFP protocol. `routeBluetoothSpeaker`(10) is added to represent a Bluetooth device using the A2DP protocol. + + +1. **Audio loopback capturing (Windows, macOS)** + + - Before v6.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will not be disabled. + - As of v6.3.0, if you call the disableAudio method to disable the audio module, audio loopback capturing will be disabled as well. If you need to enable audio loopback capturing, you need to enable the audio module by calling the enableAudio method and then call enableLoopbackRecording. + +#### New features + +1. **Local preview with multiple views** + + This release supports local preview with simultaneous display of multiple frames, where the videos shown in the frames are positioned at different observation positions along the video link. Examples of usage are as follows: + + 1. Call setupLocalVideo to set the first view: Set the `position` parameter to `positionPostCapturerOrigin` (introduced in this release) in `VideoCanvas`. This corresponds to the position after local video capture and before preprocessing. The video observed here does not have preprocessing effects. + 1. Call setupLocalVideo to set the second view: Set the `position` parameter to `positionPostCapturer` in `VideoCanvas`, the video observed here has the effect of video preprocessing. + 1. Observe the local preview effect: The first view is the original video of a real person; the second view is the virtual portrait after video preprocessing (including image enhancement, virtual background, and local preview of watermarks) effects. + +1. **Query device score** + + This release adds the queryDeviceScore method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video scenarios, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business scenarios is varied. For specific score recommendations, please contact [technical support](mailto:support@agora.io). + +1. **Select different audio tracks for local playback and streaming** + + This release introduces the selectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in scenarios like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the openWithMediaSource method and enable this function by setting the `enableMultiAudioTrack` parameter in MediaSource. + +1. **Others** + + This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK. + + - onRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve. + - setPlaybackDeviceVolume (Windows): Sets the volume of the audio playback device. + - setPlaybackDeviceVolume: Sets the volume of the audio capturing device. + - setPlayerOptionInInt and setPlayerOptionInString: Sets media player options for providing technical previews or special customization features. + - enableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source. + +#### Improvements + +1. **SDK task processing scheduling optimization** + + This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects: + + - The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%. + - The API call duration and response time are reduced by 5% to 50%. + - The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in scenarios involving high resolutions and frame rates. + - The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific scenarios. + +1. **In-ear monitoring volume boost** + + This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling setInEarMonitoringVolume. + +1. **Spatial audio effects usability improvement** + + - This release optimizes the design of the setZones method, supporting the ability to set the `zones` parameter to `NULL`, indicating the clearing of all echo cancellation zones. + - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the LocalSpatialAudioEngine method. + +1. **Other Improvements** + + This release also includes the following improvements: + + - The onPlayerCacheStats callback is added to reports the statistics of the media file being cached. This callback is triggered once per second after file caching is started. + - The onPlayerPlaybackStats callback is added to reports the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through PlayerPlaybackStats. + - This release optimizes the SDK's domain name resolution strategy, improving the stability of calling `setLocalAccessPoint` to resolve domain names in complex network environments. + - This release adds the `earMonitorDelay` and `aecEstimatedDelay` members in LocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. + +#### Issues fixed + +This release fixed the following issue: + +- The SDK failed to detect any changes in the audio routing after plugging in and out 3.5mm earphones (Windows). + +#### API changes + +**Added** + +- onTranscodedStreamLayoutInfo (Android, iOS) +- VideoLayout (Android, iOS) +- The `subviewUid` member in VideoCanvas +- enableCustomAudioLocalPlayback +- selectMultiAudioTrack +- onPlayerCacheStats +- onPlayerPlaybackStats +- PlayerPlaybackStats +- The `earMonitorDelay` and `aecEstimatedDelay` members in LocalAudioStats +- queryDeviceScore +- MediaSourceType +- The `routeBluetoothSpeaker` enumeration in AudioRoute + +**Modified** + +- `routeBluetooth` is renamed as `routeHeadsetbluetooth` +- All `Error` fields in the following enumerations are changed to `Reason`: + - `localAudioStreamErrorOk` + - `localAudioStreamErrorFailure` + - `localAudioStreamErrorDeviceNoPermission` + - `localAudioStreamErrorDeviceBusy` + - `localAudioStreamErrorRecordFailure` + - `localAudioStreamErrorEncodeFailure` + - `localAudioStreamErrorRecordInvalidId` (Windows) + - `localAudioStreamErrorPlayoutInvalidId` (Windows) + - `localVideoStreamErrorOk` + - `localVideoStreamErrorFailure` + - `localVideoStreamErrorDeviceNoPermission` + - `localVideoStreamErrorDeviceBusy` + - `localVideoStreamErrorCaptureFailure` + - `localVideoStreamErrorCodecNotSupport` + - `localVideoStreamErrorCaptureInbackground` (iOS) + - `localVideoStreamErrorCaptureMultipleForegroundApps` (iOS) + - `localVideoStreamErrorDeviceNotFound` + - `localVideoStreamErrorDeviceDisconnected` + - `localVideoStreamErrorDeviceInvalidId` + - `localVideoStreamErrorScreenCaptureWindowMinimized` + - `localVideoStreamErrorScreenCaptureWindowClosed` + - `localVideoStreamErrorScreenCaptureWindowOccluded` + - `localVideoStreamErrorScreenCaptureNoPermission` (Windows) + - `localVideoStreamErrorScreenCapturePaused` (Windows) + - `localVideoStreamErrorScreenCaptureResumed` (Windows) + - `localVideoStreamErrorScreenCaptureWindowHidden` (Windows) + - `localVideoStreamErrorScreenCaptureWindowRecoverFromHidden` (Windows) + - `localVideoStreamErrorScreenCaptureWindowRecoverFromMinimized` (Windows) + - `localVideoStreamErrorScreenCaptureFailure` (Windows) + - `localVideoStreamErrorDeviceSystemPressure` (Windows) + - `directCdnStreamingErrorOk` + - `directCdnStreamingErrorFailed` + - `directCdnStreamingErrorAudioPublication` + - `directCdnStreamingErrorVideoPublication` + - `directCdnStreamingErrorNetConnect` + - `directCdnStreamingErrorBadName` + - `playerErrorNone` + - `playerErrorInvalidArguments` + - `playerErrorInternal` + - `playerErrorNoResource` + - `playerErrorInvalidMediaSource` + - `playerErrorUnknownStreamType` + - `playerErrorObjNotInitialized` + - `playerErrorCodecNotSupported` + - `playerErrorVideoRenderFailed` + - `playerErrorInvalidState` + - `playerErrorUrlNotFound` + - `playerErrorInvalidConnectionState` + - `playerErrorSrcBufferUnderflow` + - `playerErrorInterrupted` + - `playerErrorNotSupported` + - `playerErrorTokenExpired` + - `playerErrorUnknown` + - `rtmpStreamPublishErrorOk` + - `rtmpStreamPublishErrorInvalidArgument` + - `rtmpStreamPublishErrorEncryptedStreamNotAllowed` + - `rtmpStreamPublishErrorConnectionTimeout` + - `rtmpStreamPublishErrorInternalServerError` + - `rtmpStreamPublishErrorRtmpServerError` + - `rtmpStreamPublishErrorTooOften` + - `rtmpStreamPublishErrorReachLimit` + - `rtmpStreamPublishErrorNotAuthorized` + - `rtmpStreamPublishErrorStreamNotFound` + - `rtmpStreamPublishErrorFormatNotSupported` + - `rtmpStreamPublishErrorNotBroadcaster` + - `rtmpStreamPublishErrorTranscodingNoMixStream` + - `rtmpStreamPublishErrorNetDown` + - `rtmpStreamPublishErrorInvalidPrivilege` + - `rtmpStreamUnpublishErrorOk` + +**Deleted** + +- `startChannelMediaRelay` +- `updateChannelMediaRelay` +- `startChannelMediaRelayEx` +- `updateChannelMediaRelayEx` +- `onChannelMediaRelayEvent` +- `ChannelMediaRelayEvent` ### v6.2.6 diff --git a/shared/voice-sdk/reference/release-notes/index.mdx b/shared/voice-sdk/reference/release-notes/index.mdx index 9530ce6f5..303f474b8 100644 --- a/shared/voice-sdk/reference/release-notes/index.mdx +++ b/shared/voice-sdk/reference/release-notes/index.mdx @@ -2,6 +2,7 @@ import Android from './android.mdx'; import Unity from './unity.mdx'; import Flutter from './flutter.mdx'; import ReactNative from './react-native.mdx'; +import ReactJS from './react-js.mdx'; import Electron from './electron.mdx'; import Ios from './ios.mdx'; import Macos from './macos.mdx'; @@ -24,6 +25,7 @@ This page provides the release notes for the +import KnownIssues from '@docs/shared/voice-sdk/reference/known-issues/ios.mdx'; ### Known issues -See [Known issues](known-issues). + ### v4.3.0 diff --git a/shared/voice-sdk/reference/release-notes/react-js.mdx b/shared/voice-sdk/reference/release-notes/react-js.mdx new file mode 100644 index 000000000..5105761d2 --- /dev/null +++ b/shared/voice-sdk/reference/release-notes/react-js.mdx @@ -0,0 +1,65 @@ + + +### v2.0.0 + +v2.0.0 was released on December XX, 2023. + +#### Compatibility changes + +**SDK structural optimization** + +The SDK for ReactJS is developed based on the SDK for Web v4.x. To further enhance usability, this version incorporates all Web SDK APIs into the ReactJS SDK, eliminating the need to integrate the Web SDK separately. + +Upon upgrading to this version, make the following modifications: + +- Reintegrate the React SDK. Taking npm as an example: + + ```sh + # Remove existing dependencies + npm uninstall agora-rtc-react agora-rtc-sdk-ng + # Reinstall dependencies + npm install agora-rtc-react + ``` + +- Adjust the import of the `AgoraRTC` interface from the Web SDK. Taking the combined import of `AgoraRTC` and `AgoraRTCProvider` as an example: + + ```jsx + // Before this version + import AgoraRTC from "agora-rtc-sdk-ng"; + import { AgoraRTCProvider } from "agora-rtc-react"; + // As of this version + import AgoraRTC, { AgoraRTCProvider } from "agora-rtc-react" + ``` + +**NetworkQuality renaming** + +To avoid redundancy with the Web SDK's API, this version makes the following changes to the ReactJS SDK's `NetworkQuality` interface: + +- Rename `NetworkQuality` to `NetworkQualityEx` and have `NetworkQualityEx` inherit the `NetworkQuality` interface from the Web SDK. +- Rename the `uplink` and `downlink` properties to `uplinkNetworkQuality` and `downlinkNetworkQuality`, respectively. + +If you use the `NetworkQuality` interface from the ReactJS SDK, make the necessary code modifications after upgrading to this version. + +#### Improvements + +This version adds the `cameraVideoTrackConfig` parameter to `useLocalCameraTrack`, enabling you to set video capture configurations such as capture devices and encoder when creating a camera video track. + +#### Fixed issues + +This version fixed the issue that the SDK threw the error `CAN_NOT_PUBLISH_MULTIPLE_VIDEO_TRACKS` in Firefox's developer mode. + +#### API Changes + +**Added** + +- `cameraVideoTrackConfig` to `useLocalCameraTrack` + +**Modified** + +- `NetworkQuality` to `NetworkQualityEx` + - `uplink` to `uplinkNetworkQuality` + - `downlink` to `downlinkNetworkQuality` + + + + \ No newline at end of file diff --git a/shared/voice-sdk/reference/release-notes/react-native.mdx b/shared/voice-sdk/reference/release-notes/react-native.mdx index 7933dc321..dd3e187d8 100644 --- a/shared/voice-sdk/reference/release-notes/react-native.mdx +++ b/shared/voice-sdk/reference/release-notes/react-native.mdx @@ -1,8 +1,192 @@ +import KnownIssues from '@docs/shared/voice-sdk/reference/known-issues/react-native.mdx'; ### Known issues -See [Known issues](known-issues). + + +### v4.3.0 + +v4.3.0 was released on February 28, 2024. + +#### Compatibility changes + +This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, you need to update the code in the app after upgrading to this release. + +1. **Renaming parameters in callbacks** + + In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Please modify the parameter settings in the callbacks after upgrading to this release. + + | Callback | Original parameter name | New parameter name | + | ---------------------------------- | ----------------------- | ----------------------- | + | `onLocalAudioStateChanged` | `error` | `reason` | + | `onLocalVideoStateChanged` | `error` | `reason` | + | `onDirectCdnStreamingStateChanged` | `error` | `reason` | + | `onRtmpStreamingStateChanged` | `errCode` | `reason` | + + | Original enumeration class | New enumeration class | + | ---------------------------- | -------------------------- | + | `LocalAudioStreamError` | `LocalAudioStreamReason` | + | `LocalVideoStreamError` | `LocalVideoStreamReason` | + | `DirectCdnStreamingError` | `DirectCdnStreamingReason` | + | `MediaPlayerError` | `MediaPlayerReason` | + | `RtmpStreamPublishErrorType` | `RtmpStreamPublishReason` | + + **Note:** For specific renaming of enumerations, please refer to [API changes](#api-changes). + +2. **Channel media relay** + + To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below: + + | Deleted methods and callbacks | Alternative methods and callbacks | + | ----------------------------------------------------- | ---------------------------------- | + | `startChannelMediaRelay`,`updateChannelMediaRelay` | `startOrUpdateChannelMediaRelay` | + | `startChannelMediaRelayEx`,`updateChannelMediaRelayEx` | `startOrUpdateChannelMediaRelayEx` | + | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | + +3. **Audio route** + + Starting with this release, `RouteBluetooth` in AudioRoute is renamed to `RouteBluetoothDeviceHFP`, representing a Bluetooth device using the HFP protocol. `RouteBluetoothDeviceA2DP`(10) is added to represent a Bluetooth device using the A2DP protocol. + +#### New features + +1. **Query device score** + + This release adds the queryDeviceScore + method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video scenarios, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business scenarios is varied. For specific score recommendations, please contact [technical support](mailto:support@agora.io). + +1. **Select different audio tracks for local playback and streaming** + + This release introduces the selectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in scenarios like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the openWithMediaSource method and enable this function by setting the `enableMultiAudioTrack` parameter in MediaSource. + +1. **Others** + + This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK. + + - setRemoteSubscribeFallbackOption: Sets fallback option for the subscribed video stream in weak network conditions. + - onRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve. + - setPlayerOptionInInt and setPlayerOptionInString: Sets media player options for providing technical previews or special customization features. + - enableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source. + +#### Improvements + +1. **SDK task processing scheduling optimization** + + This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects: + + - The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%. + - The API call duration and response time are reduced by 5% to 50%. + - The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in scenarios involving high resolutions and frame rates. + - The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific scenarios. + +1. **In-ear monitoring volume boost** + + This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling setInEarMonitoringVolume. + +1. **Spatial audio effects usability improvement** + + - This release optimizes the design of the setZones method, supporting the ability to set the `zones` parameter to `NULL`, indicating the clearing of all echo cancellation zones. + - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the ILocalSpatialAudioEngine method. + +1. **Other Improvements** + + This release also includes the following improvements: + + - This release optimizes the SDK's domain name resolution strategy, improving the stability of calling to resolve domain names in complex network environments. + - When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color. + - This release adds the `earMonitorDelay` and `aecEstimatedDelay` members in LocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. + - The onPlayerCacheStats callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started. + - The onPlayerPlaybackStats callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through PlayerPlaybackStats. + +#### Issues fixed + +This release fixed the following issue: + +- When sharing two screen sharing video streams simultaneously, the reported `captureFrameRate` in the onLocalVideoStats callback is 0, which is not as expected. + +#### API changes + +**Added** + +- enableCustomAudioLocalPlayback +- queryDeviceScore +- The `CustomVideoSource` enumeration in MediaSourceType +- The `RouteBluetoothDeviceA2DP` enumeration in AudioRoute +- LocalAudioStats: Adds the `earMonitorDelay` and `aecEstimatedDelay` +- selectMultiAudioTrack +- onPlayerCacheStats +- onPlayerPlaybackStats +- PlayerPlaybackStats + +**Modified** + +- `routeBluetooth` is renamed as`RouteBluetoothDeviceHFP` +- All `ERROR` fields in the following enumerations are changed to `REASON`: + - `LocalAudioStreamErrorOk` + - `LocalAudioStreamErrorFailure` + - `LocalAudioStreamErrorDeviceNoPermission` + - `LocalAudioStreamErrorDeviceBusy` + - `LocalAudioStreamErrorRecordFailure` + - `LocalAudioStreamErrorEncodeFailure` + - `LocalVideoStreamErrorOk` + - `LocalVideoStreamErrorFailure` + - `LocalVideoStreamErrorDeviceNoPermission` + - `LocalVideoStreamErrorDeviceBusy` + - `LocalVideoStreamErrorCaptureFailure` + - `LocalVideoStreamErrorCodecNotSupport` + - `LocalVideoStreamErrorCaptureInbackground` (iOS) + - `LocalVideoStreamErrorCaptureMultipleForegroundApps` (iOS) + - `LocalVideoStreamErrorDeviceNotFound` + - `LocalVideoStreamErrorDeviceDisconnected` + - `LocalVideoStreamErrorDeviceInvalidId` + - `DirectCdnStreamingErrorOk` + - `DirectCdnStreamingErrorFailed` + - `DirectCdnStreamingErrorAudioPublication` + - `DirectCdnStreamingErrorVideoPublication` + - `DirectCdnStreamingErrorNetConnect` + - `DirectCdnStreamingErrorBadName` + - `PlayerErrorNone` + - `PlayerErrorInvalidArguments` + - `PlayerErrorInternal` + - `PlayerErrorNoResource` + - `PlayerErrorInvalidMediaSource` + - `PlayerErrorUnknownStreamType` + - `PlayerErrorObjNotInitialized` + - `PlayerErrorCodecNotSupported` + - `PlayerErrorVideoRenderFailed` + - `PlayerErrorInvalidState` + - `PlayerErrorUrlNotFound` + - `PlayerErrorInvalidConnectionState` + - `PlayerErrorSrcBufferUnderflow` + - `PlayerErrorInterrupted` + - `PlayerErrorNotSupported` + - `PlayerErrorTokenExpired` + - `PlayerErrorUnknown` + - `RtmpStreamPublishErrorOk` + - `RtmpStreamPublishErrorInvalidArgument` + - `RtmpStreamPublishErrorEncryptedStreamNotAllowed` + - `RtmpStreamPublishErrorConnectionTimeout` + - `RtmpStreamPublishErrorInternalServerError` + - `RtmpStreamPublishErrorRtmpServerError` + - `RtmpStreamPublishErrorTooOften` + - `RtmpStreamPublishErrorReachLimit` + - `RtmpStreamPublishErrorNotAuthorized` + - `RtmpStreamPublishErrorStreamNotFound` + - `RtmpStreamPublishErrorFormatNotSupported` + - `RtmpStreamPublishErrorNotBroadcaster` + - `RtmpStreamPublishErrorTranscodingNoMixStream` + - `RtmpStreamPublishErrorNetDown` + - `RtmpStreamPublishErrorInvalidPrivilege` + - `RtmpStreamUnpublishErrorOk` + +**Deleted** + +- `startChannelMediaRelay` +- `updateChannelMediaRelay` +- `startChannelMediaRelayEx` +- `updateChannelMediaRelayEx` +- `onChannelMediaRelayEvent` +- `ChannelMediaRelayEvent` ### v4.2.6 diff --git a/shared/voice-sdk/reference/release-notes/unity.mdx b/shared/voice-sdk/reference/release-notes/unity.mdx index ead7a1fff..d9a6cfacf 100644 --- a/shared/voice-sdk/reference/release-notes/unity.mdx +++ b/shared/voice-sdk/reference/release-notes/unity.mdx @@ -1,8 +1,198 @@ +import KnownIssues from '@docs/shared/voice-sdk/reference/known-issues/unity.mdx'; ### Known issues -See [Known issues](known-issues). + + +### v4.3.0 + +v4.3.0 was released on February 28, 2024. + +#### Compatibility changes + +This release has optimized the implementation of some functions, involving renaming or deletion of some APIs. To ensure the normal operation of the project, you need to update the code in the app after upgrading to this release. + +1. **Renaming parameters in callbacks** + + In order to make the parameters in some callbacks and the naming of enumerations in enumeration classes easier to understand, the following modifications have been made in this release. Please modify the parameter settings in the callbacks after upgrading to this release. + + | Callback | Original parameter name | New parameter name | + | ---------------------------------- | ----------------------- | ----------------------- | + | `OnLocalAudioStateChanged` | `error` | `reason` | + | `onLocalVideoStateChanged` | `error` | `reason` | + | `OnDirectCdnStreamingStateChanged` | `error` | `reason` | + | `OnRtmpStreamingStateChanged` | `errCode` | `reason` | + + | Original enumeration class | New enumeration class | + | ---------------------------- | ----------------------------- | + | `LOCAL_AUDIO_STREAM_ERROR` | `LOCAL_AUDIO_STREAM_REASON` | + | `LOCAL_VIDEO_STREAM_ERROR` | `LOCAL_VIDEO_STREAM_REASON` | + | `DIRECT_CDN_STREAMING_ERROR` | `DIRECT_CDN_STREAMING_REASON` | + | `MEDIA_PLAYER_ERROR` | `MEDIA_PLAYER_REASON` | + | `RTMP_STREAM_PUBLISH_ERROR` | `RTMP_STREAM_PUBLISH_REASON` | + + **Note:** For specific renaming of enumerations, please refer to [API changes](#api-changes). + +2. **Channel media relay** + + To improve interface usability, this release removes some methods and callbacks for channel media relay. Use the alternative options listed in the table below: + + | Deleted methods and callbacks | Alternative methods and callbacks | + | ------------------------------------------------------------ | ---------------------------------- | + |
  • `startChannelMediaRelay`
  • `updateChannelMediaRelay`
| `startOrUpdateChannelMediaRelay` | + |
  • `startChannelMediaRelayEx`
  • `updateChannelMediaRelayEx`
| `startOrUpdateChannelMediaRelayEx` | + | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | + +#### New features + +1. **Query device score** + + This release adds the QueryDeviceScore method to query the device's score level to ensure that the user-set parameters do not exceed the device's capabilities. For example, in HD or UHD video scenarios, you can first call this method to query the device's score. If the returned score is low (for example, below 60), you need to lower the video resolution to avoid affecting the video experience. The minimum device score required for different business scenarios is varied. For specific score recommendations, please contact [technical support](mailto:support@agora.io). + +1. **Select different audio tracks for local playback and streaming** + + This release introduces the SelectMultiAudioTrack method that allows you to select different audio tracks for local playback and streaming to remote users. For example, in scenarios like online karaoke, the host can choose to play the original sound locally and publish the accompaniment in the channel. Before using this function, you need to open the media file through the OpenWithMediaSource method and enable this function by setting the `enableMultiAudioTrack` parameter in MediaSource. + +1. **Others** + + This release has passed the test verification of the following APIs and can be applied to the entire series of RTC 4.x SDK. + + - SetRemoteSubscribeFallbackOption: Sets fallback option for the subscribed video stream in weak network conditions. + - OnRemoteSubscribeFallbackToAudioOnly: Occurs when the subscribed video stream falls back to audio-only stream due to weak network conditions or switches back to the video stream after the network conditions improve. + - GetRecordingDeviceVolume(Windows): Sets the volume of the audio capturing device. + - SetPlayerOption and SetPlayerOption: Sets media player options for providing technical previews or special customization features. + - EnableCustomAudioLocalPlayback: Sets whether to enable the local playback of external audio source. + +#### Improvements + +1. **SDK task processing scheduling optimization** + + This release optimizes the scheduling mechanism for internal tasks within the SDK, with improvements in the following aspects: + + - The speed of video rendering and audio playback for both remote and local first frames improves by 10% to 20%. + - The API call duration and response time are reduced by 5% to 50%. + - The SDK's parallel processing capability significantly improves, delivering higher video quality (720P, 24 fps) even on lower-end devices. Additionally, image processing remains more stable in scenarios involving high resolutions and frame rates. + - The stability of the SDK is further enhanced, leading to a noticeable decrease in the crash rate across various specific scenarios. + +1. **In-ear monitoring volume boost** + + This release provides users with more flexible in-ear monitoring audio adjustment options, supporting the ability to set the in-ear monitoring volume to four times the original volume by calling SetInEarMonitoringVolume. + +1. **Spatial audio effects usability improvement** + + - This release optimizes the design of the SetZones method, supporting the ability to set the `zones` parameter to `NULL`, indicating the clearing of all echo cancellation zones. + - As of this release, it is no longer necessary to unsubscribe from the audio streams of all remote users within the channel before calling the methods in ILocalSpatialAudioEngine. + +1. **Other improvements** + + This release also includes the following improvements: + + - This release optimizes the SDK's domain name resolution strategy, improving the stability of calling to resolve domain names in complex network environments. + - When passing in an image with transparent background as the virtual background image, the transparent background can be filled with customized color. + - This release adds the `earMonitorDelay` and `aecEstimatedDelay` members in LocalAudioStats to report ear monitor delay and acoustic echo cancellation (AEC) delay, respectively. + - The OnPlayerCacheStats callback is added to report the statistics of the media file being cached. This callback is triggered once per second after file caching is started. + - The OnPlayerPlaybackStats callback is added to report the statistics of the media file being played. This callback is triggered once per second after the media file starts playing. You can obtain information like the audio and video bitrate of the media file through PlayerPlaybackStats. + +#### Issues fixed + +This release fixed the following issues: + +- When sharing two screen sharing video streams simultaneously, the reported `captureFrameRate` in the OnLocalVideoStats callback is 0, which is not as expected. + +#### API changes + +**Added** + +- EnableCustomAudioLocalPlayback +- QueryDeviceScore +- The `CUSTOM_VIDEO_SOURCE` enumeration in MEDIA_SOURCE_TYPE +- The `ROUTE_BLUETOOTH_DEVICE_A2DP` enumeration in AudioRoute +- SelectMultiAudioTrack +- OnPlayerCacheStats +- OnPlayerPlaybackStats +- PlayerPlaybackStats + +**Modified** + +- All `ERROR` fields in the following enumerations are changed to `REASON`: + + - `LOCAL_AUDIO_STREAM_ERROR_OK` + - `LOCAL_AUDIO_STREAM_ERROR_FAILURE` + - `LOCAL_AUDIO_STREAM_ERROR_DEVICE_NO_PERMISSION` + - `LOCAL_AUDIO_STREAM_ERROR_DEVICE_BUSY` + - `LOCAL_AUDIO_STREAM_ERROR_RECORD_FAILURE` + - `LOCAL_AUDIO_STREAM_ERROR_ENCODE_FAILURE` + - `LOCAL_AUDIO_STREAM_ERROR_RECORD_INVALID_ID` + - `LOCAL_AUDIO_STREAM_ERROR_PLAYOUT_INVALID_ID` + - `LOCAL_VIDEO_STREAM_ERROR_OK` + - `LOCAL_VIDEO_STREAM_ERROR_FAILURE` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_NO_PERMISSION` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_BUSY` + - `LOCAL_VIDEO_STREAM_ERROR_CAPTURE_FAILURE` + - `LOCAL_VIDEO_STREAM_ERROR_CODEC_NOT_SUPPORT` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_NOT_FOUND` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_DISCONNECTED` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_INVALID_ID` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_MINIMIZED` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_CLOSED` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_OCCLUDED` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_NO_PERMISSION` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_PAUSED` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_RESUMED` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_HIDDEN` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_HIDDEN` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_WINDOW_RECOVER_FROM_MINIMIZED` + - `LOCAL_VIDEO_STREAM_ERROR_SCREEN_CAPTURE_FAILURE` + - `LOCAL_VIDEO_STREAM_ERROR_DEVICE_SYSTEM_PRESSURE` + - `DIRECT_CDN_STREAMING_ERROR_OK` + - `DIRECT_CDN_STREAMING_ERROR_FAILED` + - `DIRECT_CDN_STREAMING_ERROR_AUDIO_PUBLICATION` + - `DIRECT_CDN_STREAMING_ERROR_VIDEO_PUBLICATION` + - `DIRECT_CDN_STREAMING_ERROR_NET_CONNECT` + - `DIRECT_CDN_STREAMING_ERROR_BAD_NAME` + - `PLAYER_ERROR_NONE` + - `PLAYER_ERROR_INVALID_ARGUMENTS` + - `PLAYER_ERROR_INTERNAL` + - `PLAYER_ERROR_NO_RESOURCE` + - `PLAYER_ERROR_INVALID_MEDIA_SOURCE` + - `PLAYER_ERROR_UNKNOWN_STREAM_TYPE` + - `PLAYER_ERROR_OBJ_NOT_INITIALIZED` + - `PLAYER_ERROR_CODEC_NOT_SUPPORTED` + - `PLAYER_ERROR_VIDEO_RENDER_FAILED` + - `PLAYER_ERROR_INVALID_STATE` + - `PLAYER_ERROR_URL_NOT_FOUND` + - `PLAYER_ERROR_INVALID_CONNECTION_STATE` + - `PLAYER_ERROR_SRC_BUFFER_UNDERFLOW` + - `PLAYER_ERROR_INTERRUPTED` + - `PLAYER_ERROR_NOT_SUPPORTED` + - `PLAYER_ERROR_TOKEN_EXPIRED` + - `PLAYER_ERROR_UNKNOWN` + - `RTMP_STREAM_PUBLISH_ERROR_OK` + - `RTMP_STREAM_PUBLISH_ERROR_INVALID_ARGUMENT` + - `RTMP_STREAM_PUBLISH_ERROR_ENCRYPTED_STREAM_NOT_ALLOWED` + - `RTMP_STREAM_PUBLISH_ERROR_CONNECTION_TIMEOUT` + - `RTMP_STREAM_PUBLISH_ERROR_INTERNAL_SERVER_ERROR` + - `RTMP_STREAM_PUBLISH_ERROR_RTMP_SERVER_ERROR` + - `RTMP_STREAM_PUBLISH_ERROR_TOO_OFTEN` + - `RTMP_STREAM_PUBLISH_ERROR_REACH_LIMIT` + - `RTMP_STREAM_PUBLISH_ERROR_NOT_AUTHORIZED` + - `RTMP_STREAM_PUBLISH_ERROR_STREAM_NOT_FOUND` + - `RTMP_STREAM_PUBLISH_ERROR_FORMAT_NOT_SUPPORTED` + - `RTMP_STREAM_PUBLISH_ERROR_NOT_BROADCASTER` + - `RTMP_STREAM_PUBLISH_ERROR_TRANSCODING_NO_MIX_STREAM` + - `RTMP_STREAM_PUBLISH_ERROR_NET_DOWN` + - `RTMP_STREAM_PUBLISH_ERROR_INVALID_PRIVILEGE` + - `RTMP_STREAM_UNPUBLISH_ERROR_OK` + +**Deleted** + +- `StartChannelMediaRelay` +- `UpdateChannelMediaRelay` +- `StartChannelMediaRelayEx` +- `UpdateChannelMediaRelayEx` +- `OnChannelMediaRelayEvent` +- `CHANNEL_MEDIA_RELAY_EVENT` ### v4.2.6