サポートに連絡する| システムステータス
ページコンテンツ

    DASHストリーミングとプレイリスト

    このトピックでは、DASH 出力のジョブを構成する方法について説明します。

    はじめに

    DASH は、特定のビデオフォーマット、コーデック、またはデータに依存しないパッケージ形式(Zip など)ではないため、streaming_delivery_formatメディアを指定するための新しいオプションが導入されました。ファイルは、特定の規格に従って構造化/フォーマットする必要があります。に「ダッシュ」を選択すると、DASH との互換性のためのいくつかのデフォルトオプションが変更され、出力メディアファイルは DASH 要件に準拠したディレクトリ構造に配置されます。streaming_delivery_formatDASH メディア出力も「セグメント化」typeに設定して、メディアが DASH ストリーミング用に準備されるようにする必要があります。

    {
        "input": "http://s3.amazonaws.com/zencodertesting/test.mov",
        "outputs": [
        {
            "streaming_delivery_format": "dash",
            "video_bitrate": 700,
            "type": "segmented",
            "url": "s3://mybucket/dash-examples/sbr/rendition.mpd"
        }
        ]
    }

    「ダッシュ」streaming_delivery_formatに設定された出力の詳細:

    • fixed_keyframe_intervalが true に設定されます。
    • segment_secondsデフォルトは 2 です。
    • デフォルトのフォーマットはm4f ( mpdマニフェストファイルで) になります。

    セグメント化された DASH 出力のファイル構造:

    • mpdマニフェストファイルは出力のルートレベルにあります。
    • オーディオメディアとビデオメディアには、それぞれ独自のサブディレクトリ (「audio/und」と「video/1」) があります。
    • これらの各ディレクトリには、初期化データを持つinit.mp4 "" があります。
    • メディアデータは " seg-N.m4f " という名前のファイルに格納されます (N はゼロから始まり、セグメントごとに増加します)。

    「on_demand」streaming_delivery_profileに設定されたダッシュ出力では、セグメントではなく断片化されたメディアファイルが使用されます。

    • mpdマニフェストファイルは出力のルートレベルにあります。
    • オーディオメディアとビデオメディアは、マニフェストと同じディレクトリ内の 1 つのファイルになります。
    • メディアファイルの名前は、マニフェストと同様ですが、必要に応じて「-audio」または「-video」という接尾辞が追加されます。

    サポートされている DASH 構成:

    • サポートされている形式: m4fおよびwebm
    • サポートされているビデオコーデック: h264hevcvp8、、vp9
    • サポートされているオーディオコーデック: aacac3eac3、、vorbis
    • 現在、" webm " 形式の出力は「on_demand」のみをサポートしていますstreaming_delivery_profile
    • 現在、" webm " 形式の出力は DRM をサポートしていません。

    複数のビットレート

    Zencoder で生成された DASH 出力は、独自に再生するために必要な構造を備えますが、このようなストリーミング配信オプションの恩恵を真に享受するには、異なるビットレート (レンディション) で複数のバージョンを生成し、レンディションをリストする「プレイリスト」タイプの出力とともに、プレイヤーがは、現在のネットワーク状況に応じて、必要に応じてビットレートを切り替えられます。プレイリストの出力は従属出力です。つまり、ラベルによって他の出力を参照し、それらの出力からのデータを使用してプレイリストの最終的なレンディションを生成します。再生リストの出力でストリームパスを設定し、レンディションファイルの場所への相対パスになるように注意する必要があります。

    {
        "input": "http://s3.amazonaws.com/zencodertesting/test.mov",
        "outputs": [
        {
            "label": "dash-1200",
            "streaming_delivery_format": "dash",
            "video_bitrate": 1200,
            "type": "segmented",
            "url": "s3://mybucket/dash-examples/mbr/1200k/rendition.mpd"
        },
        {
            "label": "dash-700",
            "streaming_delivery_format": "dash",
            "video_bitrate": 700,
            "type": "segmented",
            "url": "s3://mybucket/dash-examples/mbr/700k/rendition.mpd"
        },
        {
            "label": "dash-400",
            "streaming_delivery_format": "dash",
            "video_bitrate": 400,
            "type": "segmented",
            "url": "s3://mybucket/dash-examples/mbr/400k/rendition.mpd"
        },
        {
            "streaming_delivery_format": "dash",
            "type": "playlist",
            "url": "s3://mybucket/dash-examples/mbr/manifest.mpd",
            "streams": [
            { "source": "dash-1200", "path": "1200k" },
            { "source": "dash-700",  "path": "700k" },
            { "source": "dash-400",  "path": "400k" }
            ]
        }
        ]
    }

    暗号化

    Zencoder は、Marlin または Playready ライセンスサーバーとの統合に必要なヘッダーを使用して、CENC 暗号化の DASH 出力の生成もサポートしています。出力ごとに、以下を含む drm オプションのハッシュを指定するだけです。methodkey_id、およびcontent_keykey_idおよびは、DRM ベンダーから取得するか、事前に生成して DRM content_keyベンダーに送信する必要があります。これらのキーを取得すると、単一レンディションの Zencoder API 構造は次のようになります。

    {
        "input": "http://s3.amazonaws.com/zencodertesting/test.mov",
        "outputs": [
        {
            "streaming_delivery_format": "dash",
            "video_bitrate": 700,
            "type": "segmented",
            "url": "s3://mybucket/dash-examples/sbr/rendition.mpd",
            "drm": {
                "method": "cenc",
                "key_id": "d57d416ccd454d5a08d05bff0742ee76",
                "content_key": "f15cae8f4e48a023056e1960ff2228b0"
            }
        }
        ]
    }

    コンテンツはで暗号化されcontent_key.mpdマニフェストファイルにはkey_idそのヘッダーに。ただし、この出力が確実に再生可能になるためには、の取得方法を指定するヘッダーも必要ですcontent_key。マルチビットレート DASH エンコードでは、これらのヘッダーはプレイリスト出力に追加するだけで済みますが、各レンディションに追加することもできます。そのため、レンディションは個別に再生できます。これを行うには、1 つ以上の DRM スキーマを追加します。

    
        "input": "http://s3.amazonaws.com/zencodertesting/test.mov",
        "outputs": [
        {
            "streaming_delivery_format": "dash",
            "video_bitrate": 700,
            "type": "segmented",
            "url": "s3://mybucket/dash-examples/sbr/rendition.mpd",
            "drm": {
                "method": "cenc",
                "key_id": "d57d416ccd454d5a08d05bff0742ee76",
                "content_key": "f15cae8f4e48a023056e1960ff2228b0",
                "schemas": [
                { "type": "marlin" },
                { "type": "playready", "license_acquisition_url": "https://playready.example.com/license_server/" }
                ]
            }
        }
        ]
    }

    次に、これをまとめて、マルチビットレート、DRM 暗号化の DASH ジョブを作成できます。

    {
        "input": "http://s3.amazonaws.com/zencodertesting/test.mov",
        "outputs": [
        {
            "label": "dash-1200",
            "streaming_delivery_format": "dash",
            "video_bitrate": 1200,
            "type": "segmented",
            "url": "s3://mybucket/dash-examples/mbr/1200k/rendition.mpd",
            "drm": {
                "method": "cenc",
                "key_id": "d57d416ccd454d5a08d05bff0742ee76",
                "content_key": "f15cae8f4e48a023056e1960ff2228b0"
            }
        },
        {
            "label": "dash-700",
            "streaming_delivery_format": "dash",
            "video_bitrate": 700,
            "type": "segmented",
            "url": "s3://mybucket/dash-examples/mbr/700k/rendition.mpd",
            "drm": {
                "method": "cenc",
                "key_id": "d57d416ccd454d5a08d05bff0742ee76",
                "content_key": "f15cae8f4e48a023056e1960ff2228b0"
            }
        },
        {
            "label": "dash-400",
            "streaming_delivery_format": "dash",
            "video_bitrate": 400,
            "type": "segmented",
            "url": "s3://mybucket/dash-examples/mbr/400k/rendition.mpd",
            "drm": {
                "method": "cenc",
                "key_id": "d57d416ccd454d5a08d05bff0742ee76",
                "content_key": "f15cae8f4e48a023056e1960ff2228b0"
            }
        },
        {
            "streaming_delivery_format": "dash",
            "type": "playlist",
            "url": "s3://mybucket/dash-examples/mbr/manifest.mpd",
            "streams": [
            { "source": "dash-1200", "path": "1200k" },
            { "source": "dash-700",  "path": "700k" },
            { "source": "dash-400",  "path": "400k" }
            ],
            "drm": {
                "method": "cenc",
                "key_id": "d57d416ccd454d5a08d05bff0742ee76",
                "content_key": "f15cae8f4e48a023056e1960ff2228b0",
                "schemas": [
                { "type": "marlin" },
                { "type": "playready", "license_acquisition_url": "https://playready.example.com/license_server/" }
                ]
            }
        }
        ]
    }
    

    transmuxing

    もちろん、ビデオの複数のフォーマットを生成することは高価で無駄になる可能性があります。したがって、Zencoder は、copy_videoおよびを使用して、同じエンコードされたストリームを異なる形式 (transmuxing と呼ばれる) に再パッケージ化をサポートしています。copy_audioオプション。ビデオがエンコードされずに変換される出力は、通常の時間の 1/4 で充電されます。したがって、同じビデオの複数の形式(MP4、HLS、DASH など)を作成する場合は、まず各ビットレートの MP4 バージョンをエンコードしてから、それらの出力を変換して HLS と DASH バージョンを作成できます。(ビデオはもはや単一のストリームではないため、セグメント化された形式からのトランスミューシングはサポートしていません)。

    MP4 が、後続のセグメント化されたストリーミング形式の制約に従って準備されるようにするには、MP4 prepare_for_segmenting出力のオプションも使用します。これにより、MP4 のビデオストリームをエンコードするときのキーフレームとキャプションのデフォルト値が制御され、後でセグメント化された形式への変換と互換性が保証されます。

    MP4 をトランスマルチアウトプット用のソースとして使用すると、プレイリスト出力と同様に動作します。別の出力のラベルに一致するソースオプションを指定しますが、今回はストリームハッシュではなく、メインレベルの出力オプションの一部です。

    {
        "input": "http://s3.amazonaws.com/zencodertesting/test.mov",
        "outputs": [
        {
            "label": "mp4-700k",
            "prepare_for_segmenting": ["hls", "dash"],
            "video_bitrate": 700,
            "url": "s3://mybucket/transmux-examples/sbr/video.mp4"
        },
        {
            "source": "mp4-700k",
            "copy_video": true,
            "copy_audio": true,
            "type": "segmented",
            "url": "s3://mybucket/transmux-examples/sbr/hls/video.m3u8"
        },
        {
            "source": "mp4-700k",
            "copy_video": true,
            "copy_audio": true,
            "streaming_delivery_format": "dash",
            "type": "segmented",
            "url": "s3://mybucket/transmux-examples/sbr/dash/video.mpd"
        }
        ]
    }

    配信の最適化

    DASH はストリーミング配信を目的としているので、各レンディションのビットレートのピークを制御して、プレーヤーがバッファを再バッファしたり、低ビットレートのエンコードに不必要に切り替えられないようにすることをお勧めします。デコーダ/プレーヤーが処理できる内容に応じてエンコードされたストリームの変動を制御するオプションは

    一般的な推奨事項は、decoder_bitrate_capビデオストリームで使用可能な最大ビットレートを設定することです。ファイル形式のオーバーヘッドだけでなく、オーディオも考慮する必要があることに注意してください。decoder_buffer_sizeは、技術的にはデコードデバイスで使用可能なビデオバッファメモリと一致するように想定されていますが、多くの場合、事前にバッファされるコンテンツの量を制御するためによく使用されます。これはの倍数として動作するためdecoder_bitrate_cap、たとえば 500(キロビット/秒)decoder_bitrate_capだった場合、decoder_buffer_size 1000 (キロビット) だった場合、バッファは 2 秒分のビデオを保存できます。また、video_bitrateより少し低く設定することをお勧めします。これによりdecoder_bitrate_cap、エンコーダが使用できます。より多くのデータを使用して複雑なシーンをエンコードし、単純なシーンではより少ないデータをエンコードします。適切な出発点は、ファイル形式に対して最大 10% のオーバーヘッドを想定し、video_bitrate 10% をよりも低く設定しdecoder_bitrate_cap、約1を許可することです。5.5 秒のビデオをバッファリングします。

    お客様が1000 Kbps接続を使用できると仮定します。

    • 1000 * 0.90 = 900 Kbps で、フォーマットのオーバーヘッドを 10% 引いた後に利用できます。
    • 900-128 = オーディオの 128 Kbps decoder_bitrate_capを引いた後の 772 Kbps のビデオ。
    • 772 * 1.5 = 1158 Kb decoder_buffer_size(1.5秒分のビデオの場合)。
    • 772 * 0.90 = 695 Kbps のターゲットビデオビットレート (より 10% 低いdecoder_bitrate_cap )。

    だから、より正確なストリーミングエンコードの例のために:

    {
        "input": "http://s3.amazonaws.com/zencodertesting/test.mov",
        "outputs": [
        {
            "label": "mp4-1000k",
            "prepare_for_segmenting": ["hls", "dash"],
            "audio_bitrate": 128,
            "decoder_bitrate_cap": 772,
            "decoder_buffer_size": 1158,
            "video_bitrate": 695,
            "url": "s3://mybucket/transmux-examples/sbr/video.mp4"
        },
        {
            "source": "mp4-1000k",
            "copy_video": true,
            "copy_audio": true,
            "type": "segmented",
            "url": "s3://mybucket/transmux-examples/sbr/hls/video.m3u8"
        },
        {
            "source": "mp4-1000k",
            "copy_video": true,
            "copy_audio": true,
            "streaming_delivery_format": "dash",
            "type": "segmented",
            "url": "s3://mybucket/transmux-examples/sbr/dash/video.mpd"
        }
        ]
    }

    それをすべてまとめる

    {
        "input": "http://s3.amazonaws.com/zencodertesting/test.mov",
        "outputs": [
        {
            "label": "mp4-1500k",
            "prepare_for_segmenting": ["hls", "dash"],
            "audio_bitrate": 128,
            "decoder_bitrate_cap": 1222,
            "decoder_buffer_size": 1833,
            "video_bitrate": 1100,
            "size": "1280x720",
            "url": "s3://mybucket/full-examples/mp4/1500.mp4"
        },
        {
            "label": "mp4-1000k",
            "prepare_for_segmenting": ["hls", "dash"],
            "audio_bitrate": 128,
            "decoder_bitrate_cap": 772,
            "decoder_buffer_size": 1158,
            "video_bitrate": 695,
            "size": "960x540",
            "url": "s3://mybucket/full-examples/mp4/1000.mp4"
        },
        {
            "label": "mp4-500k",
            "prepare_for_segmenting": ["hls", "dash"],
            "audio_bitrate": 128,
            "decoder_bitrate_cap": 322,
            "decoder_buffer_size": 483,
            "video_bitrate": 290,
            "size": "640x360",
            "url": "s3://mybucket/full-examples/mp4/500.mp4"
        },
        {
            "label": "hls-1500k",
            "source": "mp4-1500k",
            "copy_video": true,
            "copy_audio": true,
            "type": "segmented",
            "url": "s3://mybucket/full-examples/hls/1500.m3u8"
        },
        {
            "label": "hls-1000k",
            "source": "mp4-1000k",
            "copy_video": true,
            "copy_audio": true,
            "type": "segmented",
            "url": "s3://mybucket/full-examples/hls/1000.m3u8"
        },
        {
            "label": "hls-500k",
            "source": "mp4-500k",
            "copy_video": true,
            "copy_audio": true,
            "type": "segmented",
            "url": "s3://mybucket/full-examples/hls/500.m3u8"
        },
        {
            "type": "playlist",
            "url": "s3://mybucket/full-examples/hls/multi_bitrate_playlist.m3u8",
            "streams": [
            { "path": "1000.m3u8", "source": "hls-1000k" },
            { "path": "1500.m3u8", "source": "hls-1500k" },
            { "path": "500.m3u8", "source": "hls-500k" }
            ]
        },
        {
            "label": "dash-1500k",
            "source": "mp4-1500k",
            "copy_video": true,
            "copy_audio": true,
            "streaming_delivery_format": "dash",
            "type": "segmented",
            "url": "s3://mybucket/full-examples/dash/1500k/rendition.mpd",
            "drm": {
                "method": "cenc",
                "key_id": "d57d416ccd454d5a08d05bff0742ee76",
                "content_key": "f15cae8f4e48a023056e1960ff2228b0"
            }
        },
        {
            "label": "dash-1000k",
            "source": "mp4-1000k",
            "copy_video": true,
            "copy_audio": true,
            "streaming_delivery_format": "dash",
            "type": "segmented",
            "url": "s3://mybucket/full-examples/dash/1000k/rendition.mpd",
            "drm": {
                "method": "cenc",
                "key_id": "d57d416ccd454d5a08d05bff0742ee76",
                "content_key": "f15cae8f4e48a023056e1960ff2228b0"
            }
        },
        {
            "label": "dash-500k",
            "source": "mp4-500k",
            "copy_video": true,
            "copy_audio": true,
            "streaming_delivery_format": "dash",
            "type": "segmented",
            "url": "s3://mybucket/full-examples/dash/500k/rendition.mpd",
            "drm": {
                "method": "cenc",
                "key_id": "d57d416ccd454d5a08d05bff0742ee76",
                "content_key": "f15cae8f4e48a023056e1960ff2228b0"
            }
        },
        {
            "streaming_delivery_format": "dash",
            "type": "playlist",
            "url": "s3://mybucket/full-examples/dash/manifest.mpd",
            "streams": [
                { "source": "dash-1500k", "path": "1500k" },
                { "source": "dash-1000k", "path": "1000k" },
                { "source": "dash-500k",  "path": "500k" }
            ],
            "drm": {
                "method": "cenc",
                "key_id": "d57d416ccd454d5a08d05bff0742ee76",
                "content_key": "f15cae8f4e48a023056e1960ff2228b0",
                "schemas": [
                    { "type": "marlin" },
                    { "type": "playready", "license_acquisition_url": "https://playready.example.com/license_server/" }
                ]
            }
        }
        ]
    }

    ページの最終更新日14 Oct 2021