ライブストリームレコーディングとは、取り込まれたライブストリームをリアルタイムでメディアセグメントに変換し、Object Storage Service (OSS) またはApsaraVideo VODに保存するプロセスを指します。 プロセス中、ApsaraVideo Liveはライブストリームをトランスポートストリーム (TS) 、M3U8、MP4、Flash video (FLV) などの形式のビデオファイルにカプセル化します。 ビデオ符号化では、H.264、高効率ビデオコーディング (HEVC) 、およびMPEG-4がサポートされます。 オーディオエンコーディングでは、Advanced audio Coding (AAC) とMP3がサポートされています。 ApsaraVideo Liveコンソールを使用するか、API操作を呼び出して、自動録画、定期録画、オンデマンド録画、手動録画など、さまざまな録画方法を選択できます。 録画が完了したら、ApsaraVideo Liveコンソールで録画を照会したり、録画コールバックを設定したり、録画のリアルタイム処理を実行したりできます。 このトピックでは、動作原理、録音の保存、録音方法など、ライブストリームの録音に関する情報について詳しく説明します。
ライブストリームのレコーディングの仕組み
ライブストリーム録画機能は、ライブストリームから録画を生成するために使用されます。 この機能を使用すると、ApsaraVideo Liveは、取り込んだストリームを取得し、オーディオデータとビデオデータをTS形式の複数の個別のメディアセグメントにカプセル化します。 TSセグメントは、指定したOSSバケットに保存されるか、ApsaraVideo VODに保存されます。 ApsaraVideo Liveは、録画プロセスで次の原則に準拠しています。
ApsaraVideo Liveは、オーディオおよびビデオデータのコンテナ形式をRTMP (Real-Time Messaging Protocol) またはFLVからTSにのみ変換します。 ただし、ApsaraVideo Liveは、オーディオおよびビデオコンテンツ、つまりコーディングレイヤーのコンテンツを変更することはありません。 たとえば、取り込んだライブストリームがぼやけている場合、録音もぼやけています。
ApsaraVideo Liveには、バケットに録音を書き込む権限があります。 ただし、バケット内のタスクファイル (保存された記録を含む) を変更または削除する権限はありません。 バケット内の録音を管理する唯一の特権があります。
録音の保存
ライブストリームの録画は、ApsaraVideo VODまたはOSSに保存できます。
ApsaraVideo Liveは、以下の録画保存方法を提供します。 ビジネス要件に基づいていずれかの方法を使用できます。
記録をOSSに保存する: 記録を保存するために使用されるOSSバケットは、ストリーミングドメインのライブセンターと同じリージョンに存在する必要があります。 クロスリージョン記録はサポートされていません。
ApsaraVideo VODに録画を保存する: ライブストリームはApsaraVideo VODに録画および保存されます。 記録は、VOD記録設定に基づいて生成される。 ApsaraVideo VODのオンライン編集機能を使用して、ライブストリームのビデオコンテンツを編集および処理し、短いビデオを作成できます。
録音のコンテナ形式
録画機能を使用すると、TS、M3U8、MP4、およびFLV形式のファイルにライブストリームを録画できます。 コンテナ形式に関係なく、ApsaraVideo Liveはまずライブストリームを複数の個別のTSセグメントにスライスし、指定されたコンテナ形式で録画を生成するためにそれらを構成します。
M3U8形式の場合、ApsaraVideo LiveはTSセグメントとM3U8プレイリストの両方をバケットに保存します。 これは、M3U8プレイリストがHTTPライブストリーミング (HLS) プロトコルのインデックスファイルとしてのみ使用され、オーディオデータとビデオデータがTSセグメントに別々に格納されるためです。 MP4およびFLV形式では、作成されたMP4およびFLVセグメントのみがバケットに保存されます。
制限事項
記録をOSSに保存
ストリーミングドメインのライブセンターと同じリージョンにあるOSSバケットを作成した場合にのみ、OSSに録音を保存できます。 クロスリージョン記録はサポートされていません。 詳細については、「OSSバケットの作成」をご参照ください。
ApsaraVideo Liveを有効化すると、ApsaraVideo LiveがデフォルトでOSSバケットにデータを書き込む権限を付与しているとみなされます。 したがって、ApsaraVideo Liveには、指定したバケットに録画を保存する権限があります。 権限が誤って削除された場合は、次の方法を使用して再構成できます。
コンソールで権限を設定します。 指定したバケットにビデオデータを保存する前に、ApsaraVideo LiveがOSSにビデオデータを書き込むことを許可する必要があります。 詳細については、「OSSのApsaraVideo Liveへの書き込み権限の付与」をご参照ください。
RAM (Resource Access Management) を使用して権限を設定します。 詳細については、「RAMユーザーの作成とRAMユーザーへの権限付与」をご参照ください。
ApsaraVideo VODで録音を保存
ApsaraVideo VODに録画を保存する前に、ApsaraVideo VODを有効化する必要があります。 ApsaraVideo VODを有効化するリージョンは、ストリーミングドメインのライブセンターが存在するリージョンと同じである必要があります。 詳細については、「ApsaraVideo VODの有効化」をご参照ください。
オーディオとビデオのエンコード形式
ApsaraVideo Liveは、最初にライブストリームをTSセグメントにスライスする必要があります。 したがって、取り込むライブストリームのオーディオおよびビデオのエンコード形式は、TS形式の要件を満たす必要があります。 FLV規格およびISO/IEC 13818-1規格によると、記録機能は次のエンコード形式のみをサポートしています。
ビデオ: H.264、HEVC、およびMPEG-4
オーディオ: AACとMP3
説明ライブストリームに、前述のいずれの形式でもエンコードされていないオーディオおよびビデオデータが含まれている場合、録音プロセスで次の予期しない例外が発生する可能性があります。
異常なライブストリーム
ApsaraVideo Liveは、次の要件を満たす通常のライブストリームから録画を生成できます。ライブストリームは、サポートされている形式のいずれかでエンコードされ、安定したフレームレートを持ち、単調および線形に増加するタイムスタンプを持ちます。 時折フレームレートが不安定になったりタイムスタンプがジャンプしたりするライブストリームの場合、ApsaraVideo liveは幅広い互換性により録画を生成することもできます。
ただし、取り込まれたライブストリームに次の重大な例外が発生した場合、ApsaraVideo Liveは録画を生成できない場合があります。ビデオフレームが長時間検出されない、タイムスタンプが単調かつ線形に増加しない、またはオーディオとビデオのヘッダーが欠落しています。
さまざまな記録方法とシナリオ
ApsaraVideo Liveは、次の録画方法を提供します。 シナリオに基づいて記録方法を選択できます。
記録方法 | シナリオ | 設定 | Storage |
ストリーム名を指定することで、指定したライブストリームを録画できます。 ドメイン名またはアプリケーション名を指定して、ライブストリームを記録することもできます。 |
| 2つのストレージメソッドがサポートされます。
| |
APIを呼び出して、録音の開始時間と終了時間を指定できます。 このようにして、ライブストリームをスケジュールどおりに記録できます。 | API操作の呼び出し | OSS | |
各ライブストリームの記録方法を制御するコールバックを設定できます。 | API操作の呼び出し | OSS | |
この方法を使用すると、ライブストリームはデフォルトでは記録されません。 APIを呼び出して、ライブストリームを手動で録画できます。 | API操作の呼び出し | OSS |
ドメイン名、アプリケーション、またはストリームレベルでの記録
ApsaraVideo Liveを使用すると、ドメイン名、アプリケーション、またはストリームレベルでライブストリームを録画できます。 ドメイン名またはアプリケーション名を指定して、ドメイン名またはアプリケーションの下にあるすべてのライブストリームを記録できます。 ストリーム名を指定してライブストリームを記録することもできます。
OSSまたはApsaraVideo VODに保存する録画を指定する複数の録画テンプレートを設定できます。 ただし、ライブストリームが複数の録画テンプレートと同時に一致できる場合、録画テンプレートは優先度に基づいて有効になります。 次の表に、優先度レベルを示します。 数値が低いほど優先度が高いことを示す。
優先度 | ドメイン名 | アプリ名 | ストリーム名 |
1 | ✓ | ✓ | ✓ |
2 | ✓ | ✓ | * |
3 | ✓ | * | * |
チェックマーク (✓) は、コンソールで設定する記録テンプレート、またはAPI操作を呼び出して設定する記録ルールで、パラメーターの値がアスタリスク (*) 以外であることを示します。
ライブストリームの録画をOSSとApsaraVideo VODの両方に保存することはできません。 次のセクションでは、OSSまたはApsaraVideo VODに録画を保存する方法について説明します。
記録をOSSに保存
ApsaraVideo Liveコンソール:
ApsaraVideo Liveコンソールを使用して録画をOSSに保存する方法については、「録画をOSSに保存する」をご参照ください。
API呼び出し:
AddLiveAppRecordConfig操作を呼び出して、記録ルールを設定します。 詳細については、「AddLiveAppRecordConfig」をご参照ください。
ストリーム取り込みを実行します。 詳細については、「ストリームの取り込み、ストリームのプル、およびストリーミング」をご参照ください。
次の表に、関連するその他のAPI操作について説明します。
API 操作
説明
ルールが不要になった場合、アプリケーションの記録設定を指定するルールを削除します。
すべての設定済みルールを照会します。
ApsaraVideo VODで録音を保存
ApsaraVideo Liveコンソール:
ApsaraVideo Liveコンソールを使用してApsaraVideo VODに録画を保存する方法については、「ApsaraVideo VODに録画を保存する」をご参照ください。
API呼び出し:
AddLiveRecordVodConfig操作を呼び出して、記録ルールを設定します。 詳細については、「AddLiveRecordVodConfig」をご参照ください。
ストリーム取り込みを実行します。 詳細については、「ストリームの取り込み、ストリームのプル、およびストリーミング」をご参照ください。
次の表に、関連するその他のAPI操作について説明します。
API 操作
説明
設定が不要になった場合は、live-to-VOD設定を削除します。
live-to-VOD設定を照会します。
スケジュールされたタスクに基づく自動記録
スケジュールされたタスクに基づく自動記録は、StreamNameパラメーターが指定されている場合にのみ有効です。
指定された期間内にライブストリームを記録する場合は、APIを呼び出して、スケジュールどおりにライブストリームを自動的に記録できます。
API呼び出し:
AddLiveAppRecordConfig操作を呼び出して、記録ルールを設定します。 詳細については、「AddLiveAppRecordConfig」をご参照ください。
ストリーム取り込みを実行します。 詳細については、「ストリームの取り込み、ストリームのプル、およびストリーミング」をご参照ください。
次の表に、関連するその他のAPI操作について説明します。
API 操作 | 説明 |
ルールが不要になった場合、アプリケーションの記録設定を指定するルールを削除します。 | |
すべての設定済みルールを照会します。 |
例
DomainNameがexample.com
に設定され、AppNameがliveApp ****
に設定され、StreamNameがliveStream ****
に設定されている録画タスクを作成したとします。 記録タスクは、UTCで2019-02-15 09:00:00から2019-02-15 21:00:00まで実行されます。 記録フォーマットは、M3U8およびMP4を含む。 RecordFormat.1.CycleDurationパラメーターが指定されていません。 この場合、M3U8フォーマットでの1回の記録の記録周期は、デフォルトで6時間です。 MP4フォーマットの1回分の記録周期は30分に設定されている。 記録は、endpoin t oss-cn-shanghai.aliyuncs.comにあるliveBucket **** という名前のOSSバケットに保存されます。
次のパラメーターを使用してAddLiveAppRecordConfig操作を呼び出します。
/?AppName=liveApp**** &DomainName=example.com &StreamName=liveStream**** &OssBucket=liveBucket**** &OssEndpoint=oss-cn-shanghai.aliyuncs.com &RecordFormat.1.Format=m3u8 &RecordFormat.2.Format=mp4 &RecordFormat.2.CycleDuration=1800 &StartTime=2019-02-15T01:00:00Z &EndTime=2019-02-15T13:00:00Z &<Common request parameters>
説明StartTimeパラメーターとEndTimeパラメーターの値はUTCにあります。 現地時間をUTCに変換することを忘れないでください。
ストリーム取り込みを実行します。
説明録画期間を指定した場合、ApsaraVideo Liveはライブストリームがその期間に取り込まれたときにのみ録画を開始します。
記録期間を指定するルールは、期間が終了すると無効になります。
オンデマンド記録
オンデマンド録画の原則は、ライブストリームが取り込まれると、ApsaraVideo liveがHTTPコールバックをプリセットAppServerに送信することです。 コールバックの内容に基づいてライブストリームを録画するかどうかを決定し、録画形式と録画サイクルを動的に変更できます。
次の図に示すAppServerを開発して、HTTPコールバックを受信し、ビジネスロジックに基づいて記録を開始するかどうかを判断する必要があります。
API呼び出し:
AddLiveAppRecordConfig操作を呼び出して、記録ルールを設定します。 OnDemandパラメーターを1に設定して、ApsaraVideo Liveがライブストリームを録画するかどうかを尋ねるHTTPコールバックを送信できるようにします。
AddLiveRecordNotifyConfig操作を呼び出して、OnDemandUrlパラメーターを設定します。
ストリーム取り込みを実行します。
AppServerは、オンデマンド記録のコールバックを受信し、ビジネスロジックに基づいてライブストリームを記録するかどうかを決定し、応答を送信します。
ApsaraVideo Liveは、AppServerからの応答に基づいて録画を開始するかどうかを決定します。
次の表に、オンデマンド録音に使用されるAPI操作を示します。
API 操作 | 説明 |
録音ルールを設定します。 | |
不要になったルールを削除します。 | |
すべての設定済みルールを照会します。 | |
ドメイン名の記録コールバックを設定します。これには、イベントコールバックとオンデマンド記録のコールバックが含まれます。 | |
ドメイン名に不要になった録音コールバック設定を削除します。 | |
ドメイン名の記録コールバック設定を照会します。 | |
ドメイン名の記録コールバック設定を更新します。 | |
オンデマンド記録のコールバック時に送信されるHTTPメッセージを定義します。 |
例
AddLiveAppRecordConfig操作を呼び出して、名前が
liveBucket ****
であるアプリケーションのドメイン名example.com
の下にあるすべてのライブストリームを自動的に記録するようにApsaraVideo Liveを設定します。/?AppName=liveApp**** &DomainName=example.com &OssBucket=liveBucket**** &OssEndpoint=oss-cn-shanghai.aliyuncs.com &RecordFormat.1.Format=m3u8 &<Common request parameters>
AddLiveRecordNotifyConfig操作を呼び出して、OnDemandUrlパラメーターを
http://example.aliyundoc.com
に設定します。/?DomainName=example.com &OnDemandUrl=http://example.aliyundoc.com &<Common request parameters>
ストリーム取り込みを実行します。
AppServerによって受信されたオンデマンド録音コールバックを確認します。 詳細については、「オンデマンド録音のコールバック」をご参照ください。
GET /?app=liveApp****&domain=example.com&stream=liveStream****&vbitrate=2000&codec=h264 HTTP/1.1 Host: demo.aliyundoc.com User-Agent: Go-http-client/1.1
コールバックの応答に基づいて記録を開始するかどうかを決定します。 詳細については、「オンデマンド録音のコールバック」をご参照ください。
次の応答を受信した場合、記録を開始します。
{ "ApiVersion" : "1.0", "NeedRecord" : true }
次の応答を受信した場合、記録を開始しないでください。
{ "ApiVersion" : "1.0", "NeedRecord" : false }
OnDemandUrlパラメーターが設定されていない場合、オンデマンド記録のコールバックは送信されません。 この場合、記録は生成されない。
AddLiveRecordNotifyConfig操作を呼び出して記録コールバックを設定する前に、AddLiveAppRecordConfig操作を呼び出して記録ルールを設定する必要があります。 それ以外の場合、記録タスクを開始できません。
手動録画
ApsaraVideo Liveを使用すると、ライブストリームを手動で録画できます。 ライブストリームを録画している場合は、ライブストリームの録画を手動で停止することもできます。
API呼び出し:
AddLiveAppRecordConfig操作を呼び出して、記録ルールを設定します。 OnDemandパラメーターを7に設定します。これは、取り込まれたライブストリームを自動的に録画しないことを指定します。
ストリーム取り込みを実行します。
RealTimeRecordCommand操作を呼び出して、記録を開始します。
(オプション) RealTimeRecordCommand操作を呼び出して、録音を停止します。
手動録音に使用するAPIの操作を次の表に示します。
API 操作 | 説明 |
録音ルールを設定します。 | |
不要になったルールを削除します。 | |
すべての設定済みルールを照会します。 | |
手動で録音を開始または停止します。 |
例
手動で録音を開始
ライブストリーム
example.com/liveApp****/liveStream****
が取り込まれている場合は、RealTimeRecordCommand操作を呼び出して録画を開始します。/?AppName=liveApp**** &DomainName=example.com &StreamName=liveStream**** &Command=start &<Common request parameters>
手動で録音を停止する
ライブストリーム
example.com/liveApp****/liveStream****
が録画中の場合は、RealTimeRecordCommand操作を呼び出して録画を停止します。/?AppName=liveApp**** &DomainName=example.com &StreamName=liveStream**** &Command=stop &<Common request parameters>
指定されたライブストリームが取り込まれていないか、存在しない場合、RealTimeRecordCommand操作を呼び出して手動で記録を開始すると、エラーが返されます。
ライブストリームを手動で録画した後に中断すると、録画が停止します。 さらに、ライブストリームに自動録画が設定されていない場合、ApsaraVideo liveは、ライブストリームの再開後に自動的に録画しません。
録音を取得する
ライブストリームの録画後、次の方法を使用して録画を取得できます。
方法1: ApsaraVideo Liveコンソールで録画を表示します。 詳細については、「録音の管理」をご参照ください。
方法2: DescribeLiveStreamRecordIndexFiles操作を呼び出して、特定の期間内のすべてのインデックスファイルを照会します。 StartTimeパラメーターとEndTimeパラメーターの値はUTCにあります。 現地時間をUTCに変換することを忘れないでください。
http(s)://live.aliyuncs.com/?Action=DescribeLiveStreamRecordIndexFiles &AppName=liveApp**** &DomainName=example.com &EndTime=2017-12-22T08:00:00Z &StartTime=2017-12-21T08:00:00Z &StreamName=liveStream**** &<Common request parameters>
方法3: AddLiveRecordNotifyConfig操作を呼び出して、録音が生成されるたびにHTTPリクエストを受信するようにコールバックを設定します。 ビジネス要件に基づいてリアルタイムで記録を処理できます。 そうするには、次の手順を実行します。
AddLiveRecordNotifyConfig操作を呼び出して、ドメイン名
aliyundoc.com
で録画が生成されるたびにhttp://example.aliyundoc.com
にコールバックを送信するようにApsaraVideo Liveを設定します。/?DomainName=aliyundoc.com &NotifyUrl=http://example.aliyundoc.com &<Common request parameters>
設定が完了すると、ライブストリーム
aliyundoc.com/live/teststream
からTS、MP4、またはFLVレコーディングが生成されると、次の例に似たコールバックが表示されます。POST / HTTP/1.1 Host: live.example.com User-Agent: Go-http-client/1.1 { "domain": "aliyundoc.com", "app": "live", "stream": "teststream", "uri": "live/teststream/0_2017-03-08-23:09:46_2017-03-08-23:10:40.flv", "duration": 69.403, "start_time": 1488985786, "stop_time": 1488985840 }
使用上の注意
ドメイン名、アプリケーション、またはストリームレベルでの自動記録、またはスケジュールされたタスクに基づく自動記録が有効になるかどうかを知りたい場合は、記録コールバックを設定できます。 詳細については、「ライブストリーム録画のコールバック」をご参照ください。
各録音をリアルタイムで処理する場合は、インデックスファイルを作成できます。 詳細については、「ライブストリーム録画」をご参照ください。
記録サイクルは、記録の最大長である。 ライブストリームの持続時間が記録サイクルを超える場合、複数の記録が生成される。 記録サイクルは15〜360分の値に設定できます。 ApsaraVideo Liveコンソールで録画テンプレートを設定するときに、録画サイクルを設定できます。 AddLiveRecordVodConfigを呼び出して、ApsaraVideo VODに録画されるライブストリームの録画サイクルを設定したり、AddLiveAppRecordConfigを呼び出して、OSSに録画されるライブストリームの録画サイクルを設定したりすることもできます。
ライブストリームが記録サイクル中に中断されるが、3分以内に再開される場合、ストリームは中断の前後で同じ記録に記録される。 ライブストリームが3分以上中断された場合にのみ、ライブストリームの新しい録音が生成されます。
ApsaraVideo Liveは、トリガーされたストリームプルをサポートします。 対応するドメイン名のストリーミングURLがストリーミングに使用されている場合、ApsaraVideo Liveは自動的にトリガーされてライブストリームをプルします。 誰もライブストリームを視聴していない場合、ApsaraVideo liveはライブストリームをオリジンからプルしません。 この場合、自動記録、オンデマンド記録、手動記録も無効となります。