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

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

    HTTP ライブストリーミングを使用すると、利用可能な帯域幅に基づいて、ビデオまたはオーディオストリームをユーザーに簡単に適応させ、転送速度の変化に応じてストリームを途中で切り替えることができます。すべてのピースを引き出すのは混乱を招く可能性があるので、さまざまな帯域幅のための簡単なセグメント化されたファイルをいくつか作成する方法と、iOSデバイス上のユーザーにそれらを再生できるようにプレイリストを提供する方法を説明します。

    セグメント化されたファイル

    まず、いくつかのセグメント化されたファイルを作成することから始めます。各ファイルは特定の帯域幅を対象としています。これらの出力により、Zencoder はマニフェストファイルとセグメント化されたビデオファイルを作成します。これにより、プレーヤーはビデオの再生時に各ファイルを個別にダウンロードできます。

    {
        "audio_bitrate": 56,
        "audio_sample_rate": 22050,
        "base_url": "s3://my-bucket/",
        "decoder_bitrate_cap": 900,
        "decoder_buffer_size": 2400,
        "filename": "file-640k.m3u8",
        "max_frame_rate": 30,
        "public": 1,
        "type": "segmented",
        "video_bitrate": 600,
        "width": 400,
        "format": "ts"
    }

    m3u8上記の出力で作成されたファイルは、セグメント化されたファイルです。この出力と、次に説明する他の出力を要求すると、異なる帯域幅を対象とする複数のセグメントファイルが作成されます。

    この出力には、「セグメント化」の種類があり、フォーマットは「ts」で、デフォルトは「h264」のビデオコーデックになります。セグメント化された各出力には、メイン出力として作成された M3U8 形式のマニフェストファイルがあり、セグメントは出力のファイル名と同じ名前になります。セグメント化されたファイルは、マニフェストの横にアップロードされ、拡張子の前に「-00001」サフィックスを付けて名前が付けられます。これらの出力は、クライアントから.m3u8 ファイルを参照し、マニフェストと同じ場所からセグメントファイルを使用できるようにするだけで、標準ストリーミングでそのまま使用できます。アダプティブストリーミングをサポートするために、プレイリストから複数の.m3u8 ファイルを参照することもできます。

    プレイリスト

    適応ビットレートのプレイリストは自分で作成することも、ジョブの一部として Zencoder に実行させることも可能です。プレイリストを作成するには、「プレイリスト」のタイプを使用してジョブに別の出力を追加し、パス(プレイリストファイルの場所に対する相対パス)とストリームのソース(対応する出力のラベル)を指定して、1つまたは複数のストリームを指定します。帯域幅、解像度、コーデックも指定できますが、デフォルトではソースから推定されます。ストリーム情報はプレイリストにフォーマットされ、他の出力と同様にアップロードされます。

    このプレイリストファイルは、上記で作成したセグメント化された出力を参照し、各出力を再生する帯域幅を指定します。HLS をサポートするデバイスでこのファイルをロードすると、利用可能な帯域幅の変更に応じてストリームを調整できます。

    ストリームの最初のエントリは、ユーザーがファイルを開いたときに使用され、どのストリームが最も適切かを判断するためのテストの一部として使用されます。他のエントリの順序は関係ありません。

    max_hls_protocol_version が 4以上の HLS 出力 (ビデオ付き) は、「キーフレームマニフェスト」とも呼ばれるI-Frameプレイリストを生成するようになりました。デフォルトでは、ファイル名はメインマニフェストファイルと同じですが、「-iframe-index」が付加されます。たとえば、ファイル名が「master.m3u8」のマニフェストの場合、キーフレームマニフェストの名前は「master-iframe-index.m3u8」になります。これは keyframe_manifest_filename を使用してオーバーライドできます。HLS プレイリストの出力で、キーフレームマニフェストを持つ「ソース」ストリームが指定されている場合、そのキーフレームマニフェストは EXT-X-I-FRAMES のみのストリームとしてプレイリストに自動的に含まれます。

    {
        "base_url": "s3://my-bucket/",
        "filename": "playlist.m3u8",
        "public": 1,
        "streams": [
        {
            "bandwidth": 440,
            "path": "file-440k.m3u8"
        },
        {
            "bandwidth": 640,
            "path": "file-640k.m3u8"
        },
        {
            "bandwidth": 240,
            "path": "file-240k.m3u8"
        },
        {
            "bandwidth": 150,
            "path": "file-150k.m3u8"
        },
        {
            "bandwidth": 64,
            "path": "file-64k.m3u8"
        }
        ],
        "type": "playlist"
    }

    全体像

    プレイリストでは、異なるビットレートの複数の出力を指定し、参照することができます。これらの設定は、 iOSエンコーディングガイドに記載されているガイドラインと一致します。

    {
        "input": "s3://zencodertesting/test.mov",
        "output": [
        {
            "label": "hls-64",
            "audio_bitrate": 56,
            "audio_sample_rate": 22050,
            "base_url": "s3://my-bucket/",
            "filename": "file-64k.m3u8",
            "format": "aac",
            "public": 1,
            "type": "segmented"
        },
        {
            "label": "hls-240",
            "audio_bitrate": 56,
            "audio_sample_rate": 22050,
            "base_url": "s3://my-bucket/",
            "decoder_bitrate_cap": 300,
            "decoder_buffer_size": 800,
            "filename": "file-240k.m3u8",
            "max_frame_rate": 15,
            "public": 1,
            "type": "segmented",
            "video_bitrate": 200,
            "width": 400,
            "format": "ts"
        },
        {
            "label": "hls-440",
            "audio_bitrate": 56,
            "audio_sample_rate": 22050,
            "base_url": "s3://my-bucket/",
            "decoder_bitrate_cap": 600,
            "decoder_buffer_size": 1600,
            "filename": "file-440k.m3u8",
            "public": 1,
            "type": "segmented",
            "video_bitrate": 400,
            "width": 400,
            "format": "ts"
        },
        {
            "label": "hls-640",
            "audio_bitrate": 56,
            "audio_sample_rate": 22050,
            "base_url": "s3://my-bucket/",
            "decoder_bitrate_cap": 900,
            "decoder_buffer_size": 2400,
            "filename": "file-640k.m3u8",
            "public": 1,
            "type": "segmented",
            "video_bitrate": 600,
            "width": 480,
            "format": "ts"
        },
        {
            "label": "hls-1040",
            "audio_bitrate": 56,
            "audio_sample_rate": 22050,
            "base_url": "s3://my-bucket/",
            "decoder_bitrate_cap": 1500,
            "decoder_buffer_size": 4000,
            "filename": "file-1040k.m3u8",
            "public": 1,
            "type": "segmented",
            "video_bitrate": 1000,
            "width": 640,
            "format": "ts"
        },
        {
            "label": "hls-1540",
            "audio_bitrate": 56,
            "audio_sample_rate": 22050,
            "base_url": "s3://my-bucket/",
            "decoder_bitrate_cap": 2250,
            "decoder_buffer_size": 6000,
            "filename": "file-1540k.m3u8",
            "public": 1,
            "type": "segmented",
            "video_bitrate": 1500,
            "width": 960,
            "format": "ts"
        },
        {
            "label": "hls-2040",
            "audio_bitrate": 56,
            "audio_sample_rate": 22050,
            "base_url": "s3://my-bucket/",
            "decoder_bitrate_cap": 3000,
            "decoder_buffer_size": 8000,
            "filename": "file-2040k.m3u8",
            "public": 1,
            "type": "segmented",
            "video_bitrate": 2000,
            "width": 1024,
            "format": "ts"
        },
        {
            "base_url": "s3://my-bucket/",
            "filename": "playlist.m3u8",
            "public": 1,
            "streams": [
            {
                "source": "hls-2040",
                "path": "file-2040k.m3u8"
            },
            {
                "source": "hls-1540",
                "path": "file-1540k.m3u8"
            },
            {
                "source": "hls-1040",
                "path": "file-1040k.m3u8"
            },
            {
                "source": "hls-640",
                "path": "file-640k.m3u8"
            },
            {
                "source": "hls-440",
                "path": "file-440k.m3u8"
            },
            {
                "source": "hls-240",
                "path": "file-240k.m3u8"
            },
            {
                "source": "hls-64",
                "path": "file-64k.m3u8"
            }
            ],
            "type": "playlist"
        }
        ]
    }

    注意事項

    • プレイリストの生成は現在、ジョブ内の他の出力からの情報を使用しませんが、正しくフォーマットされた適応ビットレートのプレイリストを簡単に生成し、他のファイルとともにアップロードできる方法です。
    • iOS デバイスは、作成されたアダプティブビットレートプレイリストを再生しますが、相対URLの処理エラーにより、VLCは再生されません。これは、マニフェストファイルのディレクトリではなく、プレイリストファイルと同じディレクトリにあるセグメントファイルを探します。
    • decoder_bitrate_capは、ファイルのターゲットビットレートの 1.5 倍に設定されます。decoder_buffer_sizeは、ファイルのターゲットビットレートの 3.5 倍から 5 倍に設定されます。これらの設定は、ファイル全体で一貫したビットレートを維持し、セグメントセグメントのサイズとビットレートがあまり変化しないようにします。
    • セグメント化された出力が一時ストレージにアップロードされると、 ZIP アーカイブとしてアップロードされます

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