diff --git a/assets/code/video-sdk/get-started-sdk/handle-events.mdx b/assets/code/video-sdk/get-started-sdk/handle-events.mdx index fd439a2cc..c7982de85 100644 --- a/assets/code/video-sdk/get-started-sdk/handle-events.mdx +++ b/assets/code/video-sdk/get-started-sdk/handle-events.mdx @@ -404,4 +404,4 @@ func rtcEngine(_ engine: AgoraRtcEngineKit, didOfflineOfUid uid: UInt, reason: A - onUserOffline - onLeaveChannel - \ No newline at end of file + diff --git a/assets/images/chat/post_delivery_callback.png b/assets/images/chat/post_delivery_callback.png new file mode 100644 index 000000000..3cc88b0ed Binary files /dev/null and b/assets/images/chat/post_delivery_callback.png differ diff --git a/assets/images/chat/pre_delivery_callback.png b/assets/images/chat/pre_delivery_callback.png new file mode 100644 index 000000000..c9ea5fd2c Binary files /dev/null and b/assets/images/chat/pre_delivery_callback.png differ diff --git a/assets/images/signaling/signaling-presence-configuration.png b/assets/images/signaling/signaling-presence-configuration.png new file mode 100644 index 000000000..4f485377f Binary files /dev/null and b/assets/images/signaling/signaling-presence-configuration.png differ diff --git a/assets/images/signaling/signaling-storage-calculation-formula.png b/assets/images/signaling/signaling-storage-calculation-formula.png new file mode 100644 index 000000000..b97615905 Binary files /dev/null and b/assets/images/signaling/signaling-storage-calculation-formula.png differ diff --git a/assets/images/signaling/signaling-storage-configuration.png b/assets/images/signaling/signaling-storage-configuration.png new file mode 100644 index 000000000..dd0ed5a1c Binary files /dev/null and b/assets/images/signaling/signaling-storage-configuration.png differ diff --git a/assets/images/video-sdk/real-time-transcription-server.svg b/assets/images/video-sdk/real-time-transcription-server.svg index 58df3e56a..cb84966e9 100644 --- a/assets/images/video-sdk/real-time-transcription-server.svg +++ b/assets/images/video-sdk/real-time-transcription-server.svg @@ -1 +1 @@ -Implemented by youAgoraYour AppYour AppBusiness serverBusiness serverReal-Time TranscriptionReal-Time TranscriptionStart a taskStart real-time transcription<channel name>Check user privileges and payment options (optional)Send an acquire request to fetch a builderTokenReceive a builderToken in responseStore builderToken against appID and channel nameCreate JSON configuration for startingreal-time transcriptionSend a start request containing thebuilderToken and JSON configurationReceive the status and taskId in responseStore taskId against appID and channel nameSuccess <subtitle data uid>Display subtitlesSend text dataReceive data from <subtitle data uid>Parse subtitle data and display textQuery task statusCheck transcription task status<channel name>Retrieve taskId and builderTokenSend a query request containingthe taskId and builderTokenReceive the current task status in responseSend the status to the clientStop the taskStop real-time transcriptionRetrieve taskId and builderTokenSend a stop request containingthe taskId and builderTokenReceive a response confirming successRemove builderToken of <channel name>Remove taskId of <channel name>Confirm success \ No newline at end of file +Implemented by youAgoraYour AppYour AppBusiness serverBusiness serverReal-Time TranscriptionReal-Time TranscriptionStart a taskStart real-time transcription<channel name>Check user privileges and payment options (optional)Send an acquire request to fetch a builderTokenReceive a builderToken in responseStore builderToken against appID and channel nameCreate JSON configuration for startingreal-time transcriptionSend a start request containing thebuilderToken and JSON configurationReceive the status and taskId in responseStore taskId against appID and channel nameSuccess <subtitle data uid>Display subtitlesSend text dataReceive data from <subtitle data uid>Parse subtitle data and display textQuery task statusCheck transcription task status<channel name>Retrieve taskId and builderTokenSend a query request containingthe taskId and builderTokenReceive the current task status in responseSend the status to the clientStop the taskStop real-time transcriptionRetrieve taskId and builderTokenSend a stop request containingthe taskId and builderTokenReceive a response confirming successRemove builderToken of <channel name>Remove taskId of <channel name>Confirm success \ No newline at end of file diff --git a/cloud-recording/reference/rest-api/acquire.md b/cloud-recording/reference/rest-api/acquire.md index e5ab7b0cc..2e888f0ac 100644 --- a/cloud-recording/reference/rest-api/acquire.md +++ b/cloud-recording/reference/rest-api/acquire.md @@ -7,15 +7,15 @@ description: > Before starting a cloud recording, you need to call the `acquire` method get a resource ID. --- - -> Each resource ID can only be used for one recording session. - - Method:POST - Endpoint: /v1/apps/\/cloud_recording/acquire -> The request frequency limit is 10 requests per second for each [Agora account](../manage-agora-account#create-an-agora-account). Contact [Agora technical support](mailto:support@agora.io) if you want to raise the limit. +If this method call succeeds, you get a `resourceId` from the HTTP response body. The resource ID is valid for five minutes, so you need to [start recording](start) with this resource ID with it before it expires. -If this method call succeeds, you get a resource ID (`resourceId`) from the HTTP response body. The resource ID is valid for five minutes, so you need to [start recording](start) with this resource ID with it before it expires. + +* Each resource ID can only be used for one recording session. +* The request frequency limit is 10 requests per second for each [Agora account](../manage-agora-account#create-an-agora-account). Contact [Agora technical support](mailto:support@agora.io) if you want to raise the limit. + ## HTTP request @@ -23,14 +23,14 @@ The following parameter is required in the URL. | Parameter | Type | Description | | :-------- | :----- | :----------------------------------------------------------- | -| `appid` | String | Your [App ID](../manage-agora-account#get-the-app-id)。 | +| `appid` | String | Your [App ID](../manage-agora-account#get-the-app-id). | The following parameters are required in the request body. -| Parameter | Type | Description | -| :-------------- | :----- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `cname` | String | | -| `uid` | String | A string that contains the user ID of the recording client, for example `"527841"`. The user ID needs to meet the following requirements:
  • It is a 32-bit unsigned integer within the range between 1 and (232-1).
  • It is unique and does not duplicate any existing user ID in the channel.
  • It is an integer; Cloud Recording does not support user account (which is a string), so all user IDs in the channel must be integers.
  • | +| Parameter | Type | Description | +| :-------------- | :----- |:------------------------------------| +| `cname` | String | | +| `uid` | String | A string that contains the user ID of the recording client, for example `"527841"`. The user ID needs to meet the following requirements:
  • It is a 32-bit unsigned integer within the range between 1 and (232-1).
  • It is unique and does not duplicate any existing user ID in the channel.
  • It is an integer; Cloud Recording does not support user account (which is a string), so all user IDs in the channel must be integers.
  • | | `clientRequest` | JSON | A specific client request that includes the following parameters: | ### Request example diff --git a/flexible-classroom/overview/pricing.md b/flexible-classroom/overview/pricing.md index b71b84234..f38c535c9 100644 --- a/flexible-classroom/overview/pricing.md +++ b/flexible-classroom/overview/pricing.md @@ -11,7 +11,7 @@ This page explains how calculates your monthly bill for , the billing terms and conditions within that contract take precedence. -The pricing on this page applies to one-to-one, small, large, and cloud classrooms only. For online proctoring pricing, contact sales@agora.io. +The pricing on this page applies to one-to-one, small, large, and cloud classrooms only. For online proctoring pricing, contact support@agora.io. ## pricing diff --git a/flexible-classroom/overview/product-features.mdx b/flexible-classroom/overview/product-features.mdx index 445d0c87f..2ae603ab8 100644 --- a/flexible-classroom/overview/product-features.mdx +++ b/flexible-classroom/overview/product-features.mdx @@ -40,7 +40,7 @@ The following figure shows the overall product architecture of : | Classroom type | Example | Applicable scene | Supported platform | |---|---|---|---| | 1-to-1 interactive teaching | One teacher provides exclusive online tutoring to one student. | Suitable for 1-to-1 personalized VIP tutoring. |
    • Web
    • Electron
    • Android
    • iOS
    | -| Small interactive online classroom | One teacher with multiple students watching and listening in real time. During the class, the teacher can invite students to *come on stage* to speak and interact with them using real-time audio and video. The class size limit is 200; contact sales@agora.io to extend it. | Suitable for teaching scenarios that emphasize peer learning, interactivity, and participation. The class size generally does not exceed 20 people. |
    • Web
    • Electron
    • Android
    • iOS
    | -| Large interactive live classroom | One teacher with multiple students watching and listening in real time. During the class, students can *raise their hands* to request to speak and interact with the teacher using real-time audio and video. The class size limit is 5,000; contact sales@agora.io to extend it. | Often used in open classes or diversion classes, where teachers deliver the lectures and assistant teachers help answer questions. |
    • Web
    • Electron
    • Android
    • iOS
    | -| Cloud classroom | The new UI style and interactive experience that are closer to education users' habits. One teacher interacting with multiple students using real-time audio and video. The class size limit is 50; contact sales@agora.io to extend it. | Suitable for small classroom teaching scenarios with strong interaction. The class size does not exceed 50 people. Having no more than 10-20 attendees is recommended. | Web | -| Online proctoring | Online proctoring refers to online monitoring of candidates' behavior through webcams, microphones, and screen sharing during online exams. The recommended online proctoring scenario is for one examiner to proctor 25 to 50 candidates at the same time. For more information, contact sales@agora.io. |
    • School exams
    • Certification exams
    • Recruitment
    |
    • Web
    • iOS
    | \ No newline at end of file +| Small interactive online classroom | One teacher with multiple students watching and listening in real time. During the class, the teacher can invite students to *come on stage* to speak and interact with them using real-time audio and video. The class size limit is 200; contact support@agora.io to extend it. | Suitable for teaching scenarios that emphasize peer learning, interactivity, and participation. The class size generally does not exceed 20 people. |
    • Web
    • Electron
    • Android
    • iOS
    | +| Large interactive live classroom | One teacher with multiple students watching and listening in real time. During the class, students can *raise their hands* to request to speak and interact with the teacher using real-time audio and video. The class size limit is 5,000; contact support@agora.io to extend it. | Often used in open classes or diversion classes, where teachers deliver the lectures and assistant teachers help answer questions. |
    • Web
    • Electron
    • Android
    • iOS
    | +| Cloud classroom | The new UI style and interactive experience that are closer to education users' habits. One teacher interacting with multiple students using real-time audio and video. The class size limit is 50; contact support@agora.io to extend it. | Suitable for small classroom teaching scenarios with strong interaction. The class size does not exceed 50 people. Having no more than 10-20 attendees is recommended. | Web | +| Online proctoring | Online proctoring refers to online monitoring of candidates' behavior through webcams, microphones, and screen sharing during online exams. The recommended online proctoring scenario is for one examiner to proctor 25 to 50 candidates at the same time. For more information, contact support@agora.io. |
    • School exams
    • Certification exams
    • Recruitment
    |
    • Web
    • iOS
    | \ No newline at end of file diff --git a/interactive-whiteboard/develop/migration-guide.md b/interactive-whiteboard/develop/migration-guide.md index 68ef06428..c47eec763 100644 --- a/interactive-whiteboard/develop/migration-guide.md +++ b/interactive-whiteboard/develop/migration-guide.md @@ -48,7 +48,7 @@ Agora automatically migrates all your projects from Netless to A Netless account only. diff --git a/interactive-whiteboard/reference/whiteboard-api/file-conversion.md b/interactive-whiteboard/reference/whiteboard-api/file-conversion.md index 6458767d9..3f45299a3 100644 --- a/interactive-whiteboard/reference/whiteboard-api/file-conversion.md +++ b/interactive-whiteboard/reference/whiteboard-api/file-conversion.md @@ -29,7 +29,7 @@ Pass in the following parameters in the request header: | Parameter | Category | Required/Optional | Description | | :------- | :----- | :------- |:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `token` | string | Required | A `writer` or `admin` SDK token. You can obtain a token using one of the following methods:
  • Get an SDK token for testing purposes from . See [Get security credentials for your whiteboard project](/en/interactive-whiteboard/develop/enable-whiteboard#get-security-credentials-for-your-whiteboard-project).
  • Call the RESTful API. See [Generate an SDK token](/en/interactive-whiteboard/develop/generate-token-rest#generate-an-sdk-token-post).
  • Write code on your app server. See Generate a [token from your app server](/en/interactive-whiteboard/develop/generate-token-app-server).
  • | -| `region` | string | Required | Specifies a data center to process the request:
  • `us-sv`: Silicon Valley, US, which provides services to North America and South America.
  • `sg`: Singapore, which provides services to Singapore, East Asia, and Southeast Asia.
  • `in-mum`: Mumbai, India, which provides services to India.
  • `cn-hz`: Hangzhou, China, which provides services to the areas not covered by other data centers.
  • | +| `region` | string | Required | Specifies a data center to process the request:
  • `us-sv`: Silicon Valley, US, which provides services to North America and South America.
  • `sg`: Singapore, which provides services to Singapore, East Asia, and Southeast Asia.
  • `in-mum`: Mumbai, India, which provides services to India.
  • `cn-hz`: Hangzhou, China, which provides services to the areas not covered by other data centers.
  • `eu`: Frankfurt, Europe, which provides services to Europe.
  • | ### Request Body @@ -107,7 +107,7 @@ Pass in the following parameters in the request header: | Parameter | Category | Required/Optional | Description | |:----------| :------- | :---------------- |:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `token` | string | Required | The Task token. You can obtain a token using one of the following methods:
  • Call the RESTful API. See [Generate a task token](/en/interactive-whiteboard/develop/generate-token-rest#generate-a-task-token-post).
  • Write code on your app server. See [Generate a token from your app server](/en/interactive-whiteboard/develop/generate-token-app-server).
  • | -| `region` | string | Required | Specifies a data center to process the request:
  • `us-sv`: Silicon Valley, US, which provides services to North America and South America.
  • `sg`: Singapore, which provides services to Singapore, East Asia, and Southeast Asia.
  • `in-mum`: Mumbai, India, which provides services to India.
  • `cn-hz`: Hangzhou, China, which provides services to the areas not covered by other data centers.
  • | +| `region` | string | Required | Specifies a data center to process the request:
  • `us-sv`: Silicon Valley, US, which provides services to North America and South America.
  • `sg`: Singapore, which provides services to Singapore, East Asia, and Southeast Asia.
  • `in-mum`: Mumbai, India, which provides services to India.
  • `eu`: Frankfurt, Europe, which provides services to Europe.
  • `cn-hz`: Hangzhou, China, which provides services to the areas not covered by other data centers.
  • | ### Request Path @@ -193,7 +193,7 @@ Pass in the following parameters in the request header: | Parameter | Category | Required/Optional | Description | |:----------| :----- | :------- |:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `token` | string | Required | A `writer` or `admin` SDK token. You can obtain a token using one of the following methods:
  • Get an SDK token for testing purposes from Agora Console. See [Get security credentials for your whiteboard project](/en/interactive-whiteboard/develop/enable-whiteboard#get-security-credentials-for-your-whiteboard-project).
  • Call the RESTful API. See [Generate an SDK token](/en/interactive-whiteboard/develop/generate-token-rest#generate-an-sdk-token-post).
  • Write code on your app server. See Generate a [token from your app server](/en/interactive-whiteboard/develop/generate-token-app-server).
  • | -| `region` | string | Required | Specifies a data center to process the request:
  • `us-sv`: Silicon Valley, US, which provides services to North America and South America.
  • `sg`: Singapore, which provides services to Singapore, East Asia, and Southeast Asia.
  • `in-mum`: Mumbai, India, which provides services to India.
  • `cn-hz`: Hangzhou, China, which provides services to the areas not covered by other data centers.
  • | +| `region` | string | Required | Specifies a data center to process the request:
  • `us-sv`: Silicon Valley, US, which provides services to North America and South America.
  • `sg`: Singapore, which provides services to Singapore, East Asia, and Southeast Asia.
  • `in-mum`: Mumbai, India, which provides services to India.
  • `cn-hz`: Hangzhou, China, which provides services to the areas not covered by other data centers.
  • `eu`: Frankfurt, Europe, which provides services to Europe.
  • | ### Request example @@ -252,7 +252,7 @@ Pass in the following parameters in the request header: | Parameter | Category | Required/Optional | Description | | :-------- | :------- | :---------------- |:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `token` | string | Required | An SDK token. You can obtain a token using one of the following methods:
  • Call the RESTful API. See [Generate an SDK token](/en/interactive-whiteboard/develop/generate-token-rest#generate-an-sdk-token-post).
  • Write code on your app server. See [Generate a token from your app server](/en/interactive-whiteboard/develop/generate-token-app-server).
  • | -| `region` | string | Required | Specifies a data center to process the request:
  • `us-sv`: Silicon Valley, US, which provides services to North America and South America.
  • `sg`: Singapore, which provides services to Singapore, East Asia, and Southeast Asia.
  • `in-mum`: Mumbai, India, which provides services to India.
  • `cn-hz`: Hangzhou, China, which provides services to the areas not covered by other data centers.
  • | +| `region` | string | Required | Specifies a data center to process the request:
  • `us-sv`: Silicon Valley, US, which provides services to North America and South America.
  • `sg`: Singapore, which provides services to Singapore, East Asia, and Southeast Asia.
  • `in-mum`: Mumbai, India, which provides services to India.
  • `eu`: Frankfurt, Europe, which provides services to Europe.
  • `cn-hz`: Hangzhou, China, which provides services to the areas not covered by other data centers.
  • | ### Request Path @@ -314,7 +314,7 @@ Pass in the following parameters in the request header: | Parameter | Category | Required/Optional | Description | | :------- | :----- | :------- |:-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `token` | string | Required | A `writer` or `admin` SDK token. You can obtain a token using one of the following methods::
  • Get an SDK token for testing purposes from Agora Console. See [Get security credentials for your whiteboard project](../../develop/enable-whiteboard#get-security-credentials-for-your-whiteboard-project).
  • Call the RESTful API. See [Generate an SDK token](/en/interactive-whiteboard/develop/generate-token-rest#generate-an-sdk-token-post).
  • Write code on your app server. See Generate a [token from your app server](/en/interactive-whiteboard/develop/generate-token-app-server).
  • | -| `region` | string | Required | Specifies a data center to process the request:
  • `us-sv`: Silicon Valley, US, which provides services to North America and South America.
  • `sg`: Singapore, which provides services to Singapore, East Asia, and Southeast Asia.
  • `in-mum`: Mumbai, India, which provides services to India.
  • `cn-hz`: Hangzhou, China, which provides services to the areas not covered by other data centers.
  • | +| `region` | string | Required | Specifies a data center to process the request:
  • `us-sv`: Silicon Valley, US, which provides services to North America and South America.
  • `sg`: Singapore, which provides services to Singapore, East Asia, and Southeast Asia.
  • `in-mum`: Mumbai, India, which provides services to India.
  • `eu`: Frankfurt, Europe, which provides services to Europe.
  • `cn-hz`: Hangzhou, China, which provides services to the areas not covered by other data centers.
  • | ### Request Body diff --git a/media-gateway/overview/product-overview.mdx b/media-gateway/overview/product-overview.mdx index 4fa432d77..36d1b395c 100644 --- a/media-gateway/overview/product-overview.mdx +++ b/media-gateway/overview/product-overview.mdx @@ -47,7 +47,7 @@ description: > > - allows users to directly push media streams into Agora’s Real-Time Voice and Video channels using the + allows users to directly push media streams into Agora’s Real-Time Voice and Video channels using the RTMP/SRT protocol. To facilitate distribution, Media Gateway also allows users to perform advanced transcoding processing on media streams. diff --git a/shared/agora-analytics/_api.mdx b/shared/agora-analytics/_api.mdx index 0b1d0339b..d97169131 100644 --- a/shared/agora-analytics/_api.mdx +++ b/shared/agora-analytics/_api.mdx @@ -1253,13 +1253,12 @@ When `300` is returned, you might get the following error messages: | 20003 | The upstream bitrate of the audio. | Kbps | 126 Kbps | | 20004 | The downstream bitrate of the audio. | Kbps | 108 Kbps | | 20005 | The freeze time in rendering the audio. | ms | 106.67 ms | -| 20006 | The upstream bitrate of the high-quality video stream. | Kbps | 472 Kbps | +| 20006 | The upstream bitrate of the low-quality video stream. | Kbps | 472 Kbps | | 20007 | The capturing frame rate of the video. | fps | 16 fps | | 20008 | The upstream frame rate of the high-quality video stream. | fps | 12 fps | -| 20009 | The downstream bitrate of the video. | Kbps | 309 Kbps | -| 20010 | The downstream frame rate of the video. | fps | 6 fps | +| 20009 | The downstream bitrate of the high-quality video. | Kbps | 309 Kbps | +| 20010 | The downstream frame rate of the high-quality video. | fps | 6 fps | | 20011 | The freeze time in rendering the video. | ms | 2000.50 ms | -| 20013 | Quality of Picture (QP) of the video. The lower the value, the higher the video quality. | —— | —— | | 20015 | The upstream packet loss rate of the audio. | % | 1% | | 20016 | The end-to-end packet loss rate of the audio. | % | 3% | | 20017 | The upstream packet loss rate of the video. | % | 5% | @@ -1269,8 +1268,17 @@ When `300` is returned, you might get the following error messages: | 20021 | The task scheduling delay. | ms | 2 ms | | 20022 | The round-trip time delay from the client to the local router. | ms | 3 ms | | 20023 | The upstream frame rate of the low-quality video stream. | fps | 108 fps | -| 20024 | The upstream bitrate of the low-quality video stream. | Kbps | 126 Kbps | +| 20024 | The upstream bitrate of the video stream. | Kbps | 126 Kbps | | 20025 | The sampling volume of the sent audio. | dB | 105 dB | | 20026 | The playback volume of the received audio. | dB | 98 dB | | 20027 | The width of the sent video. | —— | 360 | -| 20028 | The height of the sent video. | —— | 640 | \ No newline at end of file +| 20028 | The height of the sent video. | —— | 640 | +| 20030 | The downstream bitrate of the low-quality video stream. | Kbps | 100 Kbps | +| 20031 | The downstream frame rate of the low-quality video stream. | fps | 6 fps | +| 20032 | The width of the received low-quality video. | —— | 360 | +| 20033 | The height of the received low-quality video. | —— | 640 | +| 20034 | The width of the sent low-quality video. | —— | 360 | +| 20035 | The height of the sent low-quality video. | —— | 640 | +| 20036 | The WebRTC downstream packet loss rate of the video. | | | +| 20037 | The WebRTC upstream packet loss rate of the audio. | | | +| 20038 | The WebRTC upstream packet loss rate of the video. | | | \ No newline at end of file diff --git a/shared/agora-analytics/_pricing.mdx b/shared/agora-analytics/_pricing.mdx index 995cbc930..1fd7afc2b 100644 --- a/shared/agora-analytics/_pricing.mdx +++ b/shared/agora-analytics/_pricing.mdx @@ -191,7 +191,7 @@ To subscribe to an pricing plan, do the following: 3. Choose the plan you want to use, and click **Subscribe**. - **For the Enterprise pricing plan, contact sales@agora.io to discuss your subscription** + **For the Enterprise pricing plan, contact support@agora.io to discuss your subscription** 4. Follow the on-screen instructions to complete your payment. diff --git a/shared/broadcast-streaming-private-product/restful-api/_api-overview.mdx b/shared/broadcast-streaming-private-product/restful-api/_api-overview.mdx index 187649d20..266ba74c9 100644 --- a/shared/broadcast-streaming-private-product/restful-api/_api-overview.mdx +++ b/shared/broadcast-streaming-private-product/restful-api/_api-overview.mdx @@ -4,7 +4,7 @@ With the Agora Media Broadcast RESTful API, you can configure and manage the str This page is a basic introduction to the Media Broadcast RESTful API. -
    Media Broadcast is currently in public beta. To enable this service, contact sales@agora.io.
    +
    Media Broadcast is currently in public beta. To enable this service, contact support@agora.io.
    ## Functions diff --git a/shared/broadcast-streaming-private-product/restful-api/_domain-names.mdx b/shared/broadcast-streaming-private-product/restful-api/_domain-names.mdx index 2e0eebdf8..1b6369e86 100644 --- a/shared/broadcast-streaming-private-product/restful-api/_domain-names.mdx +++ b/shared/broadcast-streaming-private-product/restful-api/_domain-names.mdx @@ -3,7 +3,7 @@ import StatusCode from '@docs/shared/broadcast-streaming/restful-api/shared/http There are two types of domain names: stream-pushing domain names and stream-playing domain names (which mainly affect regional access and the deployment of the streams). The same live stream can be pushed or played through multiple different domain names. -> The domain name management function is in the beta stage. Contact [sales@agora.io]( mailto:sales@agora.io) before using it. +> The domain name management function is in the beta stage. Contact [support@agora.io]( mailto:support@agora.io) before using it. ## Add domain names diff --git a/shared/broadcast-streaming-private-product/restful-api/_entry-points.mdx b/shared/broadcast-streaming-private-product/restful-api/_entry-points.mdx index 3e40f8d4a..645049b67 100644 --- a/shared/broadcast-streaming-private-product/restful-api/_entry-points.mdx +++ b/shared/broadcast-streaming-private-product/restful-api/_entry-points.mdx @@ -5,7 +5,7 @@ Entry points are used to categorize the streams. You can configure functions suc Agora provides a default entry point `live` for your direct use. -> The entry point management function is in the beta stage. Contact sales@agora.io before using it. +> The entry point management function is in the beta stage. Contact support@agora.io before using it. ## Add entry points diff --git a/shared/broadcast-streaming-private-product/restful-api/_stream-authentication.mdx b/shared/broadcast-streaming-private-product/restful-api/_stream-authentication.mdx index b95a90c0b..c00960e39 100644 --- a/shared/broadcast-streaming-private-product/restful-api/_stream-authentication.mdx +++ b/shared/broadcast-streaming-private-product/restful-api/_stream-authentication.mdx @@ -1,7 +1,7 @@ import * as data from '@site/data/variables'; import StatusCode from '@docs/shared/broadcast-streaming/restful-api/shared/http-status-codes.mdx' -The stream authentication function is currently in beta. Contact [sales@agora.io](mailto:sales@agora.io) before using it. +The stream authentication function is currently in beta. Contact [support@agora.io](mailto:support@agora.io) before using it. ## Set a timestamp authentication key diff --git a/shared/broadcast-streaming/restful-api/_stream-authentication.mdx b/shared/broadcast-streaming/restful-api/_stream-authentication.mdx index 1c07165fd..69d7b4667 100644 --- a/shared/broadcast-streaming/restful-api/_stream-authentication.mdx +++ b/shared/broadcast-streaming/restful-api/_stream-authentication.mdx @@ -1,7 +1,7 @@ import * as data from '@site/data/variables'; import StatusCode from '@docs/shared/broadcast-streaming/restful-api/shared/http-status-codes.mdx' -The stream authentication function is currently in beta. Contact [sales@agora.io](mailto:sales@agora.io) before using it. +The stream authentication function is currently in beta. Contact [support@agora.io](mailto:support@agora.io) before using it. ## Set a timestamp authentication key diff --git a/shared/chat-sdk/client-api/messages/_message-receipts.mdx b/shared/chat-sdk/client-api/messages/_message-receipts.mdx index 6829c0cb9..2e694d3b0 100644 --- a/shared/chat-sdk/client-api/messages/_message-receipts.mdx +++ b/shared/chat-sdk/client-api/messages/_message-receipts.mdx @@ -2,9 +2,11 @@ import * as data from '@site/data/variables'; import Understand from '@docs/shared/chat-sdk/client-api/messages/message-receipts/understand/index.mdx'; import ProjectImplement from '@docs/shared/chat-sdk/client-api/messages/message-receipts/project-implementation/index.mdx'; -After a user sends a message to another chat user or chat group, this user expects to know whether the message is delivered or read. The Chat SDK provides the message receipt feature, which enables you to send a receipt to the message sender once the message is delivered or read. +The Chat SDK provides the message receipt feature that allows the user, after sending a message, to know whether the message is delivered or read. Also, the Chat SDK supports the conversation read receipt that allows the message sender to know whether the conversation is read. -This page introduces how to use the Chat SDK to implement message receipt functionalities in one-to-one chats and chat groups. +- Message delivery receipt: Available only to one-to-one chats. +- Message read receipt: Available to both one-to-one chats and group chats. +- Conversation read receipt: Available only to one-to-one chats. ## Understand the tech diff --git a/shared/chat-sdk/client-api/messages/message-receipts/project-implementation/web.mdx b/shared/chat-sdk/client-api/messages/message-receipts/project-implementation/web.mdx index b83a2e3e9..33b7bf2b9 100644 --- a/shared/chat-sdk/client-api/messages/message-receipts/project-implementation/web.mdx +++ b/shared/chat-sdk/client-api/messages/message-receipts/project-implementation/web.mdx @@ -8,18 +8,16 @@ To send a message delivery receipt, take the following steps: ```javascript const conn = new websdk.connection({ - appKey: "your appKey", - delivery: true - }); + appKey: "your appKey", + delivery: true, + }); ``` -2. Once the recipient receives the message, the SDK triggers `onDeliveredMessage` on the message sender's client, notifying the message sender that the message has been delivered to the recipient. - +2. Once the recipient receives the message, the SDK triggers `onDeliveredMessage` on the message sender's client, notifying that the message has been delivered to the recipient. ```javascript - conn.addEventHandler('customEvent', { - onReceivedMessage: function(message){}, // Received a receipt for message delivery to the server. - onDeliveredMessage: function(message){}, // Receive a receipt for message delivery to the client. - + conn.addEventHandler("customEvent", { + onReceivedMessage: function (message) {}, // Received a receipt for message delivery to the server. + onDeliveredMessage: function (message) {}, // Received a receipt for message delivery to the client. }); ``` @@ -27,100 +25,119 @@ To send a message delivery receipt, take the following steps: In both one-to-one chats and group chats, you can use message read receipts to notify the message sender that the message has been read. To minimize the method call for message read receipts, the SDK also supports conversation read receipts in one-to-one chats. -#### Conversation read receipts - -After the conversation is read, call `send` from the recipient's client to send a conversation read receipt: +#### One-to-one chat -```javascript -// One-to-one chat -var msg = new WebIM.message('channel'); -msg.set({ - to: 'username' -}); -WebIM.conn.send(msg.body); +The one-to-one chats support both conversation read receipts and message read receipts. We recommend you use both types of read receipts together to reduce the number of message read receipts: -// Group chat -var msg = new WebIM.message('channel'); -msg.set({ - to: 'groupid', - chatType: 'groupChat' -}); -WebIM.conn.send(msg.body); -``` +- If several messages are received when the chat page is not opened yet, send a conversation read receipt when the chat page is opened. +- If a message is received on an open chat page, send a message read receipt. -The message sender can receive the conversation read receipt in the `onChannelMessage` callback: +##### Conversation read receipts -```javascript -WebIM.conn.listen({ - onChannelMessage:function(message){ - ... - } -}) -``` +1. The message recipient sends a conversation read receipt. -#### Message read receipts + The message recipient opens the conversation page to check whether there are unread messages. If yes, call `send` to send a conversation read receipt. -Chat supports sending message read receipts in both one-to-one chats and chat groups. Refer to the following steps to implement message read receipt in one-to-one chats: + ```javascript + let option = { + chatType: "singleChat", // The chat type: singleChat for one-to-one. + type: "channel", // The type of read receipt: channel indicates the conversation read receipt. + to: "userId", // The user ID of the message recipient. + }; + let msg = WebIM.message.create(option); + conn.send(msg); + ``` -1. After the message is read, call `send` from the recipient's client to send the message read receipt +2. The message sender receives the conversation read receipt in the `onChannelMessage` callback. ```javascript - var bodyId = message.id; // The message ID. - var msg = new WebIM.message('read'); - msg.set({ - id: bodyId, - to: message.from + conn.addEventHandler("customEvent", { + onChannelMessage: (message) => {}, }); - conn.send(msg.body); ``` -2. On the message sender's client, listen for `onReadMessage` to receive the message read receipt: +##### Message read receipts + +For one-to-one chats, message read receipts are stored as long as messages on the Chat server. Specifically, message read receipts can be sent whenever the messages are available on the Chat server. The message storage period on the Chat server depends on your product plan. For details, see the [pricing plan details](../../reference/pricing-plan-details#message). + +Refer to the following steps to implement message read receipt in one-to-one chats: + +1. The message recipient sends a message read receipt. + + - If there are several unread messages in the conversation, to minimize the number of sent message read receipts, we recommend that a conversation read receipt be sent when the message recipient enters the conversation. + + ```javascript + let option = { + chatType: "singleChat", // The chat type: singleChat for one-to-one chat. + type: "channel", // The type of read receipt: channel indicates the conversation read receipt. + to: "userId", // The user ID of the message receipt. + }; + let msg = WebIM.message.create(option); + conn.send(msg); + ``` + + - If there is only one unread message in the conversation, after reading it, call `send` from the recipient's client to send the message read receipt. ```javascript - WebIM.conn.listen({ - onReadMessage:function(message){ - ... - } - }) + let option = { + type: "read", // The message read receipt. + chatType: "singleChat", // The chat type: singleChat for one-to-one chat. + to: "userId", // The user ID of the message receipt. + id: "id", // The ID of the message that requires the read receipt. + }; + let msg = WebIM.message.create(option); + conn.send(msg); ``` -Refer to the following steps to implement message read receipts in group chats. +2. The message sender listens for `onReadMessage` to receive the message read receipt. + + ```javascript + conn.addEventHandler("customEvent", { + onReadMessage: (message) => {}, + }); + ``` + +#### Group chat + +For a group chat, group members can determine whether to require message read receipts when sending a message. If yes, after a group member reads the message, the SDK sends a read receipt. In a group chat, the number of message read receipts that are sent for the message refers to the number of group members that have read this message. -1. When sending a chat group message, the group owner or admin can require the group message receipt: +The read receipts for group messages are valid only for three days. Specifically, if a read receipt is sent three days after the message is sent in the group, the Chat server does not record the group member that reads the message, nor sends the read receipt. + +1. When sending a message, a group member can set whether to require a message read receipt by setting `allowGroupAck` to `true`. ```javascript sendGroupReadMsg = () => { - let option = { - type: 'txt', // message type。 - chatType: 'groupChat', // Conversation type, here is group chat. - to: 'groupId', // The recipient of the message, which is the group ID. - msg: 'message content' // Message content. - msgConfig: { allowGroupAck: true } // Setting this message requires a read receipt. - } - - let msg = WebIM.message.create(option); - conn.send(msg).then((res) => { - console.log('send message success'); - }).catch((e) => { - console.log("send message error"); - }) - } + let option = { + type: 'txt', // Message type. + chatType: 'groupChat', // Conversation type: groupChat for group chat. + to: 'groupId', // The message recipient: group ID. + msg: 'message content' // Message content. + msgConfig: { allowGroupAck: true } // Setting that this message requires a read receipt. + } + + let msg = WebIM.message.create(option); + conn.send(msg).then((res) => { + console.log('send message success'); + }).catch((e) => { + console.log("send message error"); + }) + } ``` -2. After reading the group message, the recipient calls `send` to send the group message read receipt: +2. After reading the group message, the recipient calls `send` to send the message read receipt. ```javascript sendReadMsg = () => { - let option = { - type: 'read', // Whether the message has been read. - chatType: 'groupChat', // Conversation type, here is group chat. - id: 'msgId', // The message ID for which read receipts need to be sent. - to: 'groupId', // Group ID. - ackContent: JSON.stringify({}) // Receipt content. - } - let msg = WebIM.message.create(option); - conn.send(msg) - } + let option = { + type: "read", // Whether the message has been read. + chatType: "groupChat", // Conversation type: groupChat means group chat. + id: "msgId", // The message ID for which the read receipt is sent. + to: "groupId", // Group ID. + ackContent: JSON.stringify({}), // The content of the message read receipt. + }; + let msg = WebIM.message.create(option); + conn.send(msg); + }; ``` 3. The message sender receives the message read receipt by listening for either of the following callbacks: @@ -131,32 +148,33 @@ Refer to the following steps to implement message read receipts in group chats. // You can listen in onReadMessage when online. conn.addEventHandler('customEvent', { onReadMessage: (message) => { - let { mid } = message; - let msg = { - id: mid - }; - if(message.groupReadCount){ - // The message has been read. - msg.groupReadCount = message.groupReadCount[message.mid]; - } - }, - // Receipt is received when offline, and it will be monitored here after logging in. - onStatisticMessage: (message) => { - let statisticMsg = message.location && JSON.parse(message.location); - let groupAck = statisticMsg.group_ack || []; - } - }) + let { mid } = message; + let msg = { + id: mid, + }; + if (message.groupReadCount){ + // The message has been read. + msg.groupReadCount = message.groupReadCount[message.mid]; + } + }, + // You can listen for onStatisticMessage upon login when the read receipt is received when you are offline. + onStatisticMessage: (message) => { + let statisticMsg = message.location && JSON.parse(message.location); + let groupAck = statisticMsg.group_ack || []; + }, + }); ``` -4. After receiving the group message receipt, the sender can retrieve the detailed information of the users that have read the message: +4. After receiving the read receipt, the message sender can retrieve the detailed information of the group members that have read the message. ```javascript conn.getGroupMsgReadUser({ - msgId: 'messageId', // Message ID. - groupId: 'groupId' // Group ID. - }).then((res)=>{ - console.log(res) - }) + msgId: "messageId", // Message ID. + groupId: "groupId", // Group ID. + }) + .then((res) => { + console.log(res); + }); ``` \ No newline at end of file diff --git a/shared/chat-sdk/client-api/messages/message-receipts/understand/web.mdx b/shared/chat-sdk/client-api/messages/message-receipts/understand/web.mdx index 01167c502..ed8ceec79 100644 --- a/shared/chat-sdk/client-api/messages/message-receipts/understand/web.mdx +++ b/shared/chat-sdk/client-api/messages/message-receipts/understand/web.mdx @@ -1,16 +1,25 @@ -The logic for implementing the message delivery and read receipts are as follows: +The message delivery receipts and read receipts are implemented as follows: -- Message delivery receipts +- Message delivery receipt for one-to-one chats - 1. The message sender enables delivery receipts by setting `options.delivery` as `true` when creating the `connection` object. - 2. After the recipient receives the message, the SDK automatically sends a delivery receipt to the sender. - 3. The sender receives the delivery receipt by listening for `onDeliveredMessage`. + 1. The message sender enables delivery receipts by setting `delivery` as `true` when creating the `connection` object during SDK initialization. + 2. A user sends a message. + 3. After the recipient receives the message, the SDK automatically sends a delivery receipt to the sender. + 4. The sender receives the delivery receipt by listening for `onDeliveredMessage`. -- Conversation and message read receipts +- Conversation and message read receipts for one-to-one chats - 1. After reading the message, the recipient calls `send` to send a conversation or message read receipt. - 2. The sender receives the conversation or message receipt by listening for `onReadMessage`. + 1. A user sends a message. + 2. After reading the message, the recipient calls `send` to send a conversation or message read receipt. + 3. The sender receives the conversation or message receipt by listening for `onChannelMessage` or `onReadMessage`. + +- Message read receipt for group chats + + 1. A group member sends a message with `allowGroupAck` set to `true` to request message read receipts. + 2. After reading the message, the recipient calls `send` to send a read receipt. + 3. The sender receives the message read receipt by listening for `onReadMessage` when online or `onStatisticsMessage` when offline. + 4. The sender can know which group members have read the message by calling `getGroupMsgReadUser`. \ No newline at end of file diff --git a/shared/chat-sdk/develop/_setup-webhooks.mdx b/shared/chat-sdk/develop/_setup-webhooks.mdx index 348eb9cb9..f27961498 100644 --- a/shared/chat-sdk/develop/_setup-webhooks.mdx +++ b/shared/chat-sdk/develop/_setup-webhooks.mdx @@ -1,15 +1,12 @@ import * as data from '@site/data/variables'; -Chat supports HTTP callbacks (webhooks). After you set up HTTP callbacks for your Chat app, the Chat server sends notifications in the form of HTTP POST requests to your app server when specified events occur. - -You can use the HTTP callbacks to synchronize messages on your own server, or moderate message content. +Chat supports HTTP callbacks (webhooks) for synchronization of messages on your own server or moderation of message content. After you set up HTTP callbacks for your Chat app, the Chat server sends notifications in the form of HTTP POST requests to your app server when specified events occur. According to whether the message delivery is intervened, the callbacks are divided in two categories: +- Pre-delivery callbacks: Mainly used for content moderation. When the Chat server receives a message from the client app, it sends a request to your app server and waits for a response that decides if the message delivery is passed or rejected. Pre-delivery callbacks only apply to messages sent from your client apps. +- Post-delivery callbacks: Mainly used for data synchronization. When certain events occur, for example, a user sends out a message or gets offline, the Chat server sends a request to your app server and does not validate the response content. Post-delivery callbacks apply to messages and other events sent from you client and server apps. ## Understand the tech -According to whether the message delivery is intervened, the callbacks are divided in two categories: - -- Pre-delivery callbacks: Mainly used for content moderation. When the Chat server receives a message from the client app, it sends a request to your app server and waits for a response that decides if the message delivery is passed or rejected. Pre-delivery callbacks only apply to messages sent from your client apps. -- Post-delivery callbacks: Mainly used for data synchronization. When certain events occur, for example, a user sends out a message or gets offline, the Chat server sends a request to your app server and does not validate the response content. Post-delivery callbacks apply to messages and other events sent from you client and server apps. +**Difference between pre-delivery and post-delivery callbacks** The following table summarizes the differences between the two categories of callbacks. @@ -20,32 +17,24 @@ The following table summarizes the differences between the two categories of cal | Response required | Yes | No | | Typical use case | Content moderation | Chat history synchronization | -### Pre-delivery callbacks +**Callback security** -The following figure shows how the pre-delivery callbacks work. +For pre-delivery and post-delivery callbacks, the Chat server sends HTTP/HTTPS POST requests with JSON payloads to your app server. The requests are encoded in UTF-8 and the message in each request is signed with an MD5 signature. In each request header, the `Content-Type` field is `application/json`. -![Pre-delivery Callbacks](/images/chat/pre-delivery-callbacks.png) +For post-delivery callbacks, the message in requests is signed with an MD5 signature calculated with `org.apache.commons.codec.digest.DigestUtils#md5Hex`. -As shown in the figure, the workflow of pre-delivery callbacks is as follows: - -1. The Chat server receives a message from Client A. -2. The Chat server sends an HTTP request that contains the information of the message to your app server. -3. Your app server processes the received data and gets a result of whether the message delivery is passed or rejected. -4. Your app server sends the processing result in the form of HTTP response to the Chat server. -5. The Chat server receives the HTTP response and decides if the message delivery is passed. -6. If the message delivery is passed, the Chat server delivers the message to Client B. - -### Post-delivery callbacks +You can verify the signature to check whether the callbacks are sent from the Chat server. -As shown in the figure, the workflow of post-delivery callbacks is as follows: +1. Retrieve the following information: + - The callback ID, which is the `callId` parameter in the request body of the callback. + - The secret assigned to the callback rule. You can find it on the callback rule list on the **Callback** page on the [Agora console](https://console.agora.io/). -![Post-delivery Callbacks](/images/chat/post-delivery-callbacks.png) + ![](/images/chat/callback_secret.png) -As shown in the figure, the workflow of post-delivery callbacks is as follows: + - The callback timestamp, which is the timestamp parameter in the request body of the callback. -1. The Chat server receives a message or other event from a client or server. -2. The Chat server sends an HTTP request that contains the information of the message or event to your app server. -3. Your app server sends an HTTP response to the Chat server to indicate that the callback is received. +2. Calculate the [MD5](https://en.wikipedia.org/wiki/MD5) value of the concatenated string of the callback ID, the secret, and the callback timestamp. +3. Check if the calculated value equals to the secret parameter in the request body. If yes, the callback is sent by Agora Chat. ## Prerequisites @@ -60,7 +49,7 @@ To use the HTTP callbacks, you must meet the following requirements: To receive the HTTP callbacks, you need to configure rules for the pre- or post-delivery callbacks in Agora Console. -1. Log in to Agora Console and find your project on the Project Management page, then click the edit button. +1. Log in to Agora Console and find your project on the **Project Management** page, then click the edit button. 2. Find **Chat** on the project editing page, and click **Configure**. 3. Choose **Features** > **Callback** and click **Add Callback Address** on the **Callback** page. @@ -71,8 +60,8 @@ To receive the HTTP callbacks, you need to configure rules for the pre- or post- - Rule Name: Enter a name for the rule. Under one project, each rule must have a unique name. - Chat Type: Select the types of chat this rule applies to. - Message Type: Select the types of messages this rule applies to. - - Timeout: (Optional) Specify the time (in ms) that the Agora Chat server should wait for the HTTP responses. The default value is 200 ms. If the response times out, the Agora Chat server continues with the fallback action. - - Fallback Action: (Optional) Select the action of the Agora Chat server when the HTTP response times out or an error is returned. The default value is **Passed**. + - Timeout: (Optional) Specify the time (in ms) that the Chat server should wait for the HTTP responses. The default value is 200 ms. If the response times out, the Chat server continues with the fallback action. + - Fallback Action: (Optional) Select the action of the Chat server when the HTTP response times out or an error is returned. The default value is **Passed**. - Report Error: (Optional) Set whether to notify the message sender when their message is rejected. The default value is **No**, indicating that the sender is not notified of the message delivery failure. - Status: Set whether to enable this rule. The default value is **Enabled**. - Callback Address: Enter the URL of your app server for receiving the pre-delivery callbacks. Both HTTP and HTTPS URLs are allowed. @@ -91,62 +80,124 @@ The rules take effect immediately. Note the following for the rule configurations: -- By default, you can add four rules for the pre- and post-delivery callbacks in total. To extend the limit, contact support@agora.io. -- The rule configuration only supports message events. To receive notifications of other events, contact support@agora.io. -- If you have set both pre- and post-delivery callbacks, and a message is rejected after the pre-delivery callback returns, the post-delivery callbacks are not triggered. +- By default, you can add four rules for the pre- and post-delivery callbacks in total. To extend the limit, contact [support@agora.io](mailto:support@agora.io). +- The rule configuration only supports message events. To receive notifications of other events, contact [support@agora.io](mailto:support@agora.io). -## Next steps +## Pre-delivery callbacks -To enhance the security of the callbacks, Chat includes a signature in the request body of each callback. You can verify the signature to check whether the callbacks are sent from the Chat server. +The following figure shows how the pre-delivery callbacks work. -To verify the signature in a callback, do the following: +![](/images/chat/pre_delivery_callback.png) -1. Retrieve the following information: - - The callback ID, which is the callId parameter in the request body of the callback. - - The secret assigned to the callback rule. You can find this value on the Chat configuration page in Agora Console. - - ![1645523345319](/images/chat/callback_secret.png) - - - The callback timestamp, which is the timestamp parameter in the request body of the callback. +As shown in the figure, the workflow of pre-delivery callbacks is as follows: -2. Calculate the [MD5](https://en.wikipedia.org/wiki/MD5) value of the concated string of the callback ID, the secret, and the callback timestamp. -3. Check if the calculated value equals to the secret parameter in the request body. If yes, the callback is sent by Chat. +1. The Chat server receives a message from Client A. +2. The Chat server sends an HTTP request that contains the information of the message to your app server. +3. Your app server processes the received data and sends the processing result in the form of HTTP response to the Chat server. +4. The Chat server receives the HTTP response and decides if the message delivery is passed. +5. If the message delivery is passed, the Chat server delivers the message to Client B. + +The Chat server determines whether to send the message according to the HTTP response received from your app server. If the HTTP status code is 200 in the response, the Chat server handles the message as specified in the matching pre-delivery callback rule. If a response error occurs, including the required field `valid` being absent or fields being of an incorrect type, the Chat server handles the message as specified by **Fallback Action** in the matching pre-delivery callback rule and `custom internal error` is reported on the client (only when **Report Error** on the **Pre Send tab** page is set to **Yes** on the Agora Console). + +
    For pre-delivery callbacks, if your app server does not return the HTTP code 200 and the valid status, the Chat server does not resend the callback and takes the fallback action specified by the applicable rule.
    + +### HTTP request and response + +#### Request header + +| Field | Description | +| :------------- | :---------------------------------- | +| `Content-Type` | The parameter type. The value is `application/json`. | -## Reference +#### Request body -This sections provides the details of the HTTP requests and responses. +| Field | Type | Description | +| :---------------- | :------------------------ |:------------------------ | +| `callId` | String | The callback ID which is the unique identifier assigned to each callback. The callback ID is in the format of `{appKey}_{uuid}`, where the value of `uuid` is randomly generated. | +| `timestamp` | Number | The Unix timestamp when the Chat server receives the message, in milliseconds. | +| `chat_type` | String | The chat type:
    • `chat`: One-to-one chats.
    • `groupchat`: Chat groups and chat rooms.
    | +| `group_id` | String | The group or chat room where the message included in the request is to be sent. This parameter is valid only for group and room chats. | +| `from` | String | The user ID of the message sender. | +| `to` | String | The user ID of the message recipient. This parameter is valid only for one-to-one chats. | +| `msg_id` | String | The ID of the message for which the callback request is sent. This ID is the same as the `msg_id` generated by the Chat server when the message is sent to the recipient. | +| `payload` | JSON | The message content which matches the [content of the `payload` parameter in historical messages retrieved with the REST API](https://docs.agora.io/en/agora-chat/restful-api/message-management?platform=android#content-of-historical-messages). | +| `securityVersion`| String | The security check version which is 1.0.0. | +| `security` | String | The signature used to identify whether the HTTP callback request is from the Chat server. The signature is an MD5 hash in the format of `{callId}+{secret}+{timestamp}`, where `secret` is generated by the Chat server to produce the signature and is displayed on the callback rule list on the **Callback** page on the . | -### HTTP request +#### Response body -When certain events occur in your Chat app, the Chat server sends HTTP POST requests with JSON payloads. The character encoding is UTF-8. The Content-Type field in all HTTP request headers is `application/json`. +The HTTP responses cannot exceed 1,000 characters; otherwise, the callbacks fail as the Chat server deems the responses as attack packets. -### HTTP response +| Field | Type | Required | Description | +| :-------- | :----- | :----------------- | :----------- | +| `valid` | Boolean | Yes | Controls whether the message is appropriate according to the rules specified on your app server:
    • `true`: The message is valid and the Chat server should deliver the message;
    • `false`: The message is invalid and the Chat server should reject the message.
    | +| `code` | String | No | Custom pre-delivery callback error description on the client. The value of the `code` field is displayed as the error on the client only when **Report Error** on the **Pre Send** tab page is set to **Yes** on the Agora Console. Callback errors are displayed as follows on the client:
    • If `code` contains the content of the string type, the content is reported as the error;
    • If `code` is not included in the response, `custom logic denied` is displayed.
    • If `code` is returned as an empty string, `Message blocked by external logic` is displayed on a mobile client;
    • If no response is received within the specified period, the default error `custom internal error` is reported.
    • If a response error occurs, including the `valid` field being absent or fields being of an incorrect type, `custom internal error` is reported.
    | +| `payload` | Object | No | The modified message content.
    Currently, only the text content is allowed. The modified content must be in the same format as the original message and cannot exceed 1 KB. If it is unnecessary to modify the message, ignore this field. | -For the pre-delivery callbacks, the Chat server accepts HTTP responses that contain a JSON body as in the following example: +#### Request example + +```shell +{ + "callId":"easemob-demo#test_XXXX-dp01-6c50-XXXX-cf3b48b20e7e", + "timestamp":1600060847294, + "chat_type":"groupchat", + "group_id":"16934809238921545", + "from":"user1", + "to":"user2", + "msg_id":"8924312242322", + "payload":{ + // Message content + }, + "securityVersion":"1.0.0", + "security":"2ca02c394bef9e7abc83958bcc3156d3" +} +``` + +#### Response example ```json { - "valid": true, - "code": "HX:10000" + "valid": true, + "code": "HX:10000", + "payload": { + // Modified message content. + // Only text contents are allowed. + } } ``` -- `valid`: Boolean. Whether the message is valid according to the processing result on your app server: - - true: The message is valid and the Chat server should deliver the message. - - false: The message is invalid and the Chat server should reject the message. -- `code`: String. Custom information. +## Post-delivery callbacks + +The workflow of post-delivery callbacks is as follows: + +![](/images/chat/post_delivery_callback.png) + +As shown in the figure, the workflow of post-delivery callbacks is as follows: + +1. The Chat server receives a message or other event from a client or server. +2. The Chat server sends an HTTP request that contains the information of the message or event to your app server. +3. Your app server sends an HTTP response to the Chat server to indicate that the callback is received. + +If you have set both pre- and post-delivery callbacks, and a message is rejected after the pre-delivery callback returns, the post-delivery callbacks are not triggered. + +For post-delivery callback request examples, see [event callbacks](../reference/callbacks-events). + +The Chat server places full trust in callback responses received from your app server without verifying them. As long as the returned HTTP status code is 200, the Chat server regards that the callback succeeds. + +Responses to the requests cannot exceed 1,000 characters; otherwise, the callbacks fail as the Chat server deems the responses as attack packets. + +**Retry logic** -For the post-delivery callbacks, ensure that the response content does not exceed 1,000 characters. +For post-delivery callbacks, the Chat server records a notification failure and tries resending the callback once again. If the second attempt fails, the Chat server stops trying. -### Retry logic +If 90 notification failures occur in 30 seconds, the callback rules involving the app server will be temporarily disabled for 5 minutes. -- For pre-delivery callbacks, if your app server does not return the HTTP code 200 and the valid status, the Chat server does not resend the callback and takes the fallback action specified by the applicable rule. +## Status codes -- For post-delivery callbacks, the Chat server records a notification failure and tries resending the callback once in one of the following situations: +For details, see [HTTP Status Codes](../reference/http-status-codes). - - Your server does not respond in 60 seconds. - - The HTTP status code received from your server is not 200. +## FAQ -If the second try fails, the Chat server stops trying. +Q: Why is the message delivered to the intended recipient even though the value of the `valid` field is `false` in the pre-delivery callback response? -If 90 notification failures occur in 30 seconds, the corresponding callback rule is automatically turned off for five minutes. (To query and resend the missed notifications, use the Callback APIs.) \ No newline at end of file +A: Maybe your server fails to return the pre-delivery callback response within the period specified with the **Timeout** parameter in the pre-delivery callback rule on the **Pre Send** page on the . In this case, the message is delivered if **Fallback Action** on the **Pre Send** page page is set to **Passed**. To avoid this issue, you are advised to increase the value of the **Timeout** parameter (200 milliseconds by default), for example, to 1000 milliseconds. diff --git a/shared/cloud-gateway/overview/_product-overview.mdx b/shared/cloud-gateway/overview/_product-overview.mdx index 68575d617..073a7b572 100644 --- a/shared/cloud-gateway/overview/_product-overview.mdx +++ b/shared/cloud-gateway/overview/_product-overview.mdx @@ -37,7 +37,7 @@ The Gateway Server SDK supports the following architectures: - arm64 - x86-64 -If you need to use the SDK on other architectures, contact sales@agora.io. +If you need to use the SDK on other architectures, contact support@agora.io. ## Application scenarios diff --git a/shared/common/_channel-management-api.mdx b/shared/common/_channel-management-api.mdx index 6e3df83fa..808e68a20 100644 --- a/shared/common/_channel-management-api.mdx +++ b/shared/common/_channel-management-api.mdx @@ -87,7 +87,6 @@ A user who is kicked out of a channel (that is when you set `privileges` as `joi - Unity: The `OnConnectionStateChangedHandler` callback reports `CONNECTION_CHANGED_BANNED_BY_SERVER(3)`. - React Native: The `ConnectionStateChanged` callback reports `BannedByServer(3)`. - Flutter: The `ConnectionStateChanged` callback reports `BannedByServer(3)`. -- Cocos Creator: The `onConnectionStateChanged` callback reports `CONNECTION_CHANGED_BANNED_BY_SERVER(3)`. #### Prototype diff --git a/shared/common/project-setup/electron.mdx b/shared/common/project-setup/electron.mdx index c6bd811f2..e4a9ad86f 100644 --- a/shared/common/project-setup/electron.mdx +++ b/shared/common/project-setup/electron.mdx @@ -19,4 +19,4 @@ npm i agora-electron-sdk ``` Make sure the path to your project folder does not contain any spaces. This might cause error during the installation. - + \ No newline at end of file diff --git a/shared/interactive-whiteboard/qps-pricing.mdx b/shared/interactive-whiteboard/qps-pricing.mdx index 3fc59799a..8ba4d71a3 100644 --- a/shared/interactive-whiteboard/qps-pricing.mdx +++ b/shared/interactive-whiteboard/qps-pricing.mdx @@ -39,7 +39,7 @@ The unit prices are as follows: By default, the file conversion feature provided by processes one file conversion request per second, that is, the queries per second (QPS) value equals 1, and billing for this feature is based on the number of pages successfully converted. -If the default QPS value does not meet your needs because your whiteboard project requires a larger number of concurrent conversion requests per second, you can contact [sales@agora.io](mailto:sales@agora.io) to adjust the project's QPS configurations and start QPS-based billing. +If the default QPS value does not meet your needs because your whiteboard project requires a larger number of concurrent conversion requests per second, you can contact [support@agora.io](mailto:support@agora.io) to adjust the project's QPS configurations and start QPS-based billing. ## Cost calculation @@ -55,7 +55,7 @@ Note the following: This section illustrates how calculates the cost for file conversion using QPS-based pricing. -Suppose that you have enabled the file conversion feature in the Hangzhou data center for whiteboard project A, and that the file conversion feature in other data centers for the same project remains disabled. You expect a surge in concurrent file conversion requests from said project. Therefore, you send the following information to [sales@agora.io](mailto:sales@agora.io) to request adjustments to the project's QPS configurations: +Suppose that you have enabled the file conversion feature in the Hangzhou data center for whiteboard project A, and that the file conversion feature in other data centers for the same project remains disabled. You expect a surge in concurrent file conversion requests from said project. Therefore, you send the following information to [support@agora.io](mailto:support@agora.io) to request adjustments to the project's QPS configurations: - The App Identifier for whiteboard project A. - Data center: Hangzhou, China. @@ -94,7 +94,7 @@ After the new configuration takes effect, the QPS-based file conversion charges -Now suppose that this QPS configuration soon proves to be insufficient for your business needs, so you contact [sales@agora.io](mailto:sales@agora.io) once again to increase the QPS value for file conversion to images from 5 to 11, and you request that this change take effect on April 11. +Now suppose that this QPS configuration soon proves to be insufficient for your business needs, so you contact [support@agora.io](mailto:support@agora.io) once again to increase the QPS value for file conversion to images from 5 to 11, and you request that this change take effect on April 11. In this case, Agora takes the changing value of QPS value into account when calculating the file conversion charges for April as follows: @@ -146,7 +146,7 @@ If you decide to apply for QPS-based billing for the file conversion of your whi ### Configure the QPS -When contacting [sales@agora.io](mailto:sales@agora.io) to configure QPS-based billing, you need to provide the following information: +When contacting [support@agora.io](mailto:support@agora.io) to configure QPS-based billing, you need to provide the following information: - The App Identifier of the whiteboard project whose QPS needs to be adjusted. For details, see [Get security credentials for your whiteboard project](../develop/enable-whiteboard#get-security-credentials-for-your-whiteboard-project). diff --git a/shared/interactive-whiteboard/uikit-sdk/android.mdx b/shared/interactive-whiteboard/uikit-sdk/android.mdx index a30c8e805..13097e9c3 100644 --- a/shared/interactive-whiteboard/uikit-sdk/android.mdx +++ b/shared/interactive-whiteboard/uikit-sdk/android.mdx @@ -107,7 +107,7 @@ Data center, containing the following enumeration values: - `IN_MUM`: Mumbai, India, the service area covers India. -- `EU`: London, UK, the service area covers Europe. +- `EU`: Frankfurt, Germany, the service area covers Europe. ### FastUserPayload diff --git a/shared/interactive-whiteboard/uikit-sdk/ios.mdx b/shared/interactive-whiteboard/uikit-sdk/ios.mdx index 2adb382ea..cd4aaf418 100644 --- a/shared/interactive-whiteboard/uikit-sdk/ios.mdx +++ b/shared/interactive-whiteboard/uikit-sdk/ios.mdx @@ -55,7 +55,7 @@ Data center, containing the following enumerations: - `US`: Silicon Valley, USA, service area covers North America and South America. - `SG`: Singapore, the service area covers Singapore, East Asia, and Southeast Asia. - `IN`: Mumbai, India, service area covers India. -- `GB`: London, UK, service area covers Europe. +- `EU`: Frankfurt, Germany, the service area covers Europe. #### FastUserPayload diff --git a/shared/interactive-whiteboard/uikit-sdk/web.mdx b/shared/interactive-whiteboard/uikit-sdk/web.mdx index 3d516fdea..a75fb7973 100644 --- a/shared/interactive-whiteboard/uikit-sdk/web.mdx +++ b/shared/interactive-whiteboard/uikit-sdk/web.mdx @@ -486,7 +486,7 @@ This method deletes all buttons in the extension center, but does not delete the - `us-sv`: Silicon Valley, United States, which provides services to North America and South America. - `sg`: Singapore, which provides services to Singapore, East Asia, and Southeast Asia. - `in-mum`: Mumbai, India, which provides services to India. - - `gb-lon`: London, United Kingdom, which provides services to Europe. + - `eu`: Frankfurt, Germany, which provides services to Europe. - `joinRoom`: (Required) Object. Parameters for joining a room: - `uid`: String. The unique identifier of a user in string format. The maximum length is 1,024 bytes. Ensure that the `uid` of each user in the same room is unique. - `uuid`: String. The room UUID, that is, the unique identifier of a room. See the value of the `uuid` parameter in the response body after a successful call of [Create a room (POST)](/interactive-whiteboard/reference/whiteboard-api/room-management#create-a-room-post). diff --git a/shared/iot/develop/_licensing.mdx b/shared/iot/develop/_licensing.mdx index feb3e1b89..9c8704a5f 100644 --- a/shared/iot/develop/_licensing.mdx +++ b/shared/iot/develop/_licensing.mdx @@ -12,7 +12,7 @@ The following figure shows the overall process of using an device Follow the steps below to add a license to your devices. ### Apply for a license -To apply for a license, contact sales-us@agora.io and provide the following information: +To apply for a license, contact support@agora.io and provide the following information: | Name | Description | |------|------------------------| @@ -133,7 +133,7 @@ To facilitate development and testing, Agora offers the following types of licen Best practice is to use a trial license before the product is officially launched. To switch to a commercial license, follow these steps: -1. Contact sales-us@agora.io to apply for a commercial license. After successfully applying for a license, you can check the PID of the license in the **License Usage** page of the . +1. Contact support@agora.io to apply for a commercial license. After successfully applying for a license, you can check the PID of the license in the **License Usage** page of the . 1. Call the activation API to activate a new license and pass in the PID of the new license and the `licenseKey` which is consistent with the old license. 1. Write and read a new license to the device. 1. Call the initialization method of the SDK with the new license. diff --git a/shared/media-gateway/get-started/_quickstart.mdx b/shared/media-gateway/get-started/_quickstart.mdx index 61be438f9..64a7525f3 100644 --- a/shared/media-gateway/get-started/_quickstart.mdx +++ b/shared/media-gateway/get-started/_quickstart.mdx @@ -1,4 +1,4 @@ - enables users to push content to using standard streaming + enables users to push content to using standard streaming protocols such as RTMP and SRT. The channel host automatically publishes this streamed content to the correct channel. Possible use cases are: @@ -19,19 +19,19 @@ interruptions if the host leaves the channel. ## Understand the tech -Using [ RESTful API](../../api-reference?platform=rest), you generate a streaming key. This key allows you to push online media streams as live video source streams into Agora channels. +Using [ RESTful API](../../api-reference?platform=rest), you generate a streaming key. This key allows you to push online media streams as live video source streams into Agora channels. ![Flow diagram](/images/media-gateway/media-gateway-flow.svg) -With , you can employ advanced transcoding capabilities on media streams for enhanced distribution. To enable and configure transcoding options, you use the [ RESTful API](../../api-reference?platform=rest). When transcoding is enabled, you can set parameters such as resolution, frame rate, bit rate, and whether to enable video streams with high and low resolutions. +With , you can employ advanced transcoding capabilities on media streams for enhanced distribution. To enable and configure transcoding options, you use the [ RESTful API](../../api-reference?platform=rest). When transcoding is enabled, you can set parameters such as resolution, frame rate, bit rate, and whether to enable video streams with high and low resolutions. ## Setup -To activate the , contact [Agora support](mailto:support@agora.io). When you activate , you specify your access area to optimize the transmission quality of the media stream. +To activate the , contact [Agora support](mailto:support@agora.io). When you activate , you specify your access area to optimize the transmission quality of the media stream. ## Implementation -The [ RESTful API](../../api-reference?platform=rest) supports the following interfaces: +The [ RESTful API](../../api-reference?platform=rest) supports the following interfaces: | API | Description | |:----|:------------------------| @@ -40,9 +40,9 @@ The [ RESTful API](../../api-reference?platform=rest) supports t | `Query` | Query information about stream keys, such as the bound UID, the bound channel name, and validity. | | `Delete` | Destroy a stream key. | -To use the RESTful API and obtain the relevant code, refer to the [API reference](../../api-reference?platform=rest). If you need to push multiple streams to the same channel, use a unique uid to generate each stream key. +To use the RESTful API and obtain the relevant code, refer to the [API reference](../../api-reference?platform=rest). If you need to push multiple streams to the same channel, use a unique uid to generate each stream key. -The stream key generation method depends on whether you use the Agora domain name or a custom domain name. To use the Agora domain name, create a stream key using the [ RESTful API](../../api-reference?platform=rest). +The stream key generation method depends on whether you use the Agora domain name or a custom domain name. To use the Agora domain name, create a stream key using the [ RESTful API](../../api-reference?platform=rest). #### Generate the stream key locally @@ -97,7 +97,7 @@ console.log(`streamkey is ${streamkey}`); ## Test Media Gateway -This section shows you how to test Agora using [OBS Studio](https://obsproject.com/), a free and open-source, cross-platform streaming app. Take the following steps to start streaming using OBS Studio: +This section shows you how to test Agora using [OBS Studio](https://obsproject.com/), a free and open-source, cross-platform streaming app. Take the following steps to start streaming using OBS Studio: 1. [Download](https://obsproject.com/download) and install OBS studio. @@ -123,7 +123,7 @@ This section shows you how to test Agora using [OBS Studio](htt To use your own domain name, please contact [Agora technical support](mailto:support@agora.io) for configuration. - * **Stream key**: A valid stream key, acquired using the [ RESTful API](../../api-reference?platform=rest) or generated locally, that corresponds to your server domain name. + * **Stream key**: A valid stream key, acquired using the [ RESTful API](../../api-reference?platform=rest) or generated locally, that corresponds to your server domain name. 1. Set streaming options to avoid B-frames in source streams: @@ -155,7 +155,7 @@ This section shows you how to test Agora using [OBS Studio](htt You see a video stream displayed in the channel, with the `uid` you used to generate the stream key. -1. Use the `Configure`, `Query`, and `Delete` [ RESTful API](../../api-reference?platform=rest) interfaces to manage your stream. +1. Use the `Configure`, `Query`, and `Delete` [ RESTful API](../../api-reference?platform=rest) interfaces to manage your stream. ## Reference @@ -163,11 +163,11 @@ This section contains information that completes the information in this page, o ### REST API -Refer to the [ RESTful API](../../api-reference?platform=rest) for parameter details and to obtain the calling code for your platform. +Refer to the [ RESTful API](../../api-reference?platform=rest) for parameter details and to obtain the calling code for your platform. ### Supported formats and protocosl - supports the following media streaming formats and protocols: + supports the following media streaming formats and protocols: * Video codec: H.264, H.265 * Audio codec: AAC, OPUS diff --git a/shared/media-gateway/reference/_best-practice.mdx b/shared/media-gateway/reference/_best-practice.mdx index e4406260f..27b9199d5 100644 --- a/shared/media-gateway/reference/_best-practice.mdx +++ b/shared/media-gateway/reference/_best-practice.mdx @@ -1,10 +1,10 @@ import SwitchDomainName from '@docs/shared/common/_switch-domain-name.mdx'; -This document presents the best practice to reliably integrate in your app. Before reading this document, follow the [ quickstart](../get-started/quickstart) to understand the basic process of using . +This document presents the best practice to reliably integrate in your app. Before reading this document, follow the [ quickstart](../get-started/quickstart) to understand the basic process of using . ## API call limits -The Agora server limits the call rate of the API, and returns the `429 (Too Many Requests)` status code when the limit rate is exceeded. If you have higher call rate requirements, please contact [Agora technical support](mailto:support@agora.io). +The Agora server limits the call rate of the API, and returns the `429 (Too Many Requests)` status code when the limit rate is exceeded. If you have higher call rate requirements, please contact [Agora technical support](mailto:support@agora.io). | API | Calling rate limit per project | |:----|:-----------------------------| @@ -42,11 +42,11 @@ Implement the following best practice: ## Troubleshooting checklist -Refer to the following checklist to quickly confirm if each integration requirement for ensuring the connectivity and reliability of the service has been met. +Refer to the following checklist to quickly confirm if each integration requirement for ensuring the connectivity and reliability of the service has been met. | # | Importance | Check | |:--|:-----------|:------------| -| 1 | required | The service has been enabled for your App ID. | +| 1 | required | The service has been enabled for your App ID. | | 2 | required | The API call rate is below the maximum limit. See [API Call Limits](#api-call-limits) for details. | | 3 | required | The number of concurrent tasks in a project is less than 50. For details, see the [maximum number of concurrent tasks](#maximum-number-of-concurrent-tasks). | | 4 | required |
    • The `region` is set to the geographical region of your media stream source.
    • The `region` code is in lowercase.
    | diff --git a/shared/media-gateway/reference/_release-notes.mdx b/shared/media-gateway/reference/_release-notes.mdx index 6e9649748..9168e1490 100644 --- a/shared/media-gateway/reference/_release-notes.mdx +++ b/shared/media-gateway/reference/_release-notes.mdx @@ -1,4 +1,4 @@ -This page provides the release notes for . +This page provides the release notes for . ## 2023.07 diff --git a/shared/media-pull/reference/_restful-api.mdx b/shared/media-pull/reference/_restful-api.mdx index be97a7aac..f8ae14cde 100644 --- a/shared/media-pull/reference/_restful-api.mdx +++ b/shared/media-pull/reference/_restful-api.mdx @@ -558,4 +558,4 @@ This section summarizes some important considerations when using the tasks are allowed to run simultaneously for each project. You can contact [sales@agora.io](mailto:sales@agora.io) to get a higher quota. | ★★★★☆ | +| The default maximum number of concurrent tasks is 20, which means that a maximum of 20 tasks are allowed to run simultaneously for each project. You can contact [support@agora.io](mailto:support@agora.io) to get a higher quota. | ★★★★☆ | diff --git a/shared/signaling/beginners-guide/index.mdx b/shared/signaling/beginners-guide/index.mdx index 3e0791918..b3068dd3a 100644 --- a/shared/signaling/beginners-guide/index.mdx +++ b/shared/signaling/beginners-guide/index.mdx @@ -24,7 +24,50 @@ To learn more about specific scenarios, [contact](mailto:rtm-support@agora.io) the team. -## How to get started? +## Enable in + +Before using , you need to enable it for each app ID in and configure its main features. + +Take these steps in the new version of . If you are using the old one, switch to the new version by clicking **Switch to the new version** at the top of the screen. + +### Enable + +1. Select your project on the Projects page and click the corresponding pencil icon to configure it. + + ![configure_project](/images/signaling/configure_project.png) + +1. Go to **All features** > **Signaling** > **Basic information** and select a data center in the dropdown. + + ![project_settings_signaling](/images/signaling/project_settings_signaling.png) + +1. Go to **Subscriptions** > **Signaling** and subscribe to a plan. + + ![signaling-pricing-page](/images/signaling/signaling-pricing-plans.png) + + Once subscribed, you will be able to unsubscribe from the same page. + +### Configure features + +1. Go to **All features** > **Signaling** > **Presence Configuration** and configure the following: + + - Maximum number of instant events + - Timed event notification interval + - Event notification debounce time + + ![signaling-presence-configuration](/images/signaling/signaling-presence-configuration.png) + +1. Go to **All features** > **Signaling** > **Storage Configuration** and toggle the following: + + - Using storage + - User attribute callback + - Channel attribute callback + - Distributed lock + + ![signaling-storage-configuration](/images/signaling/signaling-storage-configuration.png) + +1. [Raise a support ticket](https://agora-ticket.agora.io/) to activate the Stream Channel, if necessary. The support team confirms activation through a ticket update. + +## Getting started Browse the following documents for more information or to get started with integration quickly: diff --git a/shared/signaling/limitations/android.mdx b/shared/signaling/limitations/android.mdx deleted file mode 100644 index 571b86a0e..000000000 --- a/shared/signaling/limitations/android.mdx +++ /dev/null @@ -1,45 +0,0 @@ - - - -## Call limit - -The call limit is for one RtmClient instance. If an operation corresponds to multiple methods, the number of the method calls of an operation equals the sum of the method calls of all corresponding methods in a specific time frame. - -
    You can increase the call limit of an API by creating multiple RtmClient instances.
    - -| Operation | Method | Call limit | -| ----------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------ | -| Log in the | login | 2 calls per second | -| Retrieve member count of specified channel(s) | getChannelMemberCount | 1 call per second | -| Join a different channel each time | join | 50 calls every 3 seconds | -| Join the same channel each time | join | 2 calls every 5 seconds | -| Send messages |
  • sendMessageToPeer
  • sendMessageToPeer
  • sendMessage
  • sendMessage
  • | 180 calls every three seconds | -| Retrieve a member list of the channel | getMembers | 5 calls every 2 seconds | -| Renew the token| RtmClient.renewToken | 2 calls per second | -| Query the online status of the specified users | queryPeersOnlineStatus | 10 calls every 5 seconds | -| Set user attributes |
  • setLocalUserAttributes
  • addOrUpdateLocalUserAttributes
  • deleteLocalUserAttributesByKeys
  • clearLocalUserAttributes
  • | 10 calls every 5 seconds | -| Get user attributes |
  • getUserAttributes
  • getUserAttributesByKeys
  • | 40 calls every 5 seconds | -| Set channel attributes |
  • setChannelAttributes
  • addOrUpdateChannelAttributes
  • deleteChannelAttributesByKeys
  • clearChannelAttributes
  • | 10 calls every 5 seconds | -| Get channel attributes |
  • getChannelAttributes
  • getChannelAttributesByKeys
  • | 10 calls every 5 seconds | -| Subscribes to the online status of the specified user(s) | subscribePeersOnlineStatus | 10 calls every 5 seconds | -| Unsubscribes from the online status of the specified user(s) | unsubscribePeersOnlineStatus | 10 calls every 5 seconds | -| Gets a list of the peers, to whose specific status you have subscribed. | queryPeersBySubscriptionOption | 10 calls every 5 seconds | - - - -## String size - -- The maximum size of a peer-to-peer or channel message is 32 KB. See RtmMessage.setText. -- The maximum size of the content in a call invitation is 8 KB. See LocalInvitation.setContent. -- The maximum size of the response in a call invitation is 8 KB. See RemoteInvitation.setResponse. - -## Encoding - -- Channel and peer-to-peer messages, invitation content, and invitation response must be in UTF-8 format. -- The `filePath` parameter of the following methods must be in UTF-8 format: - - createFileMessageByUploading - - createImageMessageByUploading - - downloadMediaToFile - - -
    \ No newline at end of file diff --git a/shared/signaling/limitations/cpp-x-platform.mdx b/shared/signaling/limitations/cpp-x-platform.mdx deleted file mode 100644 index 15cb1293b..000000000 --- a/shared/signaling/limitations/cpp-x-platform.mdx +++ /dev/null @@ -1,43 +0,0 @@ - -## Call limit - -The call limit is for one IRtmService instance. If an operation corresponds to multiple methods, the number of the method calls of an operation equals the sum of the method calls of all corresponding methods in a specific time frame. - -You can increase the call limit of an API by creating multiple IRtmService instances. - -| Operation | Method | Call limit | -| ----------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------ | -| Log in to the | login | 2 calls per second | -| Retrieve member count of specified channels | getChannelMemberCount | 1 call per second | -| Join a different channel each time | join | 50 calls every 3 seconds | -| Join the same channel each time | join | 2 calls every 5 seconds | -| Send messages |
  • sendMessageToPeer
  • sendMessageToPeer
  • sendMessage
  • sendMessage
  • | 180 calls every three seconds | -| Retrieve a member list of the channel | getMembers | 5 calls every 2 seconds | -| Renew the token| renewToken | 2 calls per second | -| Query the online status of the specified users | queryPeersOnlineStatus | 10 calls every 5 seconds | -| Set user attributes |
  • setLocalUserAttributes
  • addOrUpdateLocalUserAttributes
  • deleteLocalUserAttributesByKeys
  • clearLocalUserAttributes
  • | 10 calls every 5 seconds | -| Get user attributes |
  • getUserAttributes
  • getUserAttributesByKeys
  • | 40 calls every 5 seconds | -| Set channel attributes |
  • setChannelAttributes
  • addOrUpdateChannelAttributes
  • deleteChannelAttributesByKeys
  • clearChannelAttributes
  • | 10 calls every 5 seconds | -| Get channel attributes |
  • getChannelAttributes
  • getChannelAttributesByKeys
  • | 10 calls every 5 seconds | -| Subscribe to the online status of the specified users | subscribePeersOnlineStatus | 10 calls every 5 seconds | -| Unsubscribe from the online status of the specified users | unsubscribePeersOnlineStatus | 10 calls every 5 seconds | -| Get a list of the peers whose status you have subscribed to | queryPeersBySubscriptionOption | 10 calls every 5 seconds | - - - - -## String size - -- The maximum size of a peer-to-peer or channel message is 32 KB. See [`IMessage.setText. -- The maximum size of the content in a call invitation is 8 KB. See [`ILocalCallInvitation.setContent. -- The maximum size of the response in a call invitation is 8 KB. See [`IRemoteCallInvitation.setResponse. - -## Encoding - -- Channel and peer-to-peer messages, the invitation content, and the invitation response must be in UTF-8 format. -- The `filePath` parameter of the following methods must be in UTF-8 format: -- createFileMessageByUploading -- createImageMessageByUploading -- downloadMediaToFile - - diff --git a/shared/signaling/limitations/cpp.mdx b/shared/signaling/limitations/cpp.mdx deleted file mode 100644 index 3c8024b7e..000000000 --- a/shared/signaling/limitations/cpp.mdx +++ /dev/null @@ -1,7 +0,0 @@ -import Text from './cpp-x-platform.mdx'; - - - - - - \ No newline at end of file diff --git a/shared/signaling/limitations/index.mdx b/shared/signaling/limitations/index.mdx index 8fce423be..91a0cb07f 100644 --- a/shared/signaling/limitations/index.mdx +++ b/shared/signaling/limitations/index.mdx @@ -1,16 +1,8 @@ -import Android from './android.mdx'; -import Ios from './ios.mdx'; -import Linux from './linux.mdx'; -import Macos from './macos.mdx'; -import Unity from './unity.mdx'; -import Web from './web.mdx'; -import Windows from './windows.mdx'; - ## API call limit Unless otherwise specified below, limit the API call frequency by a single client to 20 calls per second. If the number of calls per second exceeds 20, some calls are ignored by the SDK. If you need to call more APIs per second, contact [rtm@agora.io](mailto:rtm@agora.io). -### General +## General | Item | Soft limit | Hard limit | Comments | |:---:|:---:|:---:|:---:| @@ -20,7 +12,7 @@ Unless otherwise specified below, limit the API call frequency by a single clien | Number of stream channels per app ID | Unlimited | N/A | Channel resources are public, users can take them as needed. | | User ID length | 64 ASCII characters | 64 ASCII characters | Exceeding the soft limit produces an error. | -### Message channel +## Message channel | Item | Soft limit | Hard limit | Comments | |:---:|:---:|:---:|:---:| @@ -32,7 +24,7 @@ Unless otherwise specified below, limit the API call frequency by a single clien | Channel name length | 64 ASCII characters | 64 ASCII characters | Exceeding the soft limit produces an error. | | Custom message type length | 32 ASCII characters | 32 ASCII characters | Exceeding the soft limit produces an error. | -### Stream channel +## Stream channel | Item | Soft limit | Hard limit | Comments | |:---:|:---:|:---:|:---:| @@ -42,7 +34,7 @@ Unless otherwise specified below, limit the API call frequency by a single clien | Number of topics per channel | Unlimited | N/A | | | Channel name length | 64 ASCII characters | 64 ASCII characters | Exceeding the soft limit produces an error. | -### Topic +## Topic | Item | Soft limit | Hard limit | Comments | |:---:|:---:|:---:|:---:| @@ -52,10 +44,10 @@ Unless otherwise specified below, limit the API call frequency by a single clien | Number of users subscribed to a topic by a client | 64 | 64 | A single client can subscribe up to 64 user IDs to a single topic. Exceeding the soft limit produces an error. | | Number of publishers in a topic | Unlimited | N/A | | | Topic name length | 8 ASCII characters | 8 ASCII characters | The topic name length will be extended to 64 ASCII characters in future releases. | -| Message packet size | 32 KB | 32 KB | Exceeding the soft limit produces an error. To change the limit, contact [rtm@agora.io](mailto:rtm@agora.io). | +| Message packet size | 1 KB | 1 KB | Exceeding the soft limit produces an error. To change the limit, contact [rtm@agora.io](mailto:rtm@agora.io). | | Custom message type length | 32 ASCII characters | 32 ASCII characters | Exceeding the soft limit produces an error. | -### Presence +## Presence | Item | Soft limit | Hard limit | Comments | |:---:|:---:|:---:|:---:| @@ -63,7 +55,7 @@ Unless otherwise specified below, limit the API call frequency by a single clien | Number of temporary user state key/value pairs | 32 pairs | 32 pairs | Exceeding the soft limit produces an error. | | Number of temporary user states cached before joining the channel | 100 | 100 | Exceeding the soft limit produces an error. | -### Storage +## Storage | Item | Soft limit | Hard limit | Comments | |:---:|:---:|:---:|:---:| @@ -77,7 +69,7 @@ Unless otherwise specified below, limit the API call frequency by a single clien | Number of channel metadata sets per app ID | 1 million | N/A | | | Number of user metadata sets per app ID | 1 million | N/A | To change the limit, contact [rtm@agora.io](mailto:rtm@agora.io). | -### Lock +## Lock | Item | Soft limit | Hard limit | Comments | |:---:|:---:|:---:|:---:| @@ -88,18 +80,9 @@ Unless otherwise specified below, limit the API call frequency by a single clien | Number of locks per app ID | 1 million | N/A | Exceeding the soft limit produces an error. To change the limit, contact [rtm@agora.io](mailto:rtm@agora.io). | | Lock acquisition API call frequency | 10 times/sec | N/A | | -## String size - -The maximum size of the response in a call invitation is 8 KB. - -## Unicode support - -Supports channel and peer-to-peer messages, invitation content, and invitation response in UTF-8 only. +## Miscellaneous - - - - - - - +- The number of RESTful API requests per second per app ID are limited to 500. To extend the limit, contact support@agora.io. +- The max number of concurrent users is 50,000. To extend the limit, contact support@agora.io. +- The max number of daily active users is 500,000. To extend the limit, contact support@agora.io. +- The max number of users in a single channel is 50,000. To extend the limit, contact support@agora.io. diff --git a/shared/signaling/limitations/ios.mdx b/shared/signaling/limitations/ios.mdx deleted file mode 100644 index 749714b1c..000000000 --- a/shared/signaling/limitations/ios.mdx +++ /dev/null @@ -1,8 +0,0 @@ -import Text from './oc.mdx'; - - - - - - - \ No newline at end of file diff --git a/shared/signaling/limitations/java.mdx b/shared/signaling/limitations/java.mdx deleted file mode 100644 index 659a4fcf3..000000000 --- a/shared/signaling/limitations/java.mdx +++ /dev/null @@ -1,45 +0,0 @@ - - -## API call limit - -The call limit is for one RtmClient instance. If an operation corresponds to multiple methods, the number of the method calls of an operation equals the sum of the method calls of all corresponding methods in a specific time frame. - -You can increase the call limit of an API by creating multiple RtmClient instances. - -| Function | Method | Call limit | -| -------------------------------------------------- | ------------------------------------------------------------ | ------------------------------- | -| Log in to the | login | Two calls per second | -| Retrieve member count of specified channels | getChannelMemberCount | One call per second | -| Join a different channel each time | join | 50 calls every three seconds | -| Join the same channel each time | join | Two calls every five seconds | -| Send messages |
  • sendMessageToPeer
  • sendMessageToPeer
  • sendMessage
  • | 1,500 calls every three seconds | -| Retrieve a member list of the channel | getMembers | Five calls every two seconds | -| Renew the token | renewToken | Two calls per second | -| Query the online status of the specified users | queryPeersOnlineStatus | 100 calls every five seconds. | -| Set user attributes |
  • setLocalUserAttributes
  • addOrUpdateLocalUserAttributes
  • deleteLocalUserAttributesByKeys
  • clearLocalUserAttributes
  • | 100 calls every five seconds | -| Get user attributes |
  • getUserAttributes
  • getUserAttributesByKeys
  • | 400 calls every 5 seconds | -| Set channel attributes |
  • setChannelAttributes
  • addOrUpdateChannelAttributes
  • deleteChannelAttributesByKeys
  • clearChannelAttributes
  • | 100 calls every five seconds | -| Get channel attributes |
  • getChannelAttributes
  • getChannelAttributesByKeys
  • | 400 calls every five seconds | -| Subscribe to the online status of the specified users | subscribePeersOnlineStatus | 10 calls every five seconds. | -| Unsubscribe from the online status of the specified users | unsubscribePeersOnlineStatus | 10 calls every five seconds. | -| Get a list of the peers, to whose specific status you have subscribed | queryPeersBySubscriptionOption | 10 calls every five seconds. | - - -## String size - -- The maximum size of a peer-to-peer or channel message is 32 KB. See RtmMessage.setText. -- The maximum size of the content in a call invitation is 8 KB. See LocalInvitation.setContent. -- The maximum size of the response in a call invitation is 8 KB. See RemoteInvitation.setResponse. - -## Unicode support - -- Channel and peer-to-peer messages, invitation content, and invitation response must be in UTF-8 format. -- The `filePath` parameter of the following methods must be in UTF-8 format: - - createFileMessageByUploading - - createImageMessageByUploading - - downloadMediaToFile - - - -
    - diff --git a/shared/signaling/limitations/linux.mdx b/shared/signaling/limitations/linux.mdx deleted file mode 100644 index 1ddfabea7..000000000 --- a/shared/signaling/limitations/linux.mdx +++ /dev/null @@ -1,7 +0,0 @@ -import CPP from './cpp.mdx'; -import JAVA from './java.mdx'; - - - - - diff --git a/shared/signaling/limitations/macos.mdx b/shared/signaling/limitations/macos.mdx deleted file mode 100644 index 6b5fc83fb..000000000 --- a/shared/signaling/limitations/macos.mdx +++ /dev/null @@ -1,8 +0,0 @@ -import Text from './oc.mdx'; - - - - - - - \ No newline at end of file diff --git a/shared/signaling/limitations/oc.mdx b/shared/signaling/limitations/oc.mdx deleted file mode 100644 index 09f0af9b0..000000000 --- a/shared/signaling/limitations/oc.mdx +++ /dev/null @@ -1,42 +0,0 @@ - -## Call limit - -The call limit is for one AgoraRtmKit instance. If an operation corresponds to multiple methods, the number of the method calls of an operation equals the sum of the method calls of all corresponding methods in a specific time frame. - -
    You can increase the call limit of an API by creating multiple AgoraRtmKit instances.
    - -| Operation | Method | Call limit | -| ----------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------ | -| Log in to the | loginByToken | 2 calls per second | -| Retrieve member count of specified channels | getChannelMemberCount | 1 call per second | -| Join a different channel each time | joinWithCompletion | 50 calls every 3 seconds | -| Join the same channel each time | joinWithCompletion | 2 calls every 5 seconds | -| Send messages|
  • sendMessage
  • sendMessage
  • sendMessage
  • sendMessage
  • | 180 calls every three seconds | -| Retrieve a member list of the channel | getMembersWithCompletion: | 5 calls every 2 seconds | -| Renew the token | renewToken | 2 calls per second | -| Query the online status of the specified users. | queryPeersOnlineStatus | 10 calls every 5 seconds | -| Set user attributes |
  • setLocalUserAttributes
  • addOrUpdateLocalUserAttributes
  • deleteLocalUserAttributesByKeys
  • clearLocalUserAttributes
  • | 10 calls every 5 seconds | -| Get user attributes |
  • getUserAttributes
  • getUserAttributesByKeys
  • | 40 calls every 5 seconds | -| Set channel attributes |
  • setChannelAttributes
  • addOrUpdateChannelAttributes
  • deleteChannelAttributesByKeys
  • clearChannelAttributes
  • | 10 calls every 5 seconds | -| Get channel attributes |
  • getChannelAttributes
  • getChannelAttributesByKeys
  • | 10 calls every 5 seconds | -| Subscribe to the online status of the specified users | subscribePeersOnlineStatus | 10 calls every 5 seconds | -| Unsubscribe from the online status of the specified users | unsubscribePeersOnlineStatus | 10 calls every 5 seconds | -| Get a list of the peers whose status you have subscribed to. | queryPeersBySubscriptionOption | 10 calls every 5 seconds | - - - -## String size - -- The maximum size of a peer-to-peer or channel message is 32 KB. See AgoraRtmMessage. -- The maximum size of the content in a call invitation is 8 KB. See AgoraRtmLocalInvitation. -- The maximum size of the response in a call invitation is 8 KB. See AgoraRtmRemoteInvitation. - -## Encoding - -- Channel and peer-to-peer messages, the invitation content, and the invitation response must be in UTF-8 format. -- The `filePath` parameter of the following methods must be in UTF-8 format: - - createFileMessageByUploading:withRequest:completion: - - createImageMessageByUploading:withRequest:completion: - - downloadMedia:toFile:withRequest:completion: - - diff --git a/shared/signaling/limitations/unity.mdx b/shared/signaling/limitations/unity.mdx deleted file mode 100644 index bb27b440a..000000000 --- a/shared/signaling/limitations/unity.mdx +++ /dev/null @@ -1,46 +0,0 @@ - - -## Call limit - -The call limit is for one `IRtmService` instance. If an operation corresponds to multiple methods, the number of the method calls of an operation equals the sum of the method calls of all corresponding methods in a specific time frame. - -
    You can increase the call limit of an API by creating multiple IRtmService instances.
    - - -| Operation | Method | Call limit | -| ----------------------------------------------------------- | ------------------------------------------------------------ | ------------------------------ | -| Log in to the | Login | 2 calls per second | -| Retrieve member count of specified channels |GetChannelMemberCount | 1 call per second | -| Join a different channel each time | Join | 50 calls every 3 seconds | -| Join the same channel each time | Join | 2 calls every 5 seconds | -| Send messages |
  • SendMessageToPeer
  • SendMessageToPeer
  • SendMessage
  • SendMessage
  • | 180 calls every three seconds | -| Retrieve a member list of the channel | GetMembers | 5 calls every 2 seconds | -| Renew the token| RenewToken | 2 calls per second | -| Query the online status of the specified users | QueryPeersOnlineStatus | 10 calls every 5 seconds | -| Set user attributes |
  • DeleteLocalUserAttributesByKeys
  • ClearLocalUserAttributes
  • | 10 calls every 5 seconds | -| Get user attributes |
  • GetUserAttributes
  • GetUserAttributesByKeys
  • | 40 calls every 5 seconds | -| Set channel attributes |
  • SetChannelAttributes
  • DeleteChannelAttributesByKeys
  • ClearChannelAttributes
  • | 10 calls every 5 seconds | -| Get channel attributes |
  • GetChannelAttributes
  • GetChannelAttributesByKeys
  • | 10 calls every 5 seconds | -| Subscribe to the online status of the specified users | SubscribePeersOnlineStatus | 10 calls every 5 seconds | -| Unsubscribe from the online status of the specified users | UnsubscribePeersOnlineStatus | 10 calls every 5 seconds | -| Get a list of the peers whose status you have subscribed to |QueryPeersBySubscriptionOption| 10 calls every 5 seconds | - - - -## String size - -- The maximum size of a peer-to-peer or channel message is 32 KB. See IMessage.SetText. -- The maximum size of the content in a call invitation is 8 KB. See ILocalCallInvitation.SetContent. -- The maximum size of the response in a call invitation is 8 KB. See IRemoteCallInvitation.GetResponse. - -## Encoding - -- Channel and peer-to-peer messages, the invitation content, and the invitation response must be in UTF-8 format. -- The `filePath` parameter of the following methods must be in UTF-8 format: - - CreateFileMessageByUploading - - CreateImageMessageByMediaId - - DownloadMediaToFile - - - -
    \ No newline at end of file diff --git a/shared/signaling/limitations/web.mdx b/shared/signaling/limitations/web.mdx deleted file mode 100644 index 3c97a67b5..000000000 --- a/shared/signaling/limitations/web.mdx +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/shared/signaling/limitations/windows.mdx b/shared/signaling/limitations/windows.mdx deleted file mode 100644 index 974cb3ccc..000000000 --- a/shared/signaling/limitations/windows.mdx +++ /dev/null @@ -1,7 +0,0 @@ -import Text from './cpp-x-platform.mdx'; - - - - - - \ No newline at end of file diff --git a/shared/signaling/prerequisites.mdx b/shared/signaling/prerequisites.mdx index 61a3e5333..1863b9bff 100644 --- a/shared/signaling/prerequisites.mdx +++ b/shared/signaling/prerequisites.mdx @@ -4,24 +4,7 @@ To test the code used in this page you need to have: -- Enabled in [ Console](https://console.agora.io/v2). To do so: - - 1. Select your project on the [Project Management](https://console.agora.io/v2/project-management) page and click the corresponding pencil icon to configure it. - - ![configure_project](/images/signaling/configure_project.png) - - 1. Go to **All features** > **Signaling** > **Basic information** and select a data center in the dropdown. - - ![project_settings_signaling](/images/signaling/project_settings_signaling.png) - - 1. Go to **Subscriptions** > **Signaling** and subscribe to a plan. - - ![signaling-pricing-page](/images/signaling/signaling-pricing-plans.png) - - Once subscribed, you will be able to unsubscribe from the same page. - -- [Raised a support ticket](https://agora-ticket.agora.io/) to activate the Stream Channel, if necessary. - - The support team confirms activation through a ticket update. +- Enabled in . See [Enable ](../get-started/beginners-guide#enable-signaling). +- [Raised a support ticket](https://agora-ticket.agora.io/) to activate the Stream Channel, if necessary. The support team confirms activation through a ticket update. Signaling 2.x is an enhanced version compared to 1.x with a wide range of new features. It follows a new pricing structure. Please visit the [Pricing](../overview/pricing) page for details. \ No newline at end of file diff --git a/shared/signaling/reference/_pricing.mdx b/shared/signaling/reference/_pricing.mdx index d73132dab..b2e9a48d3 100644 --- a/shared/signaling/reference/_pricing.mdx +++ b/shared/signaling/reference/_pricing.mdx @@ -1,6 +1,6 @@ -## Pricing concepts +## How usage is measured is priced based on the total number of messages, peak connections, and storage usage of your account in a calendar month. @@ -18,18 +18,14 @@ For example, if a client sends 1 message to a Message Channel, and the channel i For example, if a client sends a message to a Topic in the Stream Channel, and this Topic is subscribed by 10 people, it is counted as 1 sent message and 10 received messages, for a total of 11 messages. -Even if message filtering is enabled on the client, it does not have any impact on message metering. The client-side message filtering function is only for the convenience of developers, and the messages are actually delivered. -The asynchronous callback generated by publishing a message in the Message Channel or Stream Channel is not counted in the number of messages. -Messages sent using the RESTful API are also counted as messages. -If a client does not subscribe to a channel or topic, it does not receive any messages. + Even if message filtering is enabled on the client, it does not have any impact on message metering. The client-side message filtering function is only for the convenience of developers, and the messages are actually delivered.
    • The asynchronous callback generated by publishing a message in the Message Channel or Stream Channel is not counted in the number of messages.
    • Messages sent using the RESTful API are also counted as messages.
    • +
    • If a client does not subscribe to a channel or topic, it does not receive any messages.
    ### Presence Each Presence event notification published is counted as one message, such as the client’s entry into the channel, leaving the channel, timeout notification, and status change notification. Each Presence event notification received in the channel counts as one message. For example, if a client enters a channel, and 10 other clients subscribe to the channel and listen to the Presence event notifications in the channel, then this counts as 1 sent Presence event notification, and the remaining 10 clients receive a total of 10 presence event notifications. That is a total of 11 messages. -The client message filtering function has no impact on the presence event notification count. -If a client does not want to send the Presence event when joining the Stream Channel or subscribing to the Message Channel, setting `withPresence` to `false` does not affect the calculation of the number of messages. -If a client does not join a Stream Channel or subscribe to a Message Channel, it does not receive the Presence event notification of the channel. +
    • The client message filtering function has no impact on the presence event notification count.
    • If a client does not want to send the Presence event when joining the Stream Channel or subscribing to the Message Channel, setting `withPresence` to `false` does not affect the calculation of the number of messages.
    • If a client does not join a Stream Channel or subscribe to a Message Channel, it does not receive the Presence event notification of the channel.
    ### Storage Setting, querying, updating, and deleting any piece of Channel Metadata in the Message Channel or Stream Channel is counted as 1 message. @@ -38,30 +34,19 @@ Any 1 Channel Metadata change event notification received in a Message Channel o Setting, querying, updating, and deleting any piece of User Metadata is counted as 1 message. Receiving 1 change notification of User Metadata is counted as 1 message. For example, if the client sets 1 User Metadata for a user, and the User Metadata is subscribed by 10 people, it is deemed that 1 message has been published and 10 messages have been received, for a total of 11 messages. -Client message filtering has no impact on Channel Metadata or User Metadata change notification counts. The client message filtering settings are as follows: - -* Set `withMetadata` to `false` if the client does not want to receive Channel Metadata or User Metadata change notifications when joining a Stream Channel or subscribing to a Message Channel. -* If a client does not join the Stream Channel or subscribe to a Message Channel, it does not receive the Channel Metadata change notification of the channel. -* If the client does not subscribe to other users’ User Metadata, it will not receive other users’ User Metadata change notifications. +Client message filtering has no impact on Channel Metadata or User Metadata change notification counts. The client message filtering settings are as follows:
    • Set `withMetadata` to `false` if the client does not want to receive Channel Metadata or User Metadata change notifications when joining a Stream Channel or subscribing to a Message Channel.
    • If a client does not join the Stream Channel or subscribe to a Message Channel, it does not receive the Channel Metadata change notification of the channel.
    • If the client does not subscribe to other users’ User Metadata, it will not receive other users’ User Metadata change notifications.
    ### Locks Any operations such as lock setting, query, release, deprivation, and deletion are counted as 1 message. Any 1 lock change event notification received in a Message Channel or Stream Channel is counted as one message. For example, if the client sets a lock on a channel, and the channel is subscribed by 10 people, and these users listen to the lock change notification, it is regarded as publishing 1 message and receiving 10 messages, for a total of 11 messages. -In , a message is calculated in 1 KB. Therefore, if you send a message package with a size of 10 KB to a channel or Topic subscribed by 100 people, it will be counted as 10 inbound messages and 1,000 outbound messages to give a total of 1,010 messages. +In , a message is calculated in 1 KB. Therefore, if you send a message package with a size of 10 KB to a channel or Topic subscribed by 100 people, it will be counted as 10 inbound messages and 1,000 outbound messages to give a total of 1,010 messages. ### Storage occupancy Storage in generates cloud storage occupancy. measures the total storage occupancy, and bills the amount for the month by sampling the customer's actual cloud storage occupancy at 1-hour intervals in a natural month and then accumulating them. The calculation formula is as follows: -_Storage fees = number of days in the month * 24 hours * storage usage per hour * sampling rate_ - -For example, if you have 100 GB of storage and you are using a sampling rate of 10%, then your storage fees for a 30-day month would be: - -_Storage fees = 30 days * 24 hours * 100 GB/hour * 10% = 72,000 GB_ - -This would be equivalent to 72 TB, which is a common unit of measurement for storage capacity. -It is important to note that this formula is just a general guideline. The actual storage fees you are charged may vary depending on your provider and your specific contract. +![Signaling storage calculation formula](/images/signaling/signaling-storage-calculation-formula.png) ### Peak connections diff --git a/shared/signaling/release-notes/web.mdx b/shared/signaling/release-notes/web.mdx index 5e09905fb..3eda18e33 100644 --- a/shared/signaling/release-notes/web.mdx +++ b/shared/signaling/release-notes/web.mdx @@ -10,6 +10,25 @@ import * as lock from '@docs/shared/signaling/reference/api-ref/shared/_lock.mdx +### v2.1.9 + +v2.1.9 was released on March 12, 2024. + +#### Improvements + +This release optimizes the logic of the client-side encryption. When the length of the `salt` parameter is less than 32 bytes, the SDK automatically pads it with zeros to reach the required length. + +#### Fixed issues + +This release fixed the following issues: + +- After calling `renewToken` to renew the token, some services were not functioning correctly, resulting in unexpected disconnection. +- When the duration of disconnection exceeded the configured value of the `presenceTimeout` parameter, the value of the `reason` parameter reported in the `status` event notification was incorrect. +- Under poor network conditions, the SDK occasionally failed to restore subscriptions to the lock and storage services. +- In specific scenarios, calling `acquireLock` method did not return the result. +- When a local user left the last topic the user joined, remote users occasionally received both the `REMOTE_JOIN` and `REMOTE_LEAVE` topic events. +- The `messageType` parameter types of the `messageEvent` callbacks. + ### v2.1.7 v2.1.7 was released on January 22, 2024. diff --git a/shared/variables/global.js b/shared/variables/global.js index 532d97961..92bff9e61 100644 --- a/shared/variables/global.js +++ b/shared/variables/global.js @@ -164,6 +164,8 @@ export const ACCG = 'Global Accelerator'; export const RTT = 'Real-Time Transcription'; +export const MG = 'Media Gateway'; + export const TEMPL = 'Templates'; export const RTEE = 'Extensions'; @@ -243,8 +245,6 @@ export const ELE = 'Electron'; export const UNI = 'Unity'; export const FLU = 'Flutter'; export const REA = 'React Native'; -export const COC = 'Cocos Creator'; -export const CO2_AN = 'Cocos2d-x-Android'; export const SS = 'Server side'; export const ATW = 'Technical Writer'; diff --git a/shared/video-sdk/_billing.mdx b/shared/video-sdk/_billing.mdx index 6c2e7f49f..d7eca44e3 100644 --- a/shared/video-sdk/_billing.mdx +++ b/shared/video-sdk/_billing.mdx @@ -47,7 +47,7 @@ This section describes the additional charges applicable to your account. As of November 2021, Singapore charges [8% Singapore Goods and Services Tax (GST)](https://www.iras.gov.sg/taxes/goods-services-tax-(gst)/basics-of-gst/goods-and-services-tax-(gst)-what-it-is-and-how-it-works) on invoices for all services provided to accounts located in Singapore. determines the account location based on the tax identification number, contact address, or billing address that you have provided. All GST collected from Singapore accounts is paid to the Singapore tax authority. -If you have any questions, contact sales@agora.io. +If you have any questions, contact support@agora.io. #### Fee deduction diff --git a/shared/video-sdk/develop/real-time-transcription/reference/index.mdx b/shared/video-sdk/develop/real-time-transcription/reference/index.mdx index 250435457..986a9bf3a 100644 --- a/shared/video-sdk/develop/real-time-transcription/reference/index.mdx +++ b/shared/video-sdk/develop/real-time-transcription/reference/index.mdx @@ -12,8 +12,8 @@ import Windows from './windows.mdx'; - Android: onStreamMessage - Electron: onStreamMessage - Flutter: onStreamMessage -- iOS: receiveStreamMessageFromUid -- macOS:receiveStreamMessageFromUid +- iOS: rtcEngine(_:receiveStreamMessageFromUid:streamId:data:) +- macOS: rtcEngine(_:receiveStreamMessageFromUid:streamId:data:) - Unity: onStreamMessage - Windows: onStreamMessage diff --git a/shared/video-sdk/develop/spatial-audio/project-implementation/unreal.mdx b/shared/video-sdk/develop/spatial-audio/project-implementation/unreal.mdx index 367e15e6f..84b4f2de2 100644 --- a/shared/video-sdk/develop/spatial-audio/project-implementation/unreal.mdx +++ b/shared/video-sdk/develop/spatial-audio/project-implementation/unreal.mdx @@ -177,6 +177,6 @@ To implement these features in your , take the following steps } ``` -Spatial audio is currently experimental. Contact sales-us@agora.io to activate this function. If you need further support, please contact [ technical support](mailto:support@agora.io). +Spatial audio is currently experimental. Contact support@agora.io to activate this function. If you need further support, please contact [ technical support](mailto:support@agora.io). \ No newline at end of file diff --git a/shared/video-sdk/get-started/get-started-sdk/project-implementation/poc3.mdx b/shared/video-sdk/get-started/get-started-sdk/project-implementation/poc3.mdx index f4322242c..f07e90016 100644 --- a/shared/video-sdk/get-started/get-started-sdk/project-implementation/poc3.mdx +++ b/shared/video-sdk/get-started/get-started-sdk/project-implementation/poc3.mdx @@ -90,7 +90,6 @@ The following code examples show how to implement these steps in your instance and join a channel @@ -197,4 +196,3 @@ The following code examples show how to implement these steps in your provides the `mNativeLibPath` attribute in the `RtcEngineConfig` class to support dynamic loading of the required `.so` files. Refer to the following steps to implement this feature: - -1. Download the latest version of the SDK and decompress it. -2. Integrate `agora-rtc-sdk.jar` into your project. -3. Upload the `.so` files for all architectures to your server and make sure that the app can download the `.so` files for the target architecture over the network. -4. When the app runs, it checks for the existence of an `.so` file. If not found, it downloads the `.so` file and saves it to the private directory of the app. -5. When calling `create` to create and initialize an `RtcEngine` instance, set the `mNativeLibPath` config parameter to the app private directory where the `.so` file is located. -6. After calling `create` successfully, the SDK automatically loads the `.so` file from the specified path. - -> This method is only suitable for manually integrating the Android SDK, not for integration through Maven Central. - \ No newline at end of file diff --git a/shared/video-sdk/reference/known-issues/flutter.mdx b/shared/video-sdk/reference/known-issues/flutter.mdx index b62e708f8..ec7e6ebf6 100644 --- a/shared/video-sdk/reference/known-issues/flutter.mdx +++ b/shared/video-sdk/reference/known-issues/flutter.mdx @@ -2,7 +2,7 @@ The list of known issues page is continuously updated as the systems evolve. Agora suggests you regularly upgrade to the latest version of the SDK, which includes new features, bug fixes and improvements. -- Flutter SDK v4.2.3 +- Flutter SDK v6.2.3 **Android 14 screen sharing issue** @@ -12,7 +12,7 @@ The list of known issues page is continuously updated as the systems evolve. Ago - When integrating the SDK, setting the Android `targetSdkVersion` to 34 may cause the screen sharing feature to be unavailable or even cause the application to crash. -- Flutter SDK v4.2.6 +- Flutter SDK v6.2.6 **AirPods Pro Bluetooth connection issue (iOS)** diff --git a/shared/video-sdk/reference/release-notes/android.mdx b/shared/video-sdk/reference/release-notes/android.mdx index 3bebec655..b3fb8d35d 100644 --- a/shared/video-sdk/reference/release-notes/android.mdx +++ b/shared/video-sdk/reference/release-notes/android.mdx @@ -68,6 +68,20 @@ This release has optimized the implementation of some functions, which involved The `LOCAL_VIDEO_STREAM_ERROR_ENCODE_FAILURE` enumeration has been changed to `LOCAL_VIDEO_STREAM_REASON_CODEC_NOT_SUPPORT`. +8. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + +9. **Removing `IAgoraEventHandler` interface** + + This release deletes the `IAgoraEventHandler` interface class. All callback events that were previously managed under this class are now processed through the `IRtcEngineEventHandler` interface class. + + #### New features 1. **Custom mixed video layout on the receiving end** @@ -129,7 +143,7 @@ This release has optimized the implementation of some functions, which involved 1. **Optimization of video pre-processing methods** - This release adds overloaded methods with the `souкceType` parameter for the following 5 video preprocessing methods, which support specifying the media source type for applying video preprocessing effects by passing in `sourceType` (for example, applying on a custom video capture media source): + This release adds overloaded methods with the `sourceType` parameter for the following 5 video preprocessing methods, which support specifying the media source type for applying video preprocessing effects by passing in `sourceType` (for example, applying on a custom video capture media source): - setBeautyEffectOptions [2/2] - setLowlightEnhanceOptions [2/2] @@ -511,7 +525,7 @@ This release introduces `startCameraCapture`. By calling this method multiple ti **6. Channel media relay** -This release introduces `startOrUpdateChannleMediaRelay` and `startOrUpdateChannleMediaRelayEx`, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls. +This release introduces `startOrUpdateChannelMediaRelay` and `startOrUpdateChannelMediaRelayEx`, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls. **7. Custom audio tracks** diff --git a/shared/video-sdk/reference/release-notes/electron.mdx b/shared/video-sdk/reference/release-notes/electron.mdx index 7ca6d7317..b2b8736a3 100644 --- a/shared/video-sdk/reference/release-notes/electron.mdx +++ b/shared/video-sdk/reference/release-notes/electron.mdx @@ -31,7 +31,7 @@ This release has optimized the implementation of some functions, involving renam **Note:** For specific renaming of enumerations, please refer to [API changes](#api-changes). -2. **Channel media relay** +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: @@ -41,7 +41,7 @@ This release has optimized the implementation of some functions, involving renam | `startChannelMediaRelayEx`,`updateChannelMediaRelayEx` | `startOrUpdateChannelMediaRelayEx` | | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | -3. **Reasons for local video state changes** +1. **Reasons for local video state changes** This release makes the following modifications to the enumerations in the LocalVideoStreamReason class: @@ -49,7 +49,16 @@ This release has optimized the implementation of some functions, involving renam - 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** +1. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + + +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. @@ -493,7 +502,7 @@ This release introduces `startCameraCapture` and `startScreenCaptureBySourceType **5. Channel media relay** -This release introduces `startOrUpdateChannleMediaRelay` and `startOrUpdateChannleMediaRelayEx`, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls. +This release introduces `startOrUpdateChannelMediaRelay` and `startOrUpdateChannelMediaRelayEx`, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls. **6. Custom audio tracks** diff --git a/shared/video-sdk/reference/release-notes/flutter.mdx b/shared/video-sdk/reference/release-notes/flutter.mdx index 51525f604..9d9c3b3d6 100644 --- a/shared/video-sdk/reference/release-notes/flutter.mdx +++ b/shared/video-sdk/reference/release-notes/flutter.mdx @@ -34,7 +34,7 @@ This release has optimized the implementation of some functions, involving renam **Note:** For specific renaming of enumerations, please refer to [API changes](#api-changes). -2. **Channel media relay** +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: @@ -44,11 +44,11 @@ This release has optimized the implementation of some functions, involving renam |
    • `startChannelMediaRelayEx`
    • `updateChannelMediaRelayEx`
    | `startOrUpdateChannelMediaRelayEx` | | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | -3. **Audio route** +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. -4. **Reasons for local video state changes** +1. **Reasons for local video state changes** This release makes the following modifications to the enumerations in the LocalVideoStreamReason class: @@ -56,7 +56,15 @@ This release has optimized the implementation of some functions, involving renam - 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)** +1. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + +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. diff --git a/shared/video-sdk/reference/release-notes/ios.mdx b/shared/video-sdk/reference/release-notes/ios.mdx index 801da4466..7f3665332 100644 --- a/shared/video-sdk/reference/release-notes/ios.mdx +++ b/shared/video-sdk/reference/release-notes/ios.mdx @@ -59,6 +59,15 @@ This release has optimized the implementation of some functions, involving renam - The `AgoraLocalVideoStreamErrorEncodeFailure` enumeration has been changed to `AgoraLocalVideoStreamReasonCodecNotSupport`. +6. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + #### New features 1. **Custom mixed video layout on the receiving end** @@ -373,7 +382,7 @@ v4.2.2 was released on July 27, 2023. This release includes the following additional improvements: -1. The SDK automacially adjusts the frame rate of the sending end based on the screen sharing scenario. Especially in document sharing scenarios, this feature avoids exceeding the expected video bitrate on the sending end to improve transmission efficiency and reduce network burden. +1. The SDK automatically adjusts the frame rate of the sending end based on the screen sharing scenario. Especially in document sharing scenarios, this feature avoids exceeding the expected video bitrate on the sending end to improve transmission efficiency and reduce network burden. 2. To help users understand the reasons for more types of remote video state changes, the `AgoraVideoRemoteReasonCodecNotSupport` enumeration has been added to the `remoteVideoStateChangedOfUid` callback, indicating that the local video decoder does not support decoding the received remote video stream. #### Issues fixed @@ -681,7 +690,7 @@ For more information about registering video observers and subscription options, As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality. -> To enable this feature, contact [sales-us@agora.io](https://docs.agora.io/cn/video-call-4.x/sales-us@agora.io). +> To enable this feature, contact [support@agora.io](https://docs.agora.io/cn/video-call-4.x/support@agora.io). **5. Camera capture options** diff --git a/shared/video-sdk/reference/release-notes/macos.mdx b/shared/video-sdk/reference/release-notes/macos.mdx index 13b6ee101..ca2b4079a 100644 --- a/shared/video-sdk/reference/release-notes/macos.mdx +++ b/shared/video-sdk/reference/release-notes/macos.mdx @@ -51,6 +51,15 @@ This release has optimized the implementation of some functions, involving renam - 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. +5. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + #### New features 1. **Local preview with multiple views** @@ -105,7 +114,7 @@ This release has optimized the implementation of some functions, involving renam - `AgoraAudioLocalReasonNoRecordingDevice`: No recording device is available. Remind your users to check whether the microphone is connected to the device properly in the control plane of the device or if the microphone is working properly. - `AgoraAudioLocalReasonNoPlayoutDevice`: No playback device is available. Remind your users to check whether the speaker is connected to the device properly in the control plane of the device or if the speaker is working properly. -5. **Other Improvements** +5. **Other improvements** This release also includes the following improvements: diff --git a/shared/video-sdk/reference/release-notes/react-native.mdx b/shared/video-sdk/reference/release-notes/react-native.mdx index f96e58ce9..f2255147e 100644 --- a/shared/video-sdk/reference/release-notes/react-native.mdx +++ b/shared/video-sdk/reference/release-notes/react-native.mdx @@ -5,6 +5,16 @@ import KnownIssues from '@docs/shared/video-sdk/reference/known-issues/react-nat +### v4.3.0-build.1 + +v4.3.0-build.1 was released on March 19, 2024. + +#### Issues fixed + +This release fixed the following issue: + +Directly calling `engine.release` to destroy the engine without prior call of `engine.unregisterEventHandler` to remove all callback events could lead to App crashes (Android). + ### v4.3.0 v4.3.0 was released on February 28, 2024. diff --git a/shared/video-sdk/reference/release-notes/unity.mdx b/shared/video-sdk/reference/release-notes/unity.mdx index 26085d6a8..600c49a4a 100644 --- a/shared/video-sdk/reference/release-notes/unity.mdx +++ b/shared/video-sdk/reference/release-notes/unity.mdx @@ -52,6 +52,24 @@ This release has optimized the implementation of some functions, involving renam - 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`. +4. **Audio route** + + Starting with this release, `routeBluetooth` in AudioRoute is renamed to `ROUTE_BLUETOOTH_DEVICE_HFP`, representing a Bluetooth device using the HFP protocol. `ROUTE_BLUETOOTH_DEVICE_A2DP`(10) is added to represent a Bluetooth device using the A2DP protocol + +5. **Audio loopback capturing (Windows, macOS)** + + - Before v4.3.0, if you called the DisableAudio method to disable the audio module, audio loopback capturing would 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. + +6. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + #### New features 1. **Local preview with multiple views** @@ -62,15 +80,23 @@ This release has optimized the implementation of some functions, involving renam 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** +1. **Custom mixed video layout on the 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. + +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). -3. **Select different audio tracks for local playback and streaming** +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. -4. **Others** +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. @@ -120,6 +146,9 @@ This release fixed the following issues: **Added** + +- OnTranscodedStreamLayoutInfo +- VideoLayout - The `subviewUid` member in VideoCanvas - EnableCustomAudioLocalPlayback - QueryDeviceScore diff --git a/shared/video-sdk/reference/release-notes/web.mdx b/shared/video-sdk/reference/release-notes/web.mdx index 4f576d5b2..490e7b1a0 100644 --- a/shared/video-sdk/reference/release-notes/web.mdx +++ b/shared/video-sdk/reference/release-notes/web.mdx @@ -11,6 +11,14 @@ See [Supported platforms](../overview/supported-platforms). +### v4.20.2 + +v4.20.2 was released on March 21, 2024. + +#### Fixed issues + +This release fixes the issue where the browser would modify the captured video resolution when calling createCustomVideoTrack in certain scenarios. + ### v4.20.1 v4.20.1 was released on February 28, 2024. diff --git a/shared/video-sdk/reference/release-notes/windows.mdx b/shared/video-sdk/reference/release-notes/windows.mdx index 9e8c3fb5a..d07074da4 100644 --- a/shared/video-sdk/reference/release-notes/windows.mdx +++ b/shared/video-sdk/reference/release-notes/windows.mdx @@ -54,6 +54,15 @@ This release has optimized the implementation of some functions, involving renam - 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. +5. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + #### New features 1. **Local preview with multiple views** @@ -357,7 +366,7 @@ v4.2.2 was released on july 27, 2023. This release includes the following additional improvements: -1. The SDK automacially adjusts the frame rate of the sending end based on the screen sharing scenario. Especially in document sharing scenarios, this feature avoids exceeding the expected video bitrate on the sending end to improve transmission efficiency and reduce network burden. +1. The SDK automatically adjusts the frame rate of the sending end based on the screen sharing scenario. Especially in document sharing scenarios, this feature avoids exceeding the expected video bitrate on the sending end to improve transmission efficiency and reduce network burden. 2. To help users understand the reasons for more types of remote video state changes, the `REMOTE_VIDEO_STATE_REASON_CODEC_NOT_SUPPORT` enumeration has been added to the `onRemoteVideoStateChanged` callback, indicating that the local video decoder does not support decoding the received remote video stream. #### Issues fixed diff --git a/shared/voice-sdk/reference/known-issues/flutter.mdx b/shared/voice-sdk/reference/known-issues/flutter.mdx index 44b044a71..53a3fa850 100644 --- a/shared/voice-sdk/reference/known-issues/flutter.mdx +++ b/shared/voice-sdk/reference/known-issues/flutter.mdx @@ -2,7 +2,7 @@ The list of known issues page is continuously updated as the systems evolve. Agora suggests you regularly upgrade to the latest version of the SDK, which includes new features, bug fixes and improvements. -- Flutter SDK v4.2.6 +- Flutter SDK v6.2.6 **AirPods Pro Bluetooth connection issue (iOS)** diff --git a/shared/voice-sdk/reference/release-notes/android.mdx b/shared/voice-sdk/reference/release-notes/android.mdx index 9cd499b6d..c5b6ab844 100644 --- a/shared/voice-sdk/reference/release-notes/android.mdx +++ b/shared/voice-sdk/reference/release-notes/android.mdx @@ -43,6 +43,19 @@ This release has optimized the implementation of some functions, which involved Since this release, `RouteBluetooth` is renamed to `AUDIO_ROUTE_BLUETOOTH_DEVICE_HFP`, representing a Bluetooth device using the HFP protocol. The `AUDIO_ROUTE_BLUETOOTH_DEVICE_A2DP`(10) is added to represent a Bluetooth device using the A2DP protocol. +1. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + +1. **Removing `IAgoraEventHandler` interface** + + This release deletes the `IAgoraEventHandler` interface class. All callback events that were previously managed under this class are now processed through the `IRtcEngineEventHandler` interface class. + #### New features 1. **Query device score** @@ -330,7 +343,7 @@ As of v4.2.0, you can use the following methods to open files with a URI startin **3. Channel media relay** -This release introduces `startOrUpdateChannleMediaRelay` and `startOrUpdateChannleMediaRelayEx`, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls. +This release introduces `startOrUpdateChannelMediaRelay` and `startOrUpdateChannelMediaRelayEx`, allowing for a simpler and smoother way to start and update media relay across channels. With these methods, developers can easily start the media relay across channels and update the target channels for media relay with a single method. Additionally, the internal interaction frequency has been optimized, effectively reducing latency in function calls. **4. Custom audio tracks** @@ -419,7 +432,7 @@ This release adds the `setHeadphoneEQParameters` method, which is used to adjust As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality. -> To enable this feature, contact sales-us@agora.io. +> To enable this feature, contact support@agora.io. **3. Multi-channel management** @@ -627,7 +640,7 @@ To make it easier for users to integrate the Agora SDK and reduce the SDK's pack **3. Brand-new AI Noise Suppression** -The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v3.7.x). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. To enable this feature, contact [sales-us@agora.io](mailto:sales-us@agora.io). +The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v3.7.x). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. To enable this feature, contact [support@agora.io](mailto:support@agora.io). **4. Ultra-high audio quality** @@ -635,7 +648,7 @@ To make the audio clearer and restore more details, this release adds the `ULTRA **5. Spatial audio** -This feature is in experimental status. To enable this feature, contact [sales-us@agora.io](mailto:sales-us@agora.io). Contact [technical support](mailto:support@agora.io) if needed. +This feature is in experimental status. To enable this feature, contact [support@agora.io](mailto:support@agora.io). Contact [technical support](mailto:support@agora.io) if needed. You can set the spatial audio for the remote user as following: diff --git a/shared/voice-sdk/reference/release-notes/electron.mdx b/shared/voice-sdk/reference/release-notes/electron.mdx index cd873382f..5ecb5892c 100644 --- a/shared/voice-sdk/reference/release-notes/electron.mdx +++ b/shared/voice-sdk/reference/release-notes/electron.mdx @@ -39,6 +39,15 @@ This release has optimized the implementation of some functions, involving renam | `startChannelMediaRelayEx`,`updateChannelMediaRelayEx` | `startOrUpdateChannelMediaRelayEx` | | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | +1. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + 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. @@ -399,7 +408,7 @@ This release adds the `setHeadphoneEQParameters` method, which is used to adjust As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality. -
    To enable this feature, contact sales@agora.io.
    +
    To enable this feature, contact support@agora.io.
    **8. Register extensions (Windows)** @@ -567,7 +576,7 @@ To make it easier for users to integrate the Agora SDK and reduce the SDK's pack **3.Brand-new AI Noise Suppression** The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. -> **_NOTE:_** To experience this feature, contact sales@agora.io. +> **_NOTE:_** To experience this feature, contact support@agora.io. **5. Ultra-high audio quality** diff --git a/shared/voice-sdk/reference/release-notes/flutter.mdx b/shared/voice-sdk/reference/release-notes/flutter.mdx index fc6b67282..cb7dd27a3 100644 --- a/shared/voice-sdk/reference/release-notes/flutter.mdx +++ b/shared/voice-sdk/reference/release-notes/flutter.mdx @@ -48,6 +48,14 @@ This release has optimized the implementation of some functions, involving renam 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. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. 1. **Audio loopback capturing (Windows, macOS)** @@ -508,7 +516,7 @@ This release adds the `setHeadphoneEQParameters` method, which is used to adjust As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality. -
    To enable this feature, contact sales@agora.io.
    +
    To enable this feature, contact support@agora.io.
    **9. Register extensions (Windows)** @@ -710,7 +718,7 @@ To make it easier for users to integrate the Agora SDK and reduce the SDK's pack 3. **Brand-new AI Noise Suppression** - The SDK supports a new version of Noise Suppression (versus the basic AI Noise Suppression in agora_rtc_engine: ^5.x). Compared to the previous Noise Suppression, the new AI Noise Suppression has better vocal fidelity, cleaner noise suppression, and add the Dereverberation capability. To enable this feature, contact [sales-us@agora.io](mailto:sales-us@agora.io). + The SDK supports a new version of Noise Suppression (versus the basic AI Noise Suppression in agora_rtc_engine: ^5.x). Compared to the previous Noise Suppression, the new AI Noise Suppression has better vocal fidelity, cleaner noise suppression, and add the Dereverberation capability. To enable this feature, contact [support@agora.io](mailto:support@agora.io). **4. Ultra-high audio quality** @@ -720,7 +728,7 @@ To make audios sound clearer and stay true to the original sound of audio files, **5. Spatial audio** -> **_NOTE:_** This feature is in experimental status. To enable this feature, contact sales-us@agora.io. Contact Technical Support if needed. +> **_NOTE:_** This feature is in experimental status. To enable this feature, contact support@agora.io. Contact Technical Support if needed. You can set the spatial audio for the remote user as following: diff --git a/shared/voice-sdk/reference/release-notes/ios.mdx b/shared/voice-sdk/reference/release-notes/ios.mdx index 1bf866e2a..33a32f649 100644 --- a/shared/voice-sdk/reference/release-notes/ios.mdx +++ b/shared/voice-sdk/reference/release-notes/ios.mdx @@ -35,7 +35,7 @@ This release has optimized the implementation of some functions, involving renam **Note:** For specific renaming of enumerations, please refer to [API changes](#api-changes). -2. **Channel media relay** +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: @@ -45,10 +45,19 @@ This release has optimized the implementation of some functions, involving renam |
    • `startChannelMediaRelayEx`
    • `updateChannelMediaRelayEx`
    | `startOrUpdateChannelMediaRelayEx` | | `didReceiveChannelMediaRelayEvent`| `channelMediaRelayStateDidChange` | -3. **Audio route** +1. **Audio route** Starting with this release, `AgoraAudioOutputRoutingBluetooth` in AgoraAudioOutputRouting is renamed to `AgoraAudioOutputRoutingBluetoothDeviceHfp`, representing a Bluetooth device using the HFP protocol. `AgoraAudioOutputRoutingBluetoothDeviceA2dp`(10) is added to represent the audio route to a Bluetooth device using the A2DP protocol. +1. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + #### New features 1. **Query Device Score** @@ -426,7 +435,7 @@ This release adds the `setHeadphoneEQParameters` method, which is used to adjust As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality. -> To enable this feature, contact sales-us@agora.io. +> To enable this feature, contact support@agora.io. **3. Multi-channel management** @@ -602,8 +611,8 @@ To make it easier for users to integrate the Agora SDK and reduce the SDK's pack **4. Brand-new AI Noise Suppression** -The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v3.7.x). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. To experience this feature, contact sales-us@agora.io. -The SDK supports a new version of Noise Suppression (in comparison to the basic Noise Suppression in v3.7.0). The new AI Noise Suppression has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. To experience this feature, contact sales-us@agora.io. +The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v3.7.x). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. To experience this feature, contact support@agora.io. +The SDK supports a new version of Noise Suppression (in comparison to the basic Noise Suppression in v3.7.0). The new AI Noise Suppression has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. To experience this feature, contact support@agora.io. **5. Ultra-high audio quality** @@ -611,7 +620,7 @@ To make the audio clearer and restore more details, this release adds the `Agora **6. Spatial audio** -This feature is in experimental status. To enable this feature, contact sales-us@agora.io. Contact [Technical Support](mailto:support@agora.io) if needed. +This feature is in experimental status. To enable this feature, contact support@agora.io. Contact [Technical Support](mailto:support@agora.io) if needed. You can set the spatial audio for the remote user as following: diff --git a/shared/voice-sdk/reference/release-notes/macos.mdx b/shared/voice-sdk/reference/release-notes/macos.mdx index 8bd7d32c6..2bcd2ce34 100644 --- a/shared/voice-sdk/reference/release-notes/macos.mdx +++ b/shared/voice-sdk/reference/release-notes/macos.mdx @@ -30,7 +30,7 @@ This release has optimized the implementation of some functions, involving renam **Note:** For specific renaming of enumerations, please refer to [API changes](#api-changes). -2. **Channel media relay** +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: @@ -40,11 +40,21 @@ This release has optimized the implementation of some functions, involving renam |
    • `startChannelMediaRelayEx`
    • `updateChannelMediaRelayEx`
    | `startOrUpdateChannelMediaRelayEx` | | `didReceiveChannelMediaRelayEvent` | `channelMediaRelayStateDidChange` | -3. **Audio loopback capturing** +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. +1. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + + #### New features 1. **Query device score** @@ -403,7 +413,7 @@ This release adds the `setHeadphoneEQParameters` method, which is used to adjust As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality. -> To enable this feature, contact sales-us@agora.io. +> To enable this feature, contact support@agora.io. **3. Multi-channel management** @@ -582,7 +592,7 @@ To make it easier for users to integrate the Agora SDK and reduce the SDK's pack **4. Brand-new AI Noise Suppression** -The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v3.7.x). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. To experience this feature, contact sales-us@agora.io. +The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v3.7.x). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. To experience this feature, contact support@agora.io. **5. Ultra-high audio quality** @@ -590,7 +600,7 @@ To make the audio clearer and restore more details, this release adds the `Agora **6. Spatial audio** -This feature is in experimental status. To enable this feature, contact sales-us@agora.io. Contact [Technical Support](mailto:support@agora.io) if needed. +This feature is in experimental status. To enable this feature, contact support@agora.io. Contact [Technical Support](mailto:support@agora.io) if needed. You can set the spatial audio for the remote user as following: diff --git a/shared/voice-sdk/reference/release-notes/react-native.mdx b/shared/voice-sdk/reference/release-notes/react-native.mdx index dd3e187d8..41bddec36 100644 --- a/shared/voice-sdk/reference/release-notes/react-native.mdx +++ b/shared/voice-sdk/reference/release-notes/react-native.mdx @@ -5,6 +5,16 @@ import KnownIssues from '@docs/shared/voice-sdk/reference/known-issues/react-nat +### v4.3.0-build.1 + +v4.3.0-build.1 was released on March 19, 2024. + +#### Issues fixed + +This release fixed the following issue: + +Directly calling `engine.release` to destroy the engine without prior call of `engine.unregisterEventHandler` to remove all callback events could lead to App crashes (Android). + ### v4.3.0 v4.3.0 was released on February 28, 2024. @@ -34,7 +44,7 @@ This release has optimized the implementation of some functions, involving renam **Note:** For specific renaming of enumerations, please refer to [API changes](#api-changes). -2. **Channel media relay** +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: @@ -44,10 +54,19 @@ This release has optimized the implementation of some functions, involving renam | `startChannelMediaRelayEx`,`updateChannelMediaRelayEx` | `startOrUpdateChannelMediaRelayEx` | | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | -3. **Audio route** +1. **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. +1. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + #### New features 1. **Query device score** @@ -428,7 +447,7 @@ This release adds the following features applicable to spatial audio effect scen As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality. -
    To enable this feature, contact sales@agora.io.
    +
    To enable this feature, contact support@agora.io.
    **7. Multi-channel management** @@ -572,7 +591,7 @@ To make it easier for users to integrate the Agora SDK and reduce the SDK's pack **3.Brand-new AI Noise Suppression** The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. -> **_NOTE:_** To experience this feature, contact sales@agora.io. +> **_NOTE:_** To experience this feature, contact support@agora.io. **4. Ultra-high audio quality** @@ -580,7 +599,7 @@ To make the audio clearer and restore more details, this release adds the `Ultra **5. Spatial audio** -> **_NOTE:_** This feature is in experimental status. To enable this feature, contact sales@agora.io. Contact technical support if needed. +> **_NOTE:_** This feature is in experimental status. To enable this feature, contact support@agora.io. Contact technical support if needed. You can set the spatial audio for the remote user as following: diff --git a/shared/voice-sdk/reference/release-notes/unity.mdx b/shared/voice-sdk/reference/release-notes/unity.mdx index d9a6cfacf..8b5d94843 100644 --- a/shared/voice-sdk/reference/release-notes/unity.mdx +++ b/shared/voice-sdk/reference/release-notes/unity.mdx @@ -34,7 +34,7 @@ This release has optimized the implementation of some functions, involving renam **Note:** For specific renaming of enumerations, please refer to [API changes](#api-changes). -2. **Channel media relay** +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: @@ -44,6 +44,25 @@ This release has optimized the implementation of some functions, involving renam |
    • `startChannelMediaRelayEx`
    • `updateChannelMediaRelayEx`
    | `startOrUpdateChannelMediaRelayEx` | | `onChannelMediaRelayEvent` | `onChannelMediaRelayStateChanged` | +1. **Audio route** + + Starting with this release, `routeBluetooth` in AudioRoute is renamed to `ROUTE_BLUETOOTH_DEVICE_HFP`, representing a Bluetooth device using the HFP protocol. `ROUTE_BLUETOOTH_DEVICE_A2DP`(10) is added to represent a Bluetooth device using the A2DP protocol + +1. **Audio loopback capturing (Windows, macOS)** + + - Before v4.3.0, if you called the DisableAudio method to disable the audio module, audio loopback capturing would 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. + +1. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + + #### New features 1. **Query device score** @@ -528,7 +547,7 @@ This release adds the `SetHeadphoneEQParameters` method, which is used to adjust As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality. -
    To enable this feature, contact sales-us@agora.io.
    +
    To enable this feature, contact support@agora.io.
    **9. Register extensions (Windows)** @@ -715,7 +734,7 @@ To make it easier for users to integrate the Agora SDK and reduce the SDK's pack **3. Brand-new AI Noise Suppression** -The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. To experience this feature, contact sales-us@agora.io. +The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. To experience this feature, contact support@agora.io. **5. Ultra-high audio quality** @@ -723,7 +742,7 @@ To make the audio clearer and restore more details, this release adds the `ULTRA **6. Spatial audio** -> **_NOTE:_** This feature is in experimental status. To enable this feature, contact sales-us@agora.io. Contact [Technical Support](mailto:support@agora.io) if needed. +> **_NOTE:_** This feature is in experimental status. To enable this feature, contact support@agora.io. Contact [Technical Support](mailto:support@agora.io) if needed. You can set the spatial audio for the remote user as following: diff --git a/shared/voice-sdk/reference/release-notes/windows.mdx b/shared/voice-sdk/reference/release-notes/windows.mdx index 3b42f510a..b35884a21 100644 --- a/shared/voice-sdk/reference/release-notes/windows.mdx +++ b/shared/voice-sdk/reference/release-notes/windows.mdx @@ -46,6 +46,15 @@ This release has optimized the implementation of some functions, involving renam - 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. +1. **Log encryption behavior changes** + + For security and performance reasons, as of this release, the SDK encrypts logs and no longer supports printing plaintext logs via the console. + + Refer to the following solutions for different needs: + + - If you need to know the API call status, please check the API logs and print the SDK callback logs yourself. + - For any other special requirements, please contact [technical support](mailto:support@agora.io) and provide the corresponding encrypted logs. + #### New features 1. **Query Device Score** @@ -424,7 +433,7 @@ This release adds the `setHeadphoneEQParameters` method, which is used to adjust As of this release, the SDK supports MPUDP protocol, which enables you to connect and use multiple paths to maximize the use of channel resources based on the UDP protocol. You can use different physical NICs on both mobile and desktop and aggregate them to effectively combat network jitter and improve transmission quality. -> To enable this feature, contact sales-us@agora.io. +> To enable this feature, contact support@agora.io. **3. Register extensions** @@ -665,7 +674,7 @@ To make it easier for users to integrate the Agora SDK and reduce the SDK's pack **3.Brand-new AI Noise Suppression** The SDK supports a new version of AI noise reduction (in comparison to the basic AI noise reduction in v3.7.x). The new AI noise reduction has better vocal fidelity, cleaner noise suppression, and adds a dereverberation option. -
    To experience this feature, contact sales@agora.io.
    +
    To experience this feature, contact support@agora.io.
    **4. Ultra-high audio quality** @@ -673,7 +682,7 @@ To make the audio clearer and restore more details, this release adds the `ULTRA **5. Spatial audio** -
    This feature is in experimental status. To enable this feature, contact sales@agora.io. Contact technical support if needed.
    +
    This feature is in experimental status. To enable this feature, contact support@agora.io. Contact technical support if needed.
    You can set the spatial audio for the remote user as following: diff --git a/signaling/reference/limitations.mdx b/signaling/reference/limitations.mdx index 3d0bf2b4b..3b9c6a3c7 100644 --- a/signaling/reference/limitations.mdx +++ b/signaling/reference/limitations.mdx @@ -13,16 +13,5 @@ This page provides a brief overview of the restrictions of the Agora -## Miscellaneous -- The number of RESTful API requests per second per App ID are limited to 500. To extend the limit, contact support@agora.io. -- The max number of concurrent users is 50,000. To extend the limit, contact support@agora.io. -- The max number of daily active users is 500,000. To extend the limit, contact support@agora.io. -- The max number of users in a single channel is 50,000. To extend the limit, contact support@agora.io. -- Notifications of a member joining or leaving the channel are automatically disabled when the number of channel members exceeds 512. -- The current version supports querying the online status of up to 256 users. -- You can subscribe to the online status of up to 512 users in one method call, and you can subscribe to the online status of up to 512 users. -- Attribute settings in one user attribute operation must not exceed 16 KB in size. Attribute settings in one channel attribute operation must not exceed 32 KB in size. Each attribute (key/value pair) must not exceed 8 KB in size. You must not set over 32 key/value pairs for one attribute operation. -- Each file or image you upload to the Agora server stays for seven days. The corresponding media ID also stays valid for seven days. -- Each file or image to upload must not exceed 30 MB in size. -- Each client instance can only support up to nine upload and download processes at the same time. +