JSON:
{"code":0}` to the response.{ "EventGroupId": 4, "EventType": 401, "CallbackTs": 1622186275913, "EventInfo": { "RoomId": "xx", "RoomType": 1, "EventTsMs": 1622186275913, "UserId": "xx", "TaskId": "xx", "Payload": { "Url": "rtmp://tencent-url/xxxx" "Status": 2 //indicates that the CDNs push in progress } } }
Field | Value |
Content-Type | application/json |
Sign | The signature value. |
SdkAppId | The SDK application ID. |
Field | Type | Description |
EventGroupId | Number | The event group ID, mix relay event fixed as 4. |
EventType | Number | The type of the callback event. |
CallbackTs | Number | The Unix timestamp (ms) of callback sending. |
EventInfo | JSON Object |
Field | Value | Description |
EVENT_GROUP_CLOUD_PUBLISH | 4 | Relay event group |
Field | Value | Description |
EVENT_TYPE_CLOUD_PUBLISH_CDN_STATUS | 401 | Cloud relay CDN status callback |
Field | Type | Description |
RoomId | String/Number | Room ID (Type consistent with client-side room ID type) |
RoomType | Number | 0 represents numeric room ID, 1 represents string room ID |
EventMsTs | Number | Event's Unix timestamp, unit in milliseconds |
UserId | String | User ID of the companion robot specified when initiating the task (AgentParams.UserId) |
TaskId | Number | Task ID |
JSON Object | Learn more about the event |
Field | Value | Description |
Url | String | Push destination URL |
Status | Number | |
ErrorCode | Number | Error code |
ErrorMsg | String | Error message |
Field | Value | Description | Callback Frequency |
PUBLISH_CDN_STREAM_STATE_IDLE | 0 | Push not started or ended | Callback only once |
PUBLISH_CDN_STREAM_STATE_CONNECTING | 1 | Connecting TRTC Server and CDN Server | Callback every 5 seconds, no more callbacks after 60 seconds timeout |
PUBLISH_CDN_STREAM_STATE_RUNNING | 2 | CDNs push in progress | Callback only once |
PUBLISH_CDN_STREAM_STATE_RECOVERING | 3 | TRTC server and CDN server push interrupted, recovering | Callback every 5 seconds, no more callbacks after 60 seconds timeout |
PUBLISH_CDN_STREAM_STATE_FAILURE | 4 | TRTC server and CDN server push interrupted, and recovery or connection timeout | Callback only once |
PUBLISH_CDN_STREAM_STATE_DISCONNECTING | 5 | Disconnecting TRTC Server and CDN Server | Callback only once |
Status | Processing Method |
PUBLISH_CDN_STREAM_STATE_IDLE | Indicates URL removal successful, no need to handle. |
PUBLISH_CDN_STREAM_STATE_CONNECTING | Indicates URL is connecting, callback every 5s, until connected successfully with PUBLISH_CDN_STREAM_STATE_RUNNING , or after 60s callback PUBLISH_CDN_STREAM_STATE_FAILURE . You can replace the problematic URL when receiving PUBLISH_CDN_STREAM_STATE_FAILURE , and call UpdatePublishCdnStream to update Publish parameters.If your business is time-sensitive, you can replace the problematic URL after receiving 2 or more PUBLISH_CDN_STREAM_STATE_CONNECTING callbacks, and call UpdatePublishCdnStream to update Publish parameters. |
PUBLISH_CDN_STREAM_STATE_RUNNING | Indicates URL push successful, no need to handle. |
PUBLISH_CDN_STREAM_STATE_RECOVERING | Indicates an interruption occurred during the push process, reconnecting, callback every 5s, until reconnected successfully with PUBLISH_CDN_STREAM_STATE_RUNNING , or after 60s callback PUBLISH_CDN_STREAM_STATE_FAILURE . Usually caused by network jitter, no need to handle.If PUBLISH_CDN_STREAM_STATE_RECOVERING and PUBLISH_CDN_STREAM_STATE_RUNNING appear alternately in a short time, you need to check if there are multiple tasks using the same push URL. |
PUBLISH_CDN_STREAM_STATE_FAILURE | Indicates push URL connection failed or failed to recover push within 60s, you can replace the problematic URL and call UpdatePublishCdnStream to update Publish parameters. |
PUBLISH_CDN_STREAM_STATE_DISCONNECTING | Indicates that the push URL is being removed, and after removal successful, it will callback PUBLISH_CDN_STREAM_STATE_IDLE, no need to handle. |
PUBLISH_CDN_STREAM_STATE_CONNECTING
-> PUBLISH_CDN_STREAM_STATE_RUNNING
PUBLISH_CDN_STREAM_STATE_RUNNING
-> PUBLISH_CDN_STREAM_STATE_DISCONNECTING
-> PUBLISH_CDN_STREAM_STATE_IDLE
PUBLISH_CDN_STREAM_STATE_RUNNING
-> PUBLISH_CDN_STREAM_STATE_RECOVERING
-> PUBLISH_CDN_STREAM_STATE_RUNNING
PUBLISH_CDN_STREAM_STATE_RUNNING
-> PUBLISH_CDN_STREAM_STATE_RECOVERING
-> PUBLISH_CDN_STREAM_STATE_FAILURE
->PUBLISH_CDN_STREAM_STATE_IDLE
// In the formula below, `key` is the key used to calculate a signature.Sign = base64(hmacsha256(key, body))
body
is the original packet body of the callback request you receive. Do not make any modifications. Below is an example.body="{\\n\\t\\"EventGroupId\\":\\t1,\\n\\t\\"EventType\\":\\t103,\\n\\t\\"CallbackTs\\":\\t1615554923704,\\n\\t\\"EventInfo\\":\\t{\\n\\t\\t\\"RoomId\\":\\t12345,\\n\\t\\t\\"EventTs\\":\\t1608441737,\\n\\t\\t\\"UserId\\":\\t\\"test\\",\\n\\t\\t\\"UniqueId\\":\\t1615554922656,\\n\\t\\t\\"Role\\":\\t20,\\n\\t\\t\\"Reason\\":\\t1\\n\\t}\\n}"
import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;import java.util.Base64;//# Function: Third-party callback sign verification//# Parameters://# key: The key configured in the console//# body: The body returned by the Tencent Cloud callback//# sign: The sign value returned by the Tencent Cloud callback//# Return Value://# Status: OK indicates that the verification has passed, FAIL indicates that the verification has failed, and the specific reason can be found in the Info//# Info: Success/Failure informationpublic class checkSign {public static String getResultSign(String key, String body) throws Exception {Mac hmacSha256 = Mac.getInstance("HmacSHA256");SecretKeySpec secret_key = new SecretKeySpec(key.getBytes(), "HmacSHA256");hmacSha256.init(secret_key);return Base64.getEncoder().encodeToString(hmacSha256.doFinal(body.getBytes()));}public static void main(String[] args) throws Exception {String key = "123654";String body = "{\\n" + "\\t\\"EventGroupId\\":\\t2,\\n" + "\\t\\"EventType\\":\\t204,\\n" + "\\t\\"CallbackTs\\":\\t1664209748188,\\n" + "\\t\\"EventInfo\\":\\t{\\n" + "\\t\\t\\"RoomId\\":\\t8489,\\n" + "\\t\\t\\"EventTs\\":\\t1664209748,\\n" + "\\t\\t\\"EventMsTs\\":\\t1664209748180,\\n" + "\\t\\t\\"UserId\\":\\t\\"user_85034614\\",\\n" + "\\t\\t\\"Reason\\":\\t0\\n" + "\\t}\\n" + "}";String Sign = "kkoFeO3Oh2ZHnjtg8tEAQhtXK16/KI05W3BQff8IvGA=";String resultSign = getResultSign(key, body);if (resultSign.equals(Sign)) {System.out.println("{'Status': 'OK', 'Info': 'validation passed'}");} else {System.out.println("{'Status': 'FAIL', 'Info': 'validation failed'}");}}}
# -*- coding: utf8 -*-import hmacimport base64from hashlib import sha256# Function: Third-party callback sign verification# Parameters:# key: The key configured in the console# body: The body returned by the Tencent Cloud callback# sign: The sign value returned by the Tencent Cloud callback# Return Value:# Status: OK indicates that the verification has passed, FAIL indicates that the verification has failed, and the specific reason can be found in the Info# Info: Success/Failure informationdef checkSign(key, body, sign):temp_dict = {}computSign = base64.b64encode(hmac.new(key.encode('utf-8'), body.encode('utf-8'), digestmod=sha256).digest()).decode('utf-8')print(computSign)if computSign == sign:temp_dict['Status'] = 'OK'temp_dict['Info'] = 'validation passed'return temp_dictelse:temp_dict['Status'] = 'FAIL'temp_dict['Info'] = 'validation failed'return temp_dictif __name__ == '__main__':key = '123654'body = "{\\n" + "\\t\\"EventGroupId\\":\\t2,\\n" + "\\t\\"EventType\\":\\t204,\\n" + "\\t\\"CallbackTs\\":\\t1664209748188,\\n" + "\\t\\"EventInfo\\":\\t{\\n" + "\\t\\t\\"RoomId\\":\\t8489,\\n" + "\\t\\t\\"EventTs\\":\\t1664209748,\\n" + "\\t\\t\\"EventMsTs\\":\\t1664209748180,\\n" + "\\t\\t\\"UserId\\":\\t\\"user_85034614\\",\\n" + "\\t\\t\\"Reason\\":\\t0\\n" + "\\t}\\n" + "}"sign = 'kkoFeO3Oh2ZHnjtg8tEAQhtXK16/KI05W3BQff8IvGA='result = checkSign(key, body, sign)print(result)
<?phpclass TlsEventSig {private $key = false;private $body = false;public function __construct( $key, $body ) {$this->key = $key;$this->body = $body;}private function __hmacsha256() {$hash = hash_hmac( 'sha256', $this->body, $this->key, true );return base64_encode( $hash);}public function genEventSig() {return $this->__hmacsha256();}}$key="789";$data="{\\n\\t\\"EventGroupId\\":\\t1,\\n\\t\\"EventType\\":\\t101,\\n\\t\\"CallbackTs\\":\\t1608086882372,\\n\\t\\"EventInfo\\":\\t{\\n\\t\\t\\"RoomId\\":\\t20222,\\n\\t\\t\\"EventTs\\":\\t1608086882,\\n\\t\\t\\"UserId\\":\\t\\"222222_phone\\"\\n\\t}\\n}";$api = new TlsEventSig($key, $data);echo $api->genEventSig();
package mainimport "fmt"import ("crypto/hmac""crypto/sha256""encoding/base64")func main () {var data = "{\\n\\t\\"EventGroupId\\":\\t1,\\n\\t\\"EventType\\":\\t101,\\n\\t\\"CallbackTs\\":\\t1608086882372,\\n\\t\\"EventInfo\\":\\t{\\n\\t\\t\\"RoomId\\":\\t20222,\\n\\t\\t\\"EventTs\\":\\t1608086882,\\n\\t\\t\\"UserId\\":\\t\\"222222_phone\\"\\n\\t}\\n}"var key = "789"//JSRUN engine 2.0, supporting up to 30 types of languages for online running, with full simulation of online interaction for input and output.fmt.Println(hmacsha256(data,key))}func hmacsha256(data string, key string) string {h := hmac.New(sha256.New, []byte(key))h.Write([]byte(data))return base64.StdEncoding.EncodeToString(h.Sum(nil))}
Was this page helpful?