チャンネルまたはユーザーイベントをサブスクライブするためのコールバックを作成します。
操作説明
今すぐお試しください
テスト
RAM 認証
|
アクション |
アクセスレベル |
リソースタイプ |
条件キー |
依存アクション |
|
live:CreateEventSub |
*Rtc
|
なし | なし |
リクエストパラメーター
|
パラメーター |
型 |
必須 / 任意 |
説明 |
例 |
| AppId |
string |
必須 |
アプリケーション ID。 |
9qb1**** |
| ChannelId |
string |
任意 |
チャネル ID。ListEventSub 操作を呼び出して、チャネル ID をクエリできます。 説明
|
123333 |
| Users |
array |
任意 |
イベントをサブスクライブするユーザー。このパラメーターを空のままにすると、ストリーマーや視聴者を含む、チャンネル内のすべてのユーザーのイベントがサブスクライブされます。このパラメーターは次のフォーマットで指定します: |
|
|
string |
任意 |
ユーザー ID。 |
user1 |
|
| Events |
array |
必須 |
サブスクライブするイベント。 |
|
|
string |
必須 |
イベントのタイプ。有効な値:
|
ChannelEvent |
|
| CallbackUrl |
string |
必須 |
コールバック URL。コールバック URL に送信されるメッセージの内容の詳細については、このトピックの「コールバック」セクションをご参照ください。 |
http://****.com/callback |
コールバック
コールバックメッセージは、CallbackUrl パラメーターで指定されたコールバック URL に送信されます。次のサンプルコードに例を示します:
リクエスト:
POST /callbackURL
本文
application/json
{
"MsgId": "メッセージ ID",
"MsgTimestamp": 12312324, // メッセージが送信されたときの UNIX タイムスタンプ。
"SubscribeID": "サブスクリプション ID",
"AppId":"", // メッセージが生成されたアプリケーションの ID。
"ChannelID":"", // メッセージが生成されたチャンネルの ID。
"Contents": [
{
"Event": "UserEvent",// サブスクライブされたイベントのタイプ。この場合、タイプはユーザーイベントです。
"UserEvent": {
"UserId": "80331631628*****", // ユーザー ID。
"EventTag": "Publish", // イベント。有効な値:Join、Leave、Publish、Unpublish、Roleupdate。
"SessionId": "0dr15rrnhkz0jnvz6o8sxo0*****", // イベントが生成されたセッションの ID。
"Timestamp": 1609854786, // イベントが発生したときの UNIX タイムスタンプ。
"Reason": 1, // チャンネルへの参加または退出の理由。このパラメーターは、イベントが Join イベントの場合にのみ利用可能です。
"Role": 1, // ユーザーのロール。ロールにはストリーマーと視聴者が含まれます。
"CurrentMedias":"1,2,3"// ユーザーによってアップストリーミングされたストリームのタイプ。
}
},
{
"Event": "ChannelEvent",// サブスクライブされたイベントのタイプ。この場合、タイプはチャンネルイベントです。
"ChannelEvent": {
"ChannelId": "88888****",
"EventTag": "Open", // イベント。有効な値:Open と Close。
"Timestamp": 1609854530 // イベントが発生したときの UNIX タイムスタンプ。
}
}
]
}
応答
HTTP STATUS 200
ユーザーイベントのパラメーター
| パラメーター | タイプ | 必須 | 説明 |
| UserId | string | はい | ユーザー ID。 |
| SessionId | string | はい | セッション ID。 |
| EventTag | string | はい | イベント。有効な値:Join:ユーザーがチャンネルに参加しました。Leave:ユーザーがチャンネルから退出しました。PublishVideo:ユーザーがビデオストリームをアップストリーミングしました。PublishAudio:ユーザーがオーディオストリームをアップストリーミングしました。PublishScreen:ユーザーが画面共有のためのストリームをアップストリーミングしました。UnpublishVideo:ユーザーがビデオストリームのアップストリーミングを停止しました。UnpublishAudio:ユーザーがオーディオストリームのアップストリーミングを停止しました。UnpublishScreen:ユーザーが画面共有のためのストリームのアップストリーミングを停止しました。Roleupdate:ユーザーのロールが変更されました。 |
| Timestamp | number | はい | イベントが発生したときのタイムスタンプ。 |
| Reason | integer | はい | チャンネルへの参加または退出の理由。このパラメーターは、イベントが Join イベントの場合にのみ利用可能です。有効な値:1:ユーザーが必要に応じてチャンネルに参加または退出しました。2:ユーザーがすでにチャンネルにいるときに再接続して再度チャンネルに参加しました。3:ユーザーがチャンネル間でストリームリレーを実行しました。4:ユーザーがタイムアウトによりチャンネルから退出しました。5:ユーザーが新しいセッションを開始し、現在のセッションで強制的にオフラインになりました。6:ユーザーがチャンネルからキックアウトされました。7:チャンネルが閉じられました。 |
| Role | integer | はい | ユーザーのロール。有効な値:1:ストリーマー、2:視聴者 |
| CurrentMedias | integer | はい | ストリームのタイプ。有効な値:1:オーディオ、2:ビデオ、3:画面共有 |
チャンネルイベントのパラメーター
| パラメーター | タイプ | 必須 | 説明 |
| EventTag | string | はい | イベント。有効な値:Open:チャンネルが開かれました。Close:チャンネルが閉じられました。 |
| Timestamp | number | はい | イベントが発生したときのタイムスタンプ。 |
コールバック認証
デフォルトでは、コールバック認証が有効になっています。次の認証ロジックが適用されます:
ApsaraVideo Live がコールバックリクエストを開始すると、HTTP または HTTPS リクエストに Ali-Rtc-Timestamp および Ali-Rtc-Signature ヘッダーが含まれ、コールバックメッセージ受信サーバーが署名を認証できるようになります。Ali-Rtc-Signature の値は、次の数式に基づいて計算されます:Ali-Rtc-Signature=MD5SUM(MD5CONTENT)。この数式では、MD5CONTENT は「コールバックドメイン名|Ali-Rtc-Timestamp の値|認証キー」というフォーマットの文字列です。コールバックドメイン名は、コールバック URL 内のドメイン名です。認証キーは、アプリケーションの AppKey です。
コールバックメッセージを受信した後、コールバックメッセージ受信サーバーは、コールバックドメイン名、Ali-Rtc-Timestamp ヘッダーの値、および認証キーを前述のフォーマットで連結します。サーバーは文字列の MD5 値を計算して暗号化された文字列を取得します。次に、サーバーは暗号化された文字列を、Real-Time Communication (RTC) によって開始された HTTP または HTTPS リクエストの Ali-Rtc-Signature ヘッダーの値と比較します。2 つの値が異なる場合、リクエストは無効です。
コールバックリトライ
Alibaba Cloud がコールバックリクエストを開始した後、ご利用のビジネスサーバーから HTTP ステータスコード 200 が返された場合にのみ、コールバックは成功したと見なされます。コールバックが失敗した場合、ApsaraVideo Live は 1 秒、2 秒、5 秒、10 秒、60 秒、120 秒、300 秒の間隔でコールバックリクエストを 7 回再送します。コールバックリクエストが再送されるたびに、コールバックレコードが生成されます。
例外処理
チャンネルに参加した、またはアップストリーミングを開始したクライアントと Alibaba Cloud サーバーとの間には、キープアライブメカニズムが実装されています。サーバーがクライアントから 90 秒間ハートビート情報を受信しない場合、サーバーはクライアントがタイムアウトし、ユーザーがチャンネルから退出したとみなし、コールバックをトリガーします。ハートビートの検出失敗は、ネットワーク切断が発生した場合や、アプリケーションが異常終了した場合に発生します。
レスポンスフィールド
|
フィールド |
型 |
説明 |
例 |
|
object |
応答のスキーマ |
||
| RequestId |
string |
リクエスト ID。 |
760bad53276431c499e30dc36f6b**** |
| SubscribeId |
string |
サブスクリプション ID。 |
ad53276431c**** |
例
成功レスポンス
JSONJSON
{
"RequestId": "760bad53276431c499e30dc36f6b****",
"SubscribeId": "ad53276431c****"
}
エラーコード
|
HTTP ステータスコード |
エラーコード |
エラーメッセージ |
説明 |
|---|---|---|---|
| 400 | InputInvalid | %s. | |
| 400 | QuotaLimitError | %s. | |
| 400 | ErrorInvalidCallBackUrl | %s. | |
| 500 | ServerError | %s. | |
| 403 | NoAuth | %s. | |
| 404 | ResourceNotExist | %s. |
完全なリストについては、「エラーコード」をご参照ください。
変更履歴
完全なリストについては、「変更履歴」をご参照ください。