HTTP Live Streaming(HLS)パッケージングを使用すると、異なるビットレートの複数のビデオストリーム、字幕ストリーム、およびオーディオストリームのマニフェストプレイリストを生成できます。このようにして、ビデオコンテンツは、通常はTS形式の一連の小さなメディアファイルとして配信できます。各ファイルには短いビデオが含まれており、異なるビットレートと解像度の複数のバージョンのビデオが生成されます。これにより、ユーザーのネットワーク状況に基づいて、ストリーミングメディアのスムーズな再生が保証されます。 HLSパッケージングを実行するには、HLSパッケージングワークフローを作成する必要があります。次に、AddMediaオペレーションを呼び出すときにHLSパッケージングワークフローのIDを指定して、ワークフローを使用してビデオを処理できます。
手順
HLSパッケージングワークフローを作成します。 HLSパッケージングワークフローを作成するときは、次の表に示すオブジェクトに注意してください。ワークフローの作成に使用されるAPIオペレーションの詳細については、「AddMediaWorkflow」をご参照ください。
オブジェクト
説明
トポロジー
有向非巡回グラフ(DAG)を使用して定義されたビジネスプロセス。
アクティビティ
トポロジーを構成するノード。 HLSパッケージングワークフローを作成するときは、次の表に示すアクティビティに注意してください。
依存関係
トポロジーのエッジ。エッジは、アクティビティ間の依存関係を示します。
表 1:HLSパッケージングアクティビティ アクティビティ
説明
依存関係
出力マニフェストプレイリストを保存する場所を指定します。
サポートされている親ノード:開始
サポートされている子ノード:ビデオストリームのみのSubtitleGroup、AudioGroup、およびTranscode
各字幕グループのIDと言語を指定します。
サポートされている親ノード:PackageConfig
サポートされている子ノード:字幕ストリームのみのTranscode
各オーディオグループのIDと言語を指定します。
サポートされている親ノード:PackageConfig
サポートされている子ノード:オーディオストリームのみのTranscode
ビデオ、オーディオ、または字幕ストリームを抽出します。
サポートされている親ノード:PackageConfig、SubtitleGroup、およびAudioGroup。
サポートされている子ノード:GenerateMasterPlayList
マルチビットレートビデオストリーム、オーディオストリーム、および字幕ストリームを指定して、マニフェストプレイリストを生成します。
サポートされている親ノード:Transcode
サポートされている子ノード:レポート
AddMedia オペレーションを呼び出して、HLSパッケージングワークフローをトリガーします。次の項目に注意してください。
AddMediaオペレーションを呼び出すときは、HLSパッケージングワークフローのIDを指定する必要があります。
字幕ストリームの抽出では、OverrideParamsパラメーターを設定して、TranscodeアクティビティのWebVTTSubtitleURLパラメーターで指定された字幕ファイルのURLをオーバーライドできます。 Web Video Text Tracks(WebVTT)字幕ファイルのみがサポートされています。
ワークフローのTriggerModeパラメーターをNotInAutoに設定します。
シナリオ
この例では、MXF形式のソースファイルから2つのビデオストリームと3つのオーディオストリームが抽出されます。ソースファイルは、MP4、FLV、M3U8、またはTS形式にすることもできます。次に、2つのWebVTT字幕ストリームが抽出され、ビデオストリーム、オーディオストリーム、および字幕ストリームのマニフェストプレイリストが生成されます。
マニフェストプレイリストの出力場所と名前を指定する
マニフェストプレイリストファイルを保存するオブジェクトストレージサービス(OSS)バケットを指定します。
マニフェストプレイリストの場所を指定します。
マニフェストプレイリストの名前を指定します。
サンプルコード:
{ "Parameters" : { "Output" : "{\"Bucket\": \"processedmediafile\",\"Location\": \"oss-cn-hangzhou\",\"MasterPlayListName\": \"{MediaId}/{RunId}/hls/master.m3u8\"}" // マスタプレイリストの出力場所と名前を指定します。詳細については、「メディアワークフローでサポートされているメソッド」トピックの「PackageConfig」セクションを参照してください。 }, "Type" : "PackageConfig" // アクティビティタイプ。この例では、このパラメータはPackageConfigに設定されています。 }Output:マニフェストプレイリストの出力場所と名前。詳細については、「メディアワークフローでサポートされているメソッド」トピックの「PackageConfig」セクションをご参照ください。
Type:アクティビティタイプ。この例では、このパラメーターはPackageConfigに設定されています。
オーディオグループを指定する
オーディオグループのIDを指定します。 2つのオーディオストリームは同じオーディオグループに属しています。サンプルコード:
{
"Parameters" : {
"GroupId" : "audios" // オーディオグループのID。この例では、このパラメータはaudiosに設定されています。
},
"Type" : "AudioGroup" // アクティビティタイプ。この例では、このパラメータはAudioGroupに設定されています。
}GroupId:オーディオグループのID。この例では、このパラメーターはaudiosに設定されています。
Type:アクティビティタイプ。この例では、このパラメーターはAudioGroupに設定されています。
オーディオストリームを抽出する
MXFソースファイルからオーディオストリームを抽出するには、ビデオストリームを削除する必要があります。
出力オーディオストリームの構成:
コーデック:AAC
サンプルレート:48000 Hz
フォーマット:ステレオ
サンプルコード:
{ "Name" : "audio-extract-1", "Parameters" : { "Outputs" : "[{\"TemplateId\":\"S00000001-100020\",\"AudioStreamMap\":\"0:a:0\",\"Video\":{\"Remove\":\"true\"}}]", // オーディオストリームを抽出するために使用されるテンプレートのID。この例では、IDがS00000001-100020のテンプレートが使用されます。このテンプレートは、M3U8形式のオーディオファイルを抽出します。オーディオのビットレートは80 Kbit / sです。詳細については、「プリセットテンプレートの詳細」を参照してください。オーディオストリームのシーケンス番号。詳細については、「出力」セクションを参照してください。出力からビデオストリームを削除するかどうかを指定します。詳細については、「パラメータの詳細」を参照してください。 "ExtXMedia" : "{\"URI\": \"sd/audio-en.m3u8\",\"Name\": \"audio-en\",\"Language\": \"en-US\"}" // メディアプレイリストに関する情報。 URIパラメータは、メディアプレイリストの名前を指定します。詳細については、「パラメータの詳細」トピックの「ExtXMedia」セクションを参照してください。 }TemplateId:オーディオストリームを抽出するために使用されるテンプレートのID。この例では、IDがS00000001-100020のテンプレートが使用されます。このテンプレートは、M3U8形式のオーディオファイルを抽出します。オーディオのビットレートは 80 Kbit/s です。詳細については、「プリセットテンプレートの詳細」をご参照ください。
AudioStreamMap:オーディオストリームのシーケンス番号。詳細については、「パラメーターの詳細」トピックの「出力」セクションをご参照ください。
Remove:出力からビデオストリームを削除するかどうかを指定します。詳細については、「パラメーターの詳細」をご参照ください。
ExtXMedia:メディアプレイリストに関する情報。 URIパラメーターは、メディアプレイリストの名前を指定します。詳細については、「パラメーターの詳細」トピックの「ExtXMedia」セクションをご参照ください。
Type:アクティビティタイプ。この例では、このパラメーターはTranscodeに設定されています。
ビデオストリームを抽出する
MXFソースファイルからビデオストリームを抽出するには、オーディオストリームを削除する必要があります。サンプルコード:
{
"Name" : "video-extract",
"Parameters" : {
"Outputs" : "[{\"TemplateId\":\"1fe5393bdb7b2b883f0a0fc91e81****\",\"Audio\":{\"Remove\":\"true\"}}]", // この例では、IDが1fe5393bdb7b2b883f0a0fc91e81 ****のカスタムトランスコーディングテンプレートが使用されます。カスタムトランスコーディングテンプレートを作成するには、次の手順を実行できます。ApsaraVideo Media Processing(MPS)コンソールにログオンします。左側のナビゲーションペインで、[テンプレート管理]>[トランスコーディングテンプレート]を選択します。[エンコーディングテンプレート]ページの[カスタムテンプレート]タブで[テンプレートの作成]をクリックして、カスタムトランスコーディングテンプレートを作成します。次のビデオ構成に基づいてトランスコーディングパラメータを設定します。コーデック:H.264解像度:384×216プロファイル:メインビットレート:240 Kbit / s FPS:25ピクセル形式:YUV420P最大GOPサイズ:1セグメント長:4秒出力形式:M3U8出力からオーディオストリームを削除するかどうかを指定します。詳細については、「パラメータの詳細」を参照してください。
"MultiBitrateVideoStream" : "{\"URI\": \"sd/video1.m3u8\"}" // メディアプレイリストに関する情報。 URIパラメータは、メディアプレイリストの名前を指定します。「パラメータの詳細」
},
"Type" : "Transcode" // アクティビティタイプ。この例では、このパラメータはTranscodeに設定されています。
}この例では、IDが 1fe5393bdb7b2b883f0a0fc91e81**** のカスタムトランスコーディングテンプレートが使用されます。カスタムトランスコーディングテンプレートを作成するには、次の手順を実行できます。ApsaraVideo Media Processing(MPS)コンソール にログオンします。左側のナビゲーションペインで、 を選択します。 [エンコーディングテンプレート] ページの [カスタムテンプレート] タブで、[テンプレートの作成] をクリックして、カスタムトランスコーディングテンプレートを作成します。次のビデオ構成に基づいてトランスコーディングパラメーターを設定します。
コーデック:H.264
解像度:384 × 216
プロファイル:メイン
ビットレート:240 Kbit/s
FPS:25
ピクセル形式:YUV420P 最大 GOP サイズ:1 セグメント長:4秒
出力形式:M3U8
Remove:出力からオーディオストリームを削除するかどうかを指定します。詳細については、「パラメーターの詳細」をご参照ください。
MultiBitrateVIdeoStream:メディアプレイリストに関する情報。 URIパラメーターは、メディアプレイリストの名前を指定します。パラメーターの詳細
Type:アクティビティタイプ。この例では、このパラメーターはTranscodeに設定されています。
字幕グループを指定する
字幕グループのIDを指定します。 2つの字幕ストリームは同じ字幕グループに属しています。サンプルコード:
{
"Parameters" : {
"GroupId" : "subtitles" // 字幕グループのID。この例では、このパラメータはsubtitlesに設定されています。
},
"Type" : "SubtitleGroup" // アクティビティタイプ。この例では、このパラメータはSubtitleGroupに設定されています。
}GroupId:字幕グループのID。この例では、このパラメーターはsubtitlesに設定されています。
Type:アクティビティタイプ。この例では、このパラメーターはSubtitleGroupに設定されています。
字幕ストリームを抽出する
WebVTT字幕ファイルをOSSにアップロードします。サンプルコード:
{
"Name" : "subtitle-extract-1",
"Parameters" : {
"WebVTTSubtitleURL" : "http://example-bucket-****.oss-cn-hangzhou.aliyun-inc.com/ShawshankRedemption****.vtt", // 字幕ファイルのURL。 AddMediaオペレーションを呼び出すときにOverrideParamsパラメータを設定して、字幕ファイルのURLをオーバーライドできます。詳細については、「AddMedia」トピックの「リクエストパラメータ」セクションのOverrideParamsパラメータを参照してください。
"ExtXMedia" : "{\"URI\": \"zh/subtitle1-cn.m3u8\",\"Name\": \"subtitle-cn\",\"Language\": \"cn\"}" // メディアプレイリストに関する情報。 URIパラメータは、メディアプレイリストの名前を指定します。詳細については、「パラメータの詳細」トピックの「ExtXMedia」セクションを参照してください。
},
"Type" : "Transcode" // アクティビティタイプ。この例では、このパラメータはTranscodeに設定されています。
}WebVTTSubtitleURL:字幕ファイルのURL。AddMedia オペレーションを呼び出すときに OverrideParams パラメーターを設定して、字幕ファイルの URL をオーバーライドできます。詳細については、「AddMedia」トピックの「リクエストパラメーター」セクションの OverrideParams パラメーターをご参照ください。ExtXMedia:メディアプレイリストに関する情報。 URIパラメーターは、メディアプレイリストの名前を指定します。詳細については、「パラメーターの詳細」トピックの「ExtXMedia」セクションをご参照ください。
Type:アクティビティタイプ。この例では、このパラメーターはTranscodeに設定されています。
マニフェストプレイリストを生成する
抽出されたオーディオ、ビデオ、および字幕ストリームに基づいて、マニフェストプレイリストを生成します。サンプルコード:
{
"Parameters" : {
"MasterPlayList" : "{\"MultiBitrateVideoStreams\": [{\"RefActivityName\": \"video-extract\",\"ExtXStreamInfo\": {\"BandWidth\": \"1110000\",\"Audio\": \"audios\",\"Subtitles\": \"subtitles\"}}]}" // マスタプレイリストに関する情報。詳細については、「パラメータの詳細」トピックの「MasterPlayList」セクションを参照してください。マルチビットレートビデオストリーム。詳細については、「パラメータの詳細」トピックの「MasterPlayList」セクションを参照してください。ビデオストリームを抽出するアクティビティの名前。マルチビットレートビデオストリームの属性。 Audioパラメータはオーディオグループを指定し、Subtitlesパラメータは字幕グループを指定します。詳細については、「パラメータの詳細」トピックの「ExtXStreamInfo」セクションを参照してください。
},
"Type" : "GenerateMasterPlayList" // アクティビティタイプ。この例では、このパラメータはGenerateMasterPlayListに設定されています。
}MasterPlayList:マニフェストプレイリストに関する情報。詳細については、「パラメーターの詳細」トピックの「MasterPlayList」セクションをご参照ください。
MultiBitrateVideoStreams:マルチビットレートビデオストリーム。詳細については、「パラメーターの詳細」トピックの「MasterPlayList」セクションをご参照ください。
RefActivityName:ビデオストリームを抽出するアクティビティの名前。
ExtXStreamInfo:マルチビットレートビデオストリームの属性。 Audioパラメーターはオーディオグループを指定し、Subtitlesパラメーターは字幕グループを指定します。詳細については、「パラメーターの詳細」トピックの「ExtXStreamInfo」セクションをご参照ください。
Type:アクティビティタイプ。この例では、このパラメーターはGenerateMasterPlayListに設定されています。
完全なトポロジーのサンプルコード:
{
"Activities" : {
// ... (rest of the code remains unchanged)
}
}サンプルコード
HLSパッケージングワークフローを作成します。
メディアファイルを追加します。