ApsaraVideo Liveは、ライブストリームをリアルタイムで録画し、履歴ストリームを再生できるライブストリーム録画機能を提供します。 このトピックでは、ライブストリームの録画機能について詳しく説明します。
概要
ApsaraVideo Liveは、ストリーミングURLを使用して、ストリーム取り込みクライアントによってリアルタイムで取り込まれたストリームを再生します。 ライブストリームの終了後にライブストリームのコンテンツを再生または変更する場合は、ライブストリームの録画機能を使用できます。
ライブストリーム記録機能は、ライブセンターによって受信された取り込まれたストリームを記録し、記録ファイルを特定のストレージロケーションに格納するために使用されます。 ApsaraVideo Liveを使用すると、ライブストリームの録画ファイルをApsaraVideo VODまたはObject Storage Service (OSS) バケットに保存できます。
ライブストリームのレコーディングの仕組み
ライブストリーム録画機能は、取り込んだストリームを引き出し、オーディオとビデオのデータをトランスポートストリーム (TS) 形式の複数の個別のメディアセグメントファイルにカプセル化し、TSファイルを保存します。 ライブストリーム録画機能は、次の原則に準拠しています。
ライブストリーム録画機能は、オーディオおよびビデオデータのコンテナ形式をRTMP (Real-Time Messaging Protocol) またはFLV (Flash video) からTSに変換するだけです。 この機能は、コーディングレイヤでオーディオおよびビデオコンテンツを変更しません。 たとえば、取り込んだライブストリームがぼやけている場合、録音もぼやけています。
ライブストリーム録画機能は、指定した保存場所に録画ファイルを書き込むことができます。 ただし、この機能では、保存されている記録ファイルを含め、保存場所からタスクファイルを変更または削除することはできません。 保存場所で記録ファイルを管理できます。
ストレージ方法の比較
ApsaraVideo VODまたはOSSバケットにライブストリームを保存できます。 ストレージ方法はさまざまなシナリオで使用されます。 ビジネス要件に基づいてストレージ方法を選択できます。
保存方法 | 関連サービス | コンテナー形式 | シナリオ |
ApsaraVideo VOD | ApsaraVideo VOD | TS/M3U8 | 録画を再利用したり、編集、再生、ビデオのサムネイルの作成など、録画のポストプロダクションプロセスに集中したりできます。 |
OSS バケット | OSS |
| 録音の管理と保存に集中できます。 |
ライブストリームの録画ファイルをOSSバケットとApsaraVideo VODの両方に保存することはできません。
制限事項
オーディオとビデオのエンコード形式
ApsaraVideo Liveは、最初にライブストリームをTSセグメントにスライスする必要があります。 取り込むライブストリームのオーディオとビデオのエンコード形式は、TS形式の要件を満たす必要があります。 FLVおよびISO/IEC 13818-1規格に基づいて、記録機能は次のエンコード形式をサポートします。
ビデオ: H.264、高効率ビデオコーディング (HEVC) 、およびMPEG-4
オーディオ: 高度なオーディオコーディング (AAC) とMP3
ライブストリームにサポートされていない形式でエンコードされたオーディオおよびビデオデータが含まれている場合、録音の失敗、ブラックスクリーンの問題、および音声のない録音などの予期しない例外が録音プロセスで発生する可能性があります。
異常なライブストリーム
ライブストリーム録画機能は、通常のライブストリームの録画ファイルを生成できます。 通常のライブストリームは、サポートされるフォーマットで符号化されるストリーム、安定したフレームレートを有するストリーム、およびタイムスタンプが単調かつ線形に増加されるストリームを含みます。 ライブストリームのフレームレートが不安定な場合や、ライブストリームのタイムスタンプがジャンプする場合は、互換性が広いため、ライブストリーム用の記録ファイルを生成することもできます。 しかしながら、取り込まれたライブストリーム上で重大な例外が検出された場合、特徴は、取り込まれたライブストリームのための記録ファイルを生成することに失敗し得ます。重大な例外は、長期間にわたって検出されたビデオフレームがないこと、予期しないタイムスタンプが増加すること、ならびにオーディオおよびビデオヘッダの欠落を含みます。
ApsaraVideo VODに録画ファイルを保存
前提条件
ApsaraVideo VODが有効化されています。 詳細については、「ApsaraVideo VODの有効化」をご参照ください。
VODバケットを有効にして、ApsaraVideo VODに録画ファイルを保存できます。 詳細については、「VODバケットの有効化」をご参照ください。
VODバケットを有効にするときは、VODバケットがストリーミングドメインのライブセンターと同じリージョンにあることを確認してください。
Finance Cloudアカウントを使用してlive-to-VOD機能を設定することはできません。
ストレージ設定の構成Configure storage settings
前提条件が満たされたら、ApsaraVideo VODに録画ファイルを保存するために必要な設定を構成できます。
録画ファイルをApsaraVideo VODに保存すると、ストレージ料金が発生します。 詳細については、「メディアストレージ」をご参照ください。
ApsaraVideo Liveは、ApsaraVideo VODに録画ファイルを保存するための次の方法を提供します。
1. ApsaraVideo Liveコンソールで設定を行います。 詳細については、「ApsaraVideo VODでの録画の保存」をご参照ください。
2. API操作を呼び出します。 詳細については、「AddLiveRecordVodConfig」をご参照ください。次のセクションでは、SDK for Javaを使用して、ApsaraVideo VODに保存する録画ファイルの設定を行う方法について説明します。
//Replace the content in the angle brackets <> with actual values.
DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
IAcsClient client = new DefaultAcsClient(profile);
AddLiveRecordVodConfigRequest addLiveRecordVodConfigRequest=new AddLiveRecordVodConfigRequest();
addLiveRecordVodConfigRequest.setDomainName("<DomainName>");
addLiveRecordVodConfigRequest.setAppName("<AppName>");
addLiveRecordVodConfigRequest.setStreamName("<StreamName>");
addLiveRecordVodConfigRequest.setVodTranscodeGroupId("VOD_NO_TRANSCODE");
//The address of the VOD bucket.
addLiveRecordVodConfigRequest.setStorageLocation("<StorageLocation>");
AddLiveRecordVodConfigResponse dddLiveRecordVodConfigResponse = null;
try {
dddLiveRecordVodConfigResponse = client.getAcsResponse(addLiveRecordVodConfigRequest);
} catch (ClientException e) {
e.printStackTrace();
}
System.out.println(new Gson().toJson(dddLiveRecordVodConfigResponse));
サンプルコードを実行すると、ストリーミングドメインを使用して再生されるストリームの録画ファイルがVODバケットに保存されます。 <DomainName> はストリーミングドメインを指定します。 <AppName> は、アプリケーション名を指定します。 <StreamName> はストリーム名を指定します。 VOD_NO_TRANSCODEは、記録にトランスコーディングが必要ないことを指定します。 <StorageLocation> は、VOCバケットのアドレスを指定します。
アプリケーションまたはライブストリームを指定しない場合は、AppNameパラメーターとStreamNameパラメーターをアスタリスク (*) に設定します。これは、すべてのアプリケーションとストリームを示します。
複数のルールを設定できます。 ルールは優先順位に基づいて有効になります。
ルールでAppNameパラメーターとStreamNameパラメーターがアスタリスク (*) に設定されていない場合、ルールの優先度が最も高くなります。
AppNameパラメーターがルールでアスタリスク (*) に設定されていない場合、ルールは2番目の優先順位になります。
ルールでAppNameパラメーターがアスタリスク (*) に設定されている場合、ルールの優先度は最も低くなります。 この場合、ストリームドメイン名のみが指定されます。
記録ルールを設定した後、設定を有効にするには、ストリームを再度取り込む必要があります。
ライブストリームが180秒間中断された後、録画ファイルがライブストリームのために生成されます。
録音のコード変換
記録ファイルはM3U8形式で保存されます。 録音ファイルを別の形式で保存する場合は、トランスコーディングを設定できます。 トランスコードを設定するためのサンプルコード:
addLiveRecordVodConfigRequest.setVodTranscodeGroupId("<TranscodeGroupId>");
コード変換テンプレートは、ApsaraVideo VODで設定する必要があります。 詳細については、「コード変換テンプレート」をご参照ください。
<TranscodeGroupId> は、ApsaraVideo VODのトランスコードテンプレートグループのIDを指定します。
トランスコードを設定すると、記録ファイルがトランスコードされ、トランスコードされたストリームURLが生成されます。 元の記録ファイルは保持されます。
録音のマージ
以下のシナリオでは、録音をマージできます。
1. ライブストリームが中断されたが、以内に180秒で再取り込みされた場合、中断の前後に生成された録画ファイルは自動的に1つの録画ファイルにマージされます。
2. ライブストリームの持続時間が記録サイクルを超える場合、記録サイクルの前後に生成される記録ファイルをマージすることができる。 ライブストリームの持続時間が記録サイクルを超えた後、新しい記録ファイルが生成される。 例えば、記録サイクルが5分であり、ストリーム取り込み期間が8分である場合、ストリームが取り込まれた後に2つの記録ファイルが生成されます。
記録サイクルを設定するためのサンプルコード:
//Unit: seconds. Valid values: 300 to 21600.
addLiveRecordVodConfigRequest.setCycleDuration(<300>);
録音サイクルを指定しない場合、デフォルトの録音サイクルは15分です。
異なる記録サイクルの記録ファイルをマージする場合は、マージ設定を構成できます。
複数のサイクルの録画ファイルの自動マージを有効にすると、ApsaraVideo VODの編集および制作機能とトランスコード機能が必要になります。 詳細については、「付加価値サービスの課金」および「基本サービスの課金」をご参照ください。
記録ファイルをマージするためのサンプルコード:
addLiveRecordVodConfigRequest.setAutoCompose("ON");
addLiveRecordVodConfigRequest.setComposeVodTranscodeGroupId("<TranscodeGroupId>");
複数の記録ファイルがマージされた後、新しい記録ファイルが生成され、元の記録ファイルが保持されます。
コード変換テンプレートは、ApsaraVideo VODで設定する必要があります。 詳細については、「コード変換テンプレート」をご参照ください。
<TranscodeGroupId> は、ApsaraVideo VODのトランスコードテンプレートグループのIDを指定します。
記録ファイルの管理
ApsaraVideo Liveコンソールで、VODバケットに保存されている録画ファイルを表示できます。 詳細については、「録画の表示」をご参照ください。 録画ファイルを管理するには、ApsaraVideo VODを使用します。 詳細については、「メディア資産管理」をご参照ください。
OSSバケットに記録ファイルを保存する
前提条件
OSSが有効化され、OSSバケットが作成されます。 詳細については、「OSS の設定」をご参照ください。
OSSバケットは、ストリーミングドメインのライブセンターと同じリージョンに存在する必要があります。
ストレージ設定の構成
前提条件が満たされたら、必要な設定を設定して、OSSバケットに記録ファイルを保存できます。
記録ファイルをOSSバケットに保存すると、ストレージ料金が発生します。 詳細については、「ストレージ料金」をご参照ください。
ApsaraVideo Liveは、OSSバケットに記録ファイルを保存するための次の方法を提供します。
1. OSSコンソールでの設定: 詳細については、「OSSでの記録の保存」をご参照ください。
2. API操作の呼び出し: 詳細については、「AddLiveAppRecordConfig」をご参照ください。次のセクションでは、SDK for Javaを使用して、OSSバケットに保存するファイルを記録するための設定を行う方法について説明します。
//Replace the content in the angle brackets <> with actual values.
DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
IAcsClient client = new DefaultAcsClient(profile);
AddLiveAppRecordConfigRequest addLiveAppRecordConfigRequest=new AddLiveAppRecordConfigRequest();
addLiveAppRecordConfigRequest.setAppName("<AppName>");
addLiveAppRecordConfigRequest.setStreamName("<StreamName>");
addLiveAppRecordConfigRequest.setDomainName("<DomainName>");
addLiveAppRecordConfigRequest.setOssEndpoint("<OssEndpoint>");
addLiveAppRecordConfigRequest.setOssBucket("<OssBucket>");
List<AddLiveAppRecordConfigRequest.RecordFormat> formatList=new ArrayList<AddLiveAppRecordConfigRequest.RecordFormat>();
AddLiveAppRecordConfigRequest.RecordFormat m3u8Format=new AddLiveAppRecordConfigRequest.RecordFormat();
m3u8Format.setFormat("m3u8");
//The name of the recording file that is stored in the OSS bucket.
m3u8Format.setOssObjectPrefix("<record/{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}>");
//The name of the segment.
m3u8Format.setSliceOssObjectPrefix("<record/{AppName}/{StreamName}/{UnixTimestamp}_{Sequence}>");
formatList.add(m3u8Format);
addLiveAppRecordConfigRequest.setRecordFormats(formatList);
AddLiveAppRecordConfigResponse addLiveAppRecordConfigResponse = null;
try {
addLiveAppRecordConfigResponse = client.getAcsResponse(addLiveAppRecordConfigRequest);
} catch (ClientException e) {
e.printStackTrace();
}
System.out.println(new Gson().toJson(addLiveAppRecordConfigResponse));
サンプルコードを実行すると、ストリーミングドメインを使用して再生されるストリームの記録ファイルがOSSバケットに保存されます。 <DomainName> はストリーミングドメインを指定します。 <AppName> は、アプリケーション名を指定します。 <StreamName> はストリーム名を指定します。 <OssBucket> は、OSSバケットの名前を指定します。 記録ファイルはM3U8形式で保存されます。
OssObjectPrefixまたはSliceOssObjectPrefixパラメーターの値は、変数の照合後、長さが255文字を超えることはできません。 詳細については、「AddLiveAppRecordConfig」をご参照ください。
<OssEndpoint> パラメーターの値は、<OssBucket> パラメーターで指定されたOSSバケットのリージョンに基づいて取得できます。 詳細については、「リージョン、エンドポイント、オープンポート」をご参照ください。
アプリケーションまたはライブストリームを指定しない場合は、AppNameパラメーターとStreamNameパラメーターをアスタリスク (*) に設定します。これは、すべてのアプリケーションとストリームを示します。
複数のルールを設定できます。 ルールは優先順位に基づいて有効になります。
ルールでAppNameパラメーターとStreamNameパラメーターがアスタリスク (*) に設定されていない場合、ルールの優先度が最も高くなります。
AppNameパラメーターがルールでアスタリスク (*) に設定されていない場合、ルールは2番目の優先順位になります。
ルールでAppNameパラメーターがアスタリスク (*) に設定されている場合、ルールの優先度は最も低くなります。 この場合、ストリームドメイン名のみが指定されます。
記録ルールを設定した後、設定を有効にするには、ストリームを再度取り込む必要があります。
ライブストリームが180秒間中断された後、録画ファイルがライブストリームのために生成される。 中断期間を指定できます。 詳細については、「マージの中断時間の設定」をご参照ください。
録音のコード変換
録画ファイルのサイズを小さくしたい場合は、トランスコードされたストリームを録画してビデオビットレートを調整し、ビデオ品質に影響を与えることなくビデオ圧縮率を向上させることができます。
OSSでは、元のストリームとトランスコードされたストリームを保存できます。 オリジナルまたはトランスコードされたストリームのみを保存することもできます。
トランスコードされたストリームを記録するためのサンプルコード:
//Replace the content in the angle brackets <> with actual values.
List<AddLiveAppRecordConfigRequest.TranscodeRecordFormat> transcodeFormatList=new ArrayList<AddLiveAppRecordConfigRequest.TranscodeRecordFormat>();
AddLiveAppRecordConfigRequest.TranscodeRecordFormat m3u8TranscodeFormat=new AddLiveAppRecordConfigRequest.TranscodeRecordFormat();
m3u8TranscodeFormat.setFormat("m3u8");
//The name of the recording file for the transcoded stream in an OSS bucket.
m3u8TranscodeFormat.setOssObjectPrefix("<transcodeRecord/{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}>");
//The name of the segment of the transcoded stream.
m3u8TranscodeFormat.setSliceOssObjectPrefix("<transcodeRecord/{AppName}/{StreamName}/{UnixTimestamp}_{Sequence}>");
transcodeFormatList.add(m3u8TranscodeFormat);
addLiveAppRecordConfigRequest.setTranscodeRecordFormats(transcodeFormatList);
List<String> transcodeTemplateList=new ArrayList<String>();
//The ID of the transcoding template.
transcodeTemplateList.add("lld");
addLiveAppRecordConfigRequest.setTranscodeTemplatess(transcodeTemplateList);
ライブストリームのトランスコード機能を使用する場合、トランスコード標準、解像度、およびトランスコードされたストリームの合計長に基づいて課金されます。 詳細については、「ライブストリームトランスコードの課金」をご参照ください。
トランスコードされたストリームのみを記録する場合は、元のストリームを指定するsetRecordFormatsパラメーターを設定する必要はありません。
setTranscodecordFormatsパラメーターを設定する場合は、setTranscodeTemplateessパラメーターも設定して、トランスコードテンプレートIDを指定する必要があります。 コード変換テンプレートを設定する必要があります。 詳細については、「ライブストリームトランスコーディング」をご参照ください。
トランスコードされたストリーム記録用にトランスコードテンプレートを設定する場合、ストリーム取り込みによってトリガーされるトランスコードを設定する必要があります。
StreamNameパラメーターは、トランスコードされたストリームの記録ファイルの名前を指定します。 名前は
StreamName
_TranscodingテンプレートID
形式です。
マージの中断期間の設定
ライブストリームが中断されたが、中断期間for merge内に再び取り込まれた場合、生成された録画ファイルは自動的に1つの録画ファイルにマージされます。 デフォルトでは、中断時間は180秒です。
新たな記録ファイルは、マージの中断時間が経過した後にのみ生成されます。
ビジネス要件に基づいて、マージの中断期間を設定できます。 サンプルコード:
//Unit: seconds. Valid values: 15 to 21600.
addLiveAppRecordConfigRequest.setDelayTime(<180>);
マージの中断時間が経過した後に録画ファイルを生成したくない場合は、ライブストリームが終了した直後に録画ファイルを生成するようにシステムを設定できます。 ストリーム取り込みコールバックを設定できます。 ストリーム取り込みプロセスが完了したという通知を受け取ったら、RealTimeRecordCommand操作を呼び出して、マージの中断期間の設定を無効にすることができます。 詳細については、「RealTimeRecordCommand」をご参照ください。
ストリームのコールバックを設定する方法の詳細については、「ストリーム取り込みステータスのコールバック」をご参照ください。 マージの中断期間の設定を無効にするためのサンプルコード:
//Replace the content in the angle brackets <> with actual values.
RealTimeRecordCommandRequest realTimeRecordCommandRequest=new RealTimeRecordCommandRequest();
realTimeRecordCommandRequest.setCommand("cancel_delay");
realTimeRecordCommandRequest.setAppName("<AppName>");
realTimeRecordCommandRequest.setStreamName("<StreamName>");
realTimeRecordCommandRequest.setDomainName("<DomainName>");
RealTimeRecordCommandResponse realTimeRecordCommandResponse = null;
try {
realTimeRecordCommandResponse = client.getAcsResponse(realTimeRecordCommandRequest);
} catch (ClientException e) {
e.printStackTrace();
}
System.out.println(new Gson().toJson(realTimeRecordCommandResponse));
トランスコードされたストリームを記録する場合は、<StreamName> パラメーターを
StreamName
_transcoding template ID
形式で指定する必要があります。setCommand("cancel_delay"): マージの中断時間をリセットし、録画を完全に停止し、すぐに録画ファイルを生成します。
記録ルールの設定
[ストレージ設定の設定] セクションで、ライブストリームの録画機能が設定されます。 ライブストリームが取り込まれると、記録プロセスが開始されます。 このプロセスは自動記録と呼ばれます。
場合によっては、ビジネス要件に基づいてライブストリームを録画するかどうかを決定することができます。 必要に応じて、次のいずれかの方法を使用してライブストリームを記録できます。
1. ApsaraVideo Liveは、ライブストリームを録画するかどうかを尋ねるリクエストを送信します。 ApsaraVideo Liveがライブストリームを録画するための応答を受信すると、録画プロセスが開始されます。 このプロセスは、オンデマンド記録と呼ばれます。
2. ビジネスシステムは、ライブストリームを録画するためにApsaraVideo Liveに通知を送信します。 このプロセスは手動記録と呼ばれます。
オンデマンド記録
オンデマンド録画を実装するには、ビジネスシステムがApsaraVideo LiveのコールバックURLを提供する必要があります。 詳細については、「オンデマンド録画のコールバック」をご参照ください。
オンデマンド記録を設定するためのサンプルコード:
addLiveAppRecordConfigRequest.setOnDemand(1);
OnDemandパラメーターを1に設定して、HTTPコールバックメソッドを使用するオンデマンド録音を有効にします。
また、AddLiveRecordNotifyConfig操作を呼び出して、記録コールバックを設定する必要があります。 サンプルコード:
//Replace the content in the angle brackets <> with actual values.
AddLiveRecordNotifyConfigRequest addLiveRecordNotifyConfigRequest=new AddLiveRecordNotifyConfigRequest();
//Specify a callback URL for on-demand recording.
addLiveRecordNotifyConfigRequest.setOnDemandUrl("<OnDemandUrl>");
addLiveRecordNotifyConfigRequest.setNotifyUrl("<NotifyUrl>");
addLiveRecordNotifyConfigRequest.setDomainName("<DomainName>");
AddLiveRecordNotifyConfigResponse addLiveRecordNotifyConfigResponse = null;
try {
addLiveRecordNotifyConfigResponse = client.getAcsResponse(addLiveRecordNotifyConfigRequest);
} catch (ClientException e) {
e.printStackTrace();
}
System.out.println(new Gson().toJson(addLiveRecordNotifyConfigResponse));
<OnDemandUrl> は、オンデマンド記録のコールバックURLを指定します。 <NotifyUrl> は、イベントとステータスの記録に関する通知を受け取るために使用されるコールバックURLを指定します。
<NotifyUrl> パラメーターが必要です。 オンデマンドの録音リクエストのみを受信し、録音イベントとステータスをコールバックしたくない場合は、<NotifyUrl> パラメーターを、リクエストされたメソッドをサポートしていないURLに設定できます。
手動録音
手動記録を有効にするには、自動記録を無効にする必要があります。 サンプルコード:
addLiveAppRecordConfigRequest.setOnDemand(7);
自動録画を無効にするには、OnDemandパラメーターを7に設定します。
ライブストリーミング中に、RealTimeRecordCommand操作を呼び出して、ビジネス要件に基づいて録画を有効にできます。 サンプルコード:
//Replace the content in the angle brackets <> with actual values.
RealTimeRecordCommandRequest realTimeRecordCommandRequest=new RealTimeRecordCommandRequest();
realTimeRecordCommandRequest.setCommand("start");
realTimeRecordCommandRequest.setAppName("<AppName>");
realTimeRecordCommandRequest.setStreamName("<StreamName>");
realTimeRecordCommandRequest.setDomainName("<DomainName>");
RealTimeRecordCommandResponse realTimeRecordCommandResponse = null;
try {
realTimeRecordCommandResponse = client.getAcsResponse(realTimeRecordCommandRequest);
} catch (ClientException e) {
e.printStackTrace();
}
System.out.println(new Gson().toJson(realTimeRecordCommandResponse));
トランスコードされたストリームを記録する場合は、<StreamName> パラメーターを
StreamName
_transcoding template ID
形式で指定する必要があります。setCommand("start"): 録音を開始します。
録音の停止
自動録画、オンデマンド録画、または手動録画を手動で停止できます。 サンプルコード:
//Replace the content in the angle brackets <> with actual values.
RealTimeRecordCommandRequest realTimeRecordCommandRequest=new RealTimeRecordCommandRequest();
realTimeRecordCommandRequest.setCommand("stop");
realTimeRecordCommandRequest.setAppName("<AppName>");
realTimeRecordCommandRequest.setStreamName("<StreamName>");
realTimeRecordCommandRequest.setDomainName("<DomainName>");
RealTimeRecordCommandResponse realTimeRecordCommandResponse = null;
try {
realTimeRecordCommandResponse = client.getAcsResponse(realTimeRecordCommandRequest);
} catch (ClientException e) {
e.printStackTrace();
}
System.out.println(new Gson().toJson(realTimeRecordCommandResponse));
setCommand("stop"): 録音を停止します。
手動で録画を停止すると、マージの中断時間が経過した後に録画ファイルが生成されます。
トランスコードされたストリームを記録する場合は、<StreamName> パラメーターを
StreamName
_transcoding template ID
形式で指定する必要があります。
関連する API
操作 | 説明 |
ライブストリーム録音の録音コールバック設定を作成します。 | |
ライブストリーム録音の録音コールバック設定を照会します。 | |
ライブストリーム録画の録画コールバック設定を変更します。 | |
ライブストリーム録音の録音コールバック設定を削除します。 |
録音サイクルの設定
ライブストリーミングの期間が指定した録画サイクルを超えると、新しい録画ファイルが生成されます。 例えば、ライブストリーミングが20分間続き、記録周期が15分に設定されている場合、2つの記録ファイルが生成されます。 記録サイクルは15〜360分の範囲の値に設定できます。
記録サイクルを設定するためのサンプルコード:
List<AddLiveAppRecordConfigRequest.RecordFormat> formatList=new ArrayList<AddLiveAppRecordConfigRequest.RecordFormat>();
AddLiveAppRecordConfigRequest.RecordFormat m3u8Format=new AddLiveAppRecordConfigRequest.RecordFormat();
m3u8Format.setFormat("m3u8");
m3u8Format.setOssObjectPrefix("<record/{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}>");
m3u8Format.setSliceOssObjectPrefix("<record/{AppName}/{StreamName}/{UnixTimestamp}_{Sequence}>");
//Configure the recording cycle. Unit: seconds.
m3u8Format.setCycleDuration(<900>);
AddLiveAppRecordConfigRequest.RecordFormat mp4Format=new AddLiveAppRecordConfigRequest.RecordFormat();
mp4Format.setFormat("mp4");
mp4Format.setOssObjectPrefix("<record/{AppName}/{StreamName}/{EscapedStartTime}_{EscapedEndTime}>");
//Configure the recording cycle. Unit: seconds.
mp4Format.setCycleDuration(<1500>);
formatList.add(mp4Format);
formatList.add(m3u8Format);
addLiveAppRecordConfigRequest.setRecordFormats(formatList);
サンプルコードを実行すると、記録ファイルは2つの形式で保存され、それぞれが特定の記録サイクルで構成されます。 ストリームが20分間取り込まれると、3つの記録ファイルが生成されます。 1つの記録ファイルはMP4形式であり、2つの記録ファイルはM3U8形式です。
ライブストリーミング期間が録画サイクルを超えない場合、録画ファイルはライブストリーミング終了後に生成されます。 ライブストリーミングが終了する前に録画ファイルを表示する場合は、RealTimeRecordCommand操作を呼び出して録画コンテンツを更新し、録画を強制的に再開します。 ライブストリームの録画中に録画を再開すると、すぐに録画ファイルが生成されます。
記録を再開するためのサンプルコード:
//Replace the content in the angle brackets <> with actual values.
RealTimeRecordCommandRequest realTimeRecordCommandRequest=new RealTimeRecordCommandRequest();
realTimeRecordCommandRequest.setCommand("restart");
realTimeRecordCommandRequest.setAppName("<AppName>");
realTimeRecordCommandRequest.setStreamName("<StreamName>");
realTimeRecordCommandRequest.setDomainName("<DomainName>");
RealTimeRecordCommandResponse realTimeRecordCommandResponse = null;
try {
realTimeRecordCommandResponse = client.getAcsResponse(realTimeRecordCommandRequest);
} catch (ClientException e) {
e.printStackTrace();
}
System.out.println(new Gson().toJson(realTimeRecordCommandResponse));
setCommand("restart"): 記録を再開します。
トランスコードされたストリームを記録する場合は、<StreamName> パラメーターを
StreamName
_transcoding template ID
形式で指定する必要があります。ライブストリームの録画ファイルに複数の保存形式を設定した場合、再起動後に生成された録画ファイルは設定された形式で保存されます。
録音ファイルのマージと抽出
ApsaraVideo Liveを使用すると、インデックスファイルを作成し、時間範囲ごとに録画ファイルを抽出できます。 時間範囲内に生成された複数の録音ファイルを1つの録音ファイルにマージすることもできます。
録画ファイルの保存形式に関係なく、ApsaraVideo Liveはまずライブストリームを複数のTSセグメントにスライスし、それらを構成して指定されたコンテナ形式で録画ファイルを生成します。 TSセグメントを参照できるM3U8インデックスファイルを作成できます。 これにより、インデックスファイルに基づいて録音ファイルをマージして抽出できます。
M3U8形式で保存されている記録ファイルのみをマージまたは抽出できます。
CreateLiveStreamRecordIndexFilesを呼び出して、インデックスファイルを作成できます。
CreateLiveStreamRecordIndexFilesRequest createLiveStreamRecordIndexFilesRequest=new CreateLiveStreamRecordIndexFilesRequest();
createLiveStreamRecordIndexFilesRequest.setAppName("<AppName>");
createLiveStreamRecordIndexFilesRequest.setStreamName("<StreamName>");
createLiveStreamRecordIndexFilesRequest.setDomainName("<DomainName>");
createLiveStreamRecordIndexFilesRequest.setOssEndpoint("<OssEndpoint>");
createLiveStreamRecordIndexFilesRequest.setOssBucket("<OssBucket>");
createLiveStreamRecordIndexFilesRequest.setStartTime("<StartTime>");
createLiveStreamRecordIndexFilesRequest.setEndTime("<EndTime>");
createLiveStreamRecordIndexFilesRequest.setOssObject("<IndexFiles/OssObject.m3u8>");
CreateLiveStreamRecordIndexFilesResponse createLiveStreamRecordIndexFilesResponse = null;
try {
createLiveStreamRecordIndexFilesResponse = client.getAcsResponse(createLiveStreamRecordIndexFilesRequest);
} catch (ClientException e) {
e.printStackTrace();
}
System.out.println(new Gson().toJson(createLiveStreamRecordIndexFilesResponse));
上記のサンプルコードでは、特定の時間範囲内のライブストリームの録画ファイルに対してインデックスファイルを作成しています。 <AppName> は、アプリケーション名を指定します。 <StreamName> はストリーム名を指定します。 <StartTime> は、時間範囲の開始時間を指定します。 <EndTime> は、時間範囲の終了を指定します。 インデックスファイルはOSSバケットに保存されます。 <OssEndpoint> はOSSエンドポイントを指定します。 <OssBucket> は、OSSバケットの名前を指定します。 <IndexFiles/OssObject.m3u8> は、インデックスファイルの名前を指定します。
<StartTime> および <EndTime> パラメーターの値は、yyyy-MM-dd T HH:mm:ss Z(UTC time) 形式です。
インデックスファイルは、ライブストリームが取り込まれた後にのみ作成できます。 指定された時間範囲内にライブストリームが使用できない場合、または指定されたライブストリームの名前が無効な場合、インデックスファイルの作成に失敗します。
録画コンテンツには、ファイルと、アプリケーション名、ストリーム名、OSSストレージパスなどのファイルに関する情報が含まれます。 TSセグメントとM3U8インデックスファイルに関する情報は、ApsaraVideo Liveに保存されます。 TSセグメントやM3U8インデックスファイルなどのファイルは、OSSバケットに保存されます。
OSSバケットに保存されているファイルの保持期間は、OSSバケットの設定によって決まります。
ApsaraVideo Liveは、TSセグメントに関する情報を3か月間のみ保存します。 M3U8インデックスファイルは、過去3か月の録画に対してのみ作成できます。
ApsaraVideo Liveは、M3U8インデックスファイルに関する情報を6か月間のみ保存します。 クエリできるのは、過去6か月間に作成されたM3U8インデックスファイルに関する情報だけです。
トランスコードされたストリームをマージまたは抽出する場合は、
StreamName
_Transcoding template ID
形式でStreamNameパラメーターを指定する必要があります。<OssBucket> パラメーターで指定されたOSSバケットは、必要なライブセンターと同じリージョンに存在する必要があります。 それ以外の場合、ドメイン名を使用してM3U8インデックスファイルに関する情報を照会することはできません。
関連する API
操作 | 説明 |
特定の期間内のすべてのインデックスファイルを照会します。 | |
インデックスファイルに関する情報を照会します。 |
記録ファイルの管理
ApsaraVideo Liveは、録画ファイルを管理するために次の方法を提供します。
1. ApsaraVideo Liveコンソールで設定を行います。 詳細については、「録音の管理」をご参照ください。
2. APIを呼び出します。 次のセクションでは、SDK for Javaを使用して録画ファイルを削除する方法について説明します。
次のセクションでは、SDK for Javaを使用して録画ファイルを削除する方法について説明します。
記録ファイルに関する情報を照会します。
説明録画ファイルを削除するには、インデックスファイルIDを指定する必要があります。 インデックスファイルIDは、録画ファイルの情報から取得できます。
//Replace the content in the angle brackets <> with actual values. DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>"); IAcsClient client = new DefaultAcsClient(profile); DescribeLiveStreamRecordIndexFilesRequest describeLiveStreamRecordIndexFilesRequest=new DescribeLiveStreamRecordIndexFilesRequest(); describeLiveStreamRecordIndexFilesRequest.setAppName("<AppName>"); describeLiveStreamRecordIndexFilesRequest.setStreamName("<StreamName>"); describeLiveStreamRecordIndexFilesRequest.setDomainName("<DomainName>"); describeLiveStreamRecordIndexFilesRequest.setStartTime("<StartTime>"); describeLiveStreamRecordIndexFilesRequest.setEndTime("<EndTime>"); DescribeLiveStreamRecordIndexFilesResponse describeLiveStreamRecordIndexFilesResponse = null; try { describeLiveStreamRecordIndexFilesResponse = client.getAcsResponse(describeLiveStreamRecordIndexFilesRequest); } catch (ClientException e) { e.printStackTrace(); } for(int i=0;i<describeLiveStreamRecordIndexFilesResponse.getRecordIndexInfoList().size();i++){ System.out.println(new Gson().toJson(describeLiveStreamRecordIndexFilesResponse.getRecordIndexInfoList().get(i))); }
重要クエリできるのは、過去6か月以内のデータのみです。
EndTimeおよびStartTimeパラメーターの値は、yyyy-MM-dd T HH:mm:ss Z(UTC time) 形式です。 間隔は4日を超えることはできません。
記録情報を照会するために呼び出す操作の詳細については、「DescribeLiveStreamRecordIndexFiles」をご参照ください。
録音ファイルを削除します。
説明ApsaraVideo Liveで録画ファイルを削除するときにOSSバケットに保存されているファイルを削除する場合は、AliyunMTSVideoLifecycleRoleロールを作成し、AliyunMTSVideoLifecycleRolePolicyシステムポリシーをロールにアタッチする必要があります。 ApsaraVideo Liveには、アプリケーション名、ストリーム名、OSSストレージパスなど、録画ファイルに関する情報が保存されます。 OSSはファイルを保存します。 詳細については、「録画の削除」をご参照ください。
DeleteLiveStreamRecordIndexFilesRequest deleteLiveStreamRecordIndexFilesRequest=new DeleteLiveStreamRecordIndexFilesRequest(); deleteLiveStreamRecordIndexFilesRequest.setAppName("<AppName>"); deleteLiveStreamRecordIndexFilesRequest.setStreamName("<StreamName>"); deleteLiveStreamRecordIndexFilesRequest.setDomainName("<DomainName>"); List<String> recordList=new ArrayList<>(); //Add the index file ID. recordList.add("<recordId>"); deleteLiveStreamRecordIndexFilesRequest.setRecordIds(recordList); deleteLiveStreamRecordIndexFilesRequest.setRemoveFile("<true>"); DeleteLiveStreamRecordIndexFilesResponse deleteLiveStreamRecordIndexFilesResponse = null; try { deleteLiveStreamRecordIndexFilesResponse = client.getAcsResponse(deleteLiveStreamRecordIndexFilesRequest); } catch (ClientException e) { e.printStackTrace(); } System.out.println(new Gson().toJson(deleteLiveStreamRecordIndexFilesResponse));
重要<recordId> は、インデックスファイルIDを指定します。
ライブストリームの録画ファイルを削除するために呼び出す操作の詳細については、「DeleteLiveStreamRecordIndexFiles」をご参照ください。
上記の例は、録画ファイルを削除する方法を示しています。 OSSバケットに保存されているファイルも削除されます。
その他の削除方法
6か月以上前に生成されたファイルの削除: 過去6か月以内にのみ生成された記録ファイルに関する情報を照会できます。 6か月以上前に生成されたファイルを削除するには、OSSを使用します。 詳細については、「オブジェクトの削除」をご参照ください。
OSSバケット内の期限切れの録画ファイルを自動的に削除する場合は、ApsaraVideo LiveにAlibaba Cloudリソースへのアクセスを許可する必要があります。 [Cloud Resource Access Authorization] ページに移動し、[Agree to Authorization] をクリックします。 次に、チケットを起票します。 アフターセールスチームは、要件に基づいて有効期間を設定します。 チケットの起票方法の詳細については、「お問い合わせ」をご参照ください。 有効期限が切れた録画ファイルに設定されている場合、ApsaraVideo Liveは録画ファイルを自動的に削除します。
このステップでは、ApsaraVideo LiveにAlibaba Cloudリソースへのアクセス権限を付与するロールが割り当てられます。 誤ってロールを削除した場合は、ロールを再度作成して権限を付与できます。
関連ドキュメント
ライブストリーム録画に関連するAPI操作の詳細については、「ライブ録画をApsaraVideo VODに保存する」および「録画をOSSに保存する」をご参照ください。
SDK For Javaの使用方法の詳細については、「Java SDKの使用方法」をご参照ください。
コールバックの記録の詳細については、「ライブストリーム録画用のコールバック」および「オンデマンド録画用のコールバック」をご参照ください。