ARTC チャンネルの音声およびビデオストリームを録画し、録画ファイルを OSS または ApsaraVideo VOD に保存して、再生、アーカイブ、またはコンプライアンス要件への対応に利用します。
機能概要
クラウド録画は、API ベースのタスクにより ARTC チャンネルの音声およびビデオストリームを録画します。主な機能は次のとおりです:
-
多彩な録画モード:各ユーザーを個別に録画する (単独録画) か、複数のユーザーを 1 つのファイルにまとめる (複合録画) ことができます。
-
柔軟なサブスクリプション:チャンネル内の特定のユーザーまたはストリームタイプ (カメラまたは画面共有) を録画できます。
-
カスタマイズ可能な出力:カスタムの複合レイアウト、背景画像、および出力形式 (MP4、MP3、HLS) に対応します。
-
信頼性の高いクラウドストレージ:録画ファイルを OSS または ApsaraVideo VOD に自動的にアップロードします。
事前準備
-
必須サービスのアクティベート:ARTC をアクティベートします。ストレージ方法に応じて、以下の対応が必要です:
-
OSS への保存:OSS をアクティベートし、バケットを作成します。ストレージ料金が発生します。ストレージ料金をご参照ください。
説明サービス権限の付与:ARTC は OSS バケットへの書き込み権限を必要とします。この権限はアクティベート時に自動的に付与されます。取り消された場合は、クラウドリソースアクセス権限の承認をクリックして復元してください。
-
VOD への保存:ApsaraVideo VOD をアクティベートし、ストレージバケットを管理します。ストレージ料金が発生します。基本サービスの課金をご参照ください。
重要-
リージョンの一貫性:ストレージバケットと API エンドポイントは、同じリージョンにある必要があります。
-
録画ファイルの生成:録画が終了すると、ファイルは API リクエストで指定されたバケットに保存されます。
-
-
課金について:
-
クラウド録画はデフォルトで有効になっており、別途アクティベートする必要はありません。
-
クラウド録画は有料機能です。クラウド録画料金をご参照ください。
-
基本概念
録画モード
ユースケースに基づいて録画モードを選択してください。
-
単独録画
各ユーザーの音声とビデオを個別のファイルに録画します。個別の分析や後処理に最適です。
-
デフォルトでは、録画パラメーターは元のストリームと一致します。
-
ストリームが中断された場合、システムは無音、黒画面、または最後のフレームで補完して、連続性を維持します。
-
-
複合録画
複数のユーザーの音声とビデオを 1 つのファイルにミックスします。会議やオンライン教育など、複数人が参加するシナリオに適しています。
-
出力ビデオの解像度、ビットレート、フレームレートをカスタマイズできます。
-
カスタムのビデオレイアウト (最大 17 ペイン) とキャンバスの背景画像に対応します。
-
ユーザーのストリームが中断された場合、そのペインにはプリセットの背景画像または黒画面が表示されます。
-
録画タスクのライフサイクル
-
タスクはステータスに関係なく、実行時間が 72 時間 (最大ライフサイクル) に達すると自動的に停止します。
-
停止したタスクは停止コールバックをトリガーします。これを使用してタスクが終了したことを確認し、録画ファイルをクエリしてください。
-
タスクが
MaxIdleTimeを超えてアイドル状態が続いた場合、自動的に停止します。有効範囲は 10~14,400 秒 (4 時間) です。デフォルト値は 300 秒です。-
複合モードでは、サブスクライブされているすべてのストリームが公開を停止した場合、タスクはアイドル状態になります。
-
単独モードでは、各ストリームは個別に追跡されます。ストリームは、
MaxIdleTimeが経過すると録画を停止します。タスクは、サブスクライブされているすべてのストリームがタイムアウトした後にのみ停止します。
-
ファイルの生成と保存
録画ファイル形式
-
音声のみ:MP3 および AAC 形式をサポートします。
-
音声とビデオ:MP4 および HLS 形式をサポートします。
-
リクエストで指定されていない場合でも、HLS ファイルは常に生成されます。
-
追加のファイル形式ごとに、別途料金が発生します。
ファイル命名規則
録画ファイルは、指定された OSS または ApsaraVideo VOD パス内の TaskId ディレクトリに保存されます。プリセットされた変数を使用してファイル名をカスタマイズできます。
ファイル名変数:
|
パラメーター |
説明 |
|
|
アプリケーション ID です。 |
|
|
チャンネル ID です。 |
|
|
ユーザー ID です。単独録画でのみ有効です。 |
|
|
録画モードです。 0:単独録画、 1:複合録画。 |
|
|
ストリームタイプです。 0:音声およびビデオ、 1:音声。 |
|
|
ビデオソースです。 C:カメラ、 S:画面共有。 |
|
|
録画の UTC 開始時間 (ミリ秒) です。 |
|
|
HLS スライスのインデックス番号です。 |
デフォルトのファイル名:
-
単独録画:
-
HLS 形式:
{AppId}_{ChannelId}_{UserId}_{StartTime}_{Sequence} -
その他の形式:
{AppId}_{ChannelId}_{UserId}_{StartTime}
-
-
複合録画:
-
HLS 形式:
{AppId}_{ChannelId}_{StartTime}_{Sequence} -
その他の形式:
{AppId}_{ChannelId}_{StartTime}
-
-
同じ
UserIdに対して異なるStreamTypeまたはSourceTypeの値をサブスクライブする場合、デフォルトのファイル名では{UserId}の後に{SourceType}が追加されます。 -
ファイル名が
filenameの場合、最終的なパスはTaskId/filename.M3U8になります。TaskIdはタスク開始時に生成され、ストレージパスの先頭に自動的に追加されます。
ファイル分割
ファイル分割は、録画を複数のファイルに分割します。1 ファイルあたりの最大録画時間は MaxFileDuration で設定します。範囲は 180~7,200 秒 (デフォルト:7,200 秒/2 時間) です。
操作手順
クラウド録画のワークフローは、完全に API 駆動型です。以下の手順では、パラメーターの例を交えながら主要な操作について説明します。
ステップ1:録画タスクの開始
ARTCクラウド録画タスクの開始 API を呼び出します。リクエストでサブスクリプション、録画、およびストレージのパラメーターを設定します。
主要パラメーター:
-
録画モードの指定:単独 (
RecordMode:0) または複合 (RecordMode:1) を選択してください。 -
サブスクリプション対象の定義:
SubscribeParamsで、録画するUserIdとStreamTypeの値をリストアップしてください。 -
出力形式の設定:
RecordParamsで、音声のみ (StreamType:1) または音声とビデオ (StreamType:0) を設定してください。 -
ストレージの設定:
StorageParamsで、OSS または ApsaraVideo VOD を指定し、バケットとエンドポイントを提供してください。
シナリオ例
音声のみの単独録画
シナリオ:チャンネル myRoom には、userA、userB、userC の 3 人のユーザーがいます。userA と userB の音声ストリームを個別に録画し、userC は録画しません。また、M3U8 と MP3 の両方のファイルを生成します。
録画結果:録画ファイルは、指定された Object Storage Service (OSS) バケット my-bucket に保存されます。M3U8 形式のファイルは hls/{TaskId} パスに、MP3 形式のファイルは mp3/{TaskId} パスに保存されます。
パラメーター例:
{
"AppId": "my-app-id", // ストリーミングに使用するAppId
"ChannelId": "myRoom", // 録画するチャンネル
"SubscribeParams": {
"SubscribeUserIdList": [
{
"UserId": "userA", // 録画対象のユーザー
"StreamType": 1 // 音声のみのストリームをサブスクライブ
},
{
"UserId": "userB", // 録画対象のユーザー
"StreamType": 1 // 音声のみのストリームをサブスクライブ
}
]
},
"RecordParams": {
"RecordMode": 0, // 単独録画モードを指定
"StreamType": 1, // 音声のみの出力形式を指定
"MaxFileDuration": 180 // ファイル分割の期間を 180 秒 (3 分) に設定
},
"StorageParams": {
"StorageType": 1, // OSSへの保存を指定
"FileInfo": [ // M3U8とMP3ファイルを生成し、それぞれ "hls" と "mp3" パス配下に保存
{
"Format": "HLS",
"FilePathPrefix": [
"hls"
]
},
{
"Format": "MP3",
"FilePathPrefix": [
"mp3"
]
}
],
"OSSParams": {
"OSSEndpoint": "oss-cn-shanghai.aliyuncs.com",
"OSSBucket": "my-bucket"
}
},
"NotifyUrl": "http://mytest/callback", // オプション:コールバックメッセージを受信するURL
"NotifyAuthKey": "12345678abcdefghikj" // オプション:コールバックメッセージの認証キー
}
音声とビデオの単独録画
シナリオ:チャンネル myRoom には、userA、userB、userC の 3 人のユーザーがいます。userA と userB の音声およびビデオストリームを個別に録画し、userC は録画しません。また、M3U8 と MP4 の両方のファイルを生成します。
録画結果:ファイルは、指定された OSS バケット my-bucket に保存されます。M3U8 ファイルは hls/{TaskId} パスに、MP4 ファイルは mp4/{TaskId} パスに保存されます。
パラメーター例:
{
"AppId": "my-app-id", // ストリーミングに使用するAppId
"ChannelId": "myRoom", // 録画するチャンネル
"SubscribeParams": {
"SubscribeUserIdList": [
{
"UserId": "userA", // 録画対象のユーザー
"StreamType": 0 // 音声とビデオのストリームをサブスクライブ
},
{
"UserId": "userB", // 録画対象のユーザー
"StreamType": 0 // 音声とビデオのストリームをサブスクライブ
}
]
},
"RecordParams": {
"RecordMode": 0, // 単独録画モードを指定
"StreamType": 0, // 音声とビデオの出力形式を指定
"MaxFileDuration": 180 // ファイル分割の期間を 180 秒 (3 分) に設定
},
"StorageParams": {
"StorageType": 1, // OSSへの保存を指定
"FileInfo": [ // M3U8とMP4ファイルを生成し、それぞれ "hls" と "mp4" パス配下に保存
{
"Format": "HLS",
"FilePathPrefix": [
"hls"
]
},
{
"Format": "MP4",
"FilePathPrefix": [
"mp4"
]
}
],
"OSSParams": {
"OSSEndpoint": "oss-cn-shanghai.aliyuncs.com",
"OSSBucket": "my-bucket"
}
},
"NotifyUrl": "http://mytest/callback", // オプション:コールバックメッセージを受信するURL
"NotifyAuthKey": "12345678abcdefghikj" // オプション:コールバックメッセージの認証キー
}
音声のみの複合録画
シナリオ:チャンネル myRoom には、userA、userB、userC の 3 人のユーザーがいます。userA と userB の会話を 1 つの複合ストリームとして録画し、userC は録画しません。また、M3U8 と MP3 の両方のファイルを生成します。
録画結果:ファイルは、指定された OSS バケット my-bucket に保存されます。M3U8 ファイルは hls/{TaskId} パスに、MP3 ファイルは mp3/{TaskId} パスに保存されます。
パラメーター例:
{
"AppId": "my-app-id", // ストリーミングに使用するAppId
"ChannelId": "myRoom", // 録画するチャンネル
"SubscribeParams": {
"SubscribeUserIdList": [
{
"UserId": "userA", // 録画対象のユーザー
"StreamType": 1 // 音声のみのストリームをサブスクライブ
},
{
"UserId": "userB", // 録画対象のユーザー
"StreamType": 1 // 音声のみのストリームをサブスクライブ
}
]
},
"RecordParams": {
"RecordMode": 1, // 複合録画モードを指定
"StreamType": 1, // 音声のみの出力形式を指定
"MaxFileDuration": 180 // ファイル分割の期間を 180 秒 (3 分) に設定
},
"StorageParams": {
"StorageType": 1, // OSSへの保存を指定
"FileInfo": [ // M3U8とMP3ファイルを生成し、それぞれ "hls" と "mp3" パス配下に保存
{
"Format": "HLS",
"FilePathPrefix": [
"hls"
]
},
{
"Format": "MP3",
"FilePathPrefix": [
"mp3"
]
}
],
"OSSParams": {
"OSSEndpoint": "oss-cn-shanghai.aliyuncs.com",
"OSSBucket": "my-bucket"
}
},
"MixTranscodeParams": {
"AudioBitrate": 128, // 音声ビットレート
"AudioChannels": 2, // 音声チャンネル数
"AudioSampleRate": 44100 // サンプルレート
},
"NotifyUrl": "http://mytest/callback", // オプション:コールバックメッセージを受信するURL
"NotifyAuthKey": "12345678abcdefghikj" // オプション:コールバックメッセージの認証キー
}
音声とビデオの複合録画
シナリオ:チャンネル myRoom には、userA、userB、userC の 3 人のユーザーがいます。userA と userB の音声およびカメラストリーム、そして userC の音声のみのストリームを録画します。また、M3U8 と MP4 の両方のファイルを生成します。
生成されるビデオでは、userA と userB のペインが次のように配置されます:
録画結果:ファイルは、指定された OSS バケット my-bucket に保存されます。M3U8 ファイルは hls/{TaskId} パスに、MP4 ファイルは mp4/{TaskId} パスに保存されます。
パラメーター例:
{
"AppId": "my-app-id", // ストリーミングに使用するAppId
"ChannelId": "myRoom", // 録画するチャンネル
"SubscribeParams": {
"SubscribeUserIdList": [
{
"UserId": "userA", // 録画対象のユーザー
"StreamType": 0, // 音声とビデオのストリームをサブスクライブ
"SourceType": 0 // カメラストリームをサブスクライブ
},
{
"UserId": "userB", // 録画対象のユーザー
"StreamType": 0, // 音声とビデオのストリームをサブスクライブ
"SourceType": 0 // カメラストリームをサブスクライブ
},
{
"UserId": "userC", // 録画対象のユーザー
"StreamType": 1 // 音声のみのストリームをサブスクライブ
}
]
},
"RecordParams": {
"RecordMode": 1, // 複合録画モードを指定
"StreamType": 0, // 音声とビデオの出力形式を指定
"MaxFileDuration": 180 // ファイル分割の期間を 180 秒 (3 分) に設定
},
"StorageParams": {
"StorageType": 1, // OSSへの保存を指定
"FileInfo": [ // M3U8とMP4ファイルを生成し、それぞれ "hls" と "mp4" パス配下に保存
{
"Format": "HLS",
"FilePathPrefix": [
"hls"
]
},
{
"Format": "MP4",
"FilePathPrefix": [
"mp4"
]
}
],
"OSSParams": {
"OSSEndpoint": "oss-cn-shanghai.aliyuncs.com",
"OSSBucket": "my-bucket"
}
},
"MixTranscodeParams": {
"AudioBitrate": 128,
"AudioChannels": 2,
"AudioSampleRate": 44100,
"VideoCodec": "H.264",
"VideoBitrate": 500,
"VideoFramerate": 30,
"VideoGop": 30,
"VideoHeight": 480, // 生成されるビデオの高さ
"VideoWidth": 640 // 生成されるビデオの幅
},
"MixLayoutParams": {
"UserPanes": [
{
"userId": "userA",
"sourceType": 0,
"height": "1", // キャンバスの全高を占める
"width": "0.5", // キャンバスの半分の幅を占める
// ペインをキャンバスの左上隅に配置
"x": "0",
"y": "0"
},
{
"userId": "userB",
"sourceType": 0,
"height": "1", // キャンバスの全高を占める
"width": "0.5", // キャンバスの半分の幅を占める
// ペインをキャンバスの水平方向の中間点から配置
"x": "0.5",
"y": "0"
}
]
},
"NotifyUrl": "http://mytest/callback", // オプション:コールバックメッセージを受信するURL
"NotifyAuthKey": "12345678abcdefghikj" // オプション:コールバックメッセージの認証キー
}
ステップ2 (オプション):録画タスクの更新
ARTCクラウド録画タスクの更新 API を呼び出して、タスクの実行中に録画パラメーターを変更できます。
-
単独モード:サブスクリプションのみ更新できます。
-
複合モード:サブスクリプションとレイアウトの両方を更新できます。
ステップ3:録画タスクの停止
録画を終了するには、ARTCクラウド録画タスクの停止 API を呼び出してください。
この呼び出し後、システムは最終的な録画ファイルの処理とアップロードを行います。タスクは stop コールバックを受信した後にのみ完了します。このコールバックを受け取る前にストレージリソースを削除または変更しないでください。
ステップ4:タスクとファイルのクエリ
ARTCクラウド録画ファイルとタスクステータスのクエリ API を呼び出して、タスクのステータスと録画ファイルを確認できます。
-
既存のタスクのみクエリできます。存在しないタスクに対して API はエラーを返します。
-
録画ファイル情報は、正常に開始され、実行時間が 72 時間未満のタスクについてのみ取得可能です。72 時間が経過すると、API はエラーを返します。