Dynamic Adaptive Streaming Over HTTP (DASH) パッケージングを使用すると、異なるビットレート、キャプションストリーム、およびオーディオストリームの複数のビデオストリームのマニフェストプレイリストを生成できます。 これにより、クライアントはネットワークの状態に基づいて、再生に最適なクリップをリクエストできます。 これにより、ネットワークのジッターが発生した場合のビデオ品質が大幅に向上します。 このトピックでは、DASHパッケージングワークフローを作成する方法について説明します。 その後、AddMedia オペレーションを呼び出すときにDASHパッケージングワークフローのIDを指定して、ワークフローを使用してビデオを処理できます。
使用上の注意
DASHパッケージングワークフローは、APIオペレーションを呼び出すことによってのみ作成できます。 ApsaraVideo Media Processing (MPS) コンソールでDASHパッケージングワークフローを作成することはできません。 ただし、作成されたDASHパッケージングワークフローは、MPSコンソールで表示および使用できます。 詳細については、AddMediaWorkflow をご参照ください。
手順
DASHパッケージングワークフローを作成します。 DASHパッケージングワークフローを作成する場合は、次の表に示すオブジェクトに注意してください。 ワークフローの作成に使用するAPIオペレーションの詳細については、AddMediaWorkflow をご参照ください。
説明複数回DASHパッケージングを実行する場合、ワークフローは1つだけ作成する必要があります。
オブジェクト
説明
トポロジー
有向非巡回グラフ (DAG) を使用して定義されたビジネスプロセス。
アクティビティ
トポロジーを構成するノード。 DASHパッケージングワークフローを作成する場合は、次の表に示すアクティビティに注意してください。
依存関係
トポロジーのエッジ。 エッジは、アクティビティ間の依存関係を示します。
表 1. DASHパッケージングアクティビティ
アクティビティ
説明
依存関係
出力マニフェストプレイリストの保存場所を指定します。
サポートされている親ノード: 開始
サポートされている子ノード: SubtitleGroup、AudioGroup、および VideoGroup
各キャプショングループのIDと言語を指定します。
サポートされている親ノード: PackageConfig
サポートされている子ノード: キャプションストリーム専用のトランスコード
各オーディオグループのIDと言語を指定します。
サポートされている親ノード: PackageConfig
サポートされている子ノード: オーディオストリーム専用のトランスコード
各ビデオグループのIDを指定します。
サポートされている親ノード: PackageConfig
サポートされている子ノード: ビデオストリーム専用のトランスコード
ビデオ、オーディオ、またはキャプションストリームを抽出します。
サポートされている親ノード: SubtitleGroup、AudioGroup、および VideoGroup
サポートされている子ノード: GenerateMasterPlayList
マニフェストプレイリストを生成します。
サポートされている親ノード: Transcode
サポートされている子ノード: レポート
AddMedia オペレーションを呼び出して、DASHパッケージングワークフローをトリガーします。 次の項目に注意してください。
AddMedia オペレーションを呼び出すときは、DASHパッケージングワークフローのIDを指定する必要があります。
キャプションストリームの抽出では、OverrideParams パラメーターを設定して、Transcode ノードで指定されたデフォルトのキャプションファイルのURLを上書きできます。 例:
{"subtitleTransNode":{"InputConfig":{"Format":"stl","InputFile":{"URL":"http://example-bucket-****.oss-cn-hangzhou.aliyuncs.com/package/subtitle/CENG.stl"}}}}。 この例では、sutitleTransNode はキャプションストリームを抽出するために使用されるノードです。ワークフローの TriggerMode パラメーターを NotInAuto に設定します。
シナリオ
この例では、MXF形式のソースファイルから2つのビデオストリームと3つのオーディオストリームが抽出されます。 ソースファイルは、MP4、FLV、M3U8、または TS 形式にすることもできます。 その後、2つのWebVTTキャプションストリームが抽出され、ビデオストリーム、オーディオストリーム、およびキャプションストリームのマニフェストプレイリストが生成されます。
出力場所とマニフェストプレイリストの名前を設定します。
マニフェストプレイリストファイルを保存するオブジェクトストレージサービス (OSS) バケットを指定します。
マニフェストプレイリストの場所を指定します。
マニフェストプレイリストの名前を指定します。
サンプルコード:
{ "Parameters" : { "Output" : "{\"Bucket\": \"exampleBucket****\",\"Location\": \"oss-cn-hangzhou\",\"MasterPlayListName\": \"{MediaId}/{RunId}/dash/master.mpd\"}" }, "Type" : "PackageConfig" }Output: マニフェストプレイリストの出力場所と名前。 詳細については、ワークフローアクティビティ をご参照ください。
Type: アクティビティタイプ。 この例では、この値は PackageConfig に設定されています。
サンプルコード:
"audio-cn-group" : {
"Name" : "audio-cn-group",
"Parameters" : {
"AdaptationSet" : "{\"Lang\":\"chinese\",\"Group\":\"AudioGroupChinese\"}"
},
"Type" : "AudioGroup"
}
Group: オーディオグループのID。 この例では、値は AudioGroupChinese に設定されています。
Type: アクティビティタイプ。 この例では、この値は AudioGroup に設定されています。
オーディオストリームを抽出します。
MXFソースファイルからオーディオストリームを抽出するには、ビデオストリームを削除する必要があります。
次のサンプルコードは、オーディオストリームを抽出するための Transcode アクティビティを定義しています。
"audioCNTransNode" : { "Name" : "audioCNTransNode", "Parameters" : { "Outputs" : "[{\"TemplateId\":\"d053297fc44f9DashTempla****\",\"AudioStreamMap\":\"0:a:0\",\"Video\":{\"Remove\":\"true\"}}]", "Representation" : "{\"Id\":\"chinese128k\",\"URI\":\"audiocn/cn-abc.mpd\"}" }, "Type" : "Transcode" }
ビデオストリームをグループ化します。
"video-group" : {
"Name" : "video-group",
"Parameters" : {
"AdaptationSet" : "{\"Group\":\"VideoGroup\"}"
},
"Type" : "VideoGroup"
}
ビデオストリームを抽出します。
MXFソースファイルからビデオストリームを抽出するには、オーディオストリームを削除する必要があります。
サンプルコード:
"videoTransSD" : { "Name" : "videoTransSD", "Parameters" : { "Outputs" : "[{\"TemplateId\":\"d861b90f6c0aed8f81095e5c5b85****\",\"Audio\":{\"Remove\":\"true\"}}]", "Representation" : "{\"Id\":\"476pSD\",\"URI\":\"videoSD/****.mpd\"}" }, "Type" : "Transcode" }この例では、カスタムトランスコーディングテンプレートのIDは d861b90f6c0aed8f81095e5c5b857cba です。 対応するAPIオペレーションを呼び出して、トランスコーディングテンプレートを作成できます。 コンテナー形式はMPDです。
Remove: 出力からオーディオストリームを削除するかどうかを指定します。 詳細については、パラメーターの詳細 をご参照ください。
URI: 抽出されたビデオストリームの名前と場所。
Type: アクティビティタイプ。 この例では、この値は Transcode に設定されています。
キャプションストリームをグループ化します。
キャプショングループのIDを指定します。
サンプルコード:
"subtitle-cn-group" : { "Name" : "subtitle-cn-group", "Parameters" : { "AdaptationSet" : "{\"Lang\":\"Chinese\", \"Group\":\"SubtitleENGroup\"}" }, "Type" : "SubtitleGroup" }Group: キャプショングループの名前。 この例では、値は SubtitleENGroup に設定されています。
Lang: キャプショングループの言語。
Type: アクティビティタイプ。 この例では、この値は SubtitleGroup に設定されています。
キャプションストリームを抽出します。
STL、TTML、または WebVTT 形式のキャプションをOSSにアップロードします。
サンプルコード:
"subtitleCNNode" : { "Name" : "subtitleCNNode", "Parameters" : { "InputConfig" : "{\"Format\":\"vtt\",\"InputFile\":{\"URL\":\"http://exampleBucket****.oss-cn-hangzhou.aliyuncs.com/test/Audio-SiHD.chs.vtt\"}}", "Representation" : "{\"Id\":\"subtitle-chinese\", \"URI\":\"subtitle/cn-xx.vtt\"}" }, "Type" : "Transcode" }InputConfig: キャプションファイルのURL。 AddMedia オペレーションを呼び出すときに OverrideParams パラメーターを設定することで、URLを上書きできます。
URI: 抽出されたキャプションストリームの場所。
Type: アクティビティタイプ。 この例では、この値は Transcode に設定されています。
マニフェストプレイリストを生成します。
抽出されたすべてのオーディオ、ビデオ、およびキャプションストリームのマニフェストプレイリストを生成します。
サンプルコード:
{ "Parameters" : { }, "Type" : "GenerateMasterPlayList" }Type: アクティビティタイプ。 この例では、この値は GenerateMasterPlayList に設定されています。
次のサンプルコードは、シナリオ全体のトポロジーを示しています。
{
// ... (code remains unchanged)
}
サンプルコード
DASHパッケージングワークフローを作成します。
メディアファイルを追加します。