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위의 출력으로 생성 된 파일은 분할 된 파일입니다. 이 출력과 아래 설명 된 다른 출력을 요청하면 서로 다른 대역폭을 대상으로하는 여러 개의 세그먼트 파일이 생성됩니다.

이 출력은 "segmented"유형, "ts"형식을 가지며 기본값은 "h264"비디오 코덱입니다. 세그먼트 화 된 각 출력에는 기본 출력으로 생성 된 M3U8 형식의 매니페스트 파일이 있으며 세그먼트는 출력의 파일 이름과 같이 이름이 지정됩니다. 분할 된 파일은 매니페스트와 함께 업로드되며 확장자 앞에 "-00001"접미사가 붙습니다. 이러한 출력은 클라이언트에서 .m3u8 파일을 참조하고 매니페스트와 동일한 위치에서 세그먼트 파일을 사용할 수 있는지 확인하여 표준 스트리밍에있는 그대로 사용할 수 있습니다. 재생 목록에서 여러 .m3u8 파일을 참조하여 적응 형 스트리밍을 지원할 수도 있습니다.

재생 목록

적응 형 비트 레이트 재생 목록을 직접 만들거나 Zencoder가 작업의 일부로 수행하도록 할 수 있습니다. 재생 목록을 만들려면 "재생 목록"유형을 사용하여 작업에 다른 출력을 추가하고 경로 (재생 목록 파일의 위치에 상대적인)와 스트림 소스를 지정합니다. 해당 출력의 레이블. 대역폭, 해상도 및 코덱도 지정할 수 있지만 기본적으로 소스에서 유추됩니다. 스트림 정보는 다른 출력과 마찬가지로 재생 목록으로 형식화되고 업로드됩니다.

이 재생 목록 파일은 위에서 생성 된 분할 된 출력을 참조하여 각 출력이 재생되어야하는 대역폭을 지정합니다. HLS를 지원하는 장치로이 파일을로드하면 사용 가능한 대역폭 변경에 따라 스트림을 조정할 수 있습니다.

스트림의 첫 번째 항목은 사용자가 파일을 열 때 사용되며 가장 적합한 스트림을 결정하기위한 테스트의 일부로 사용됩니다. 다른 항목의 순서는 관련이 없습니다.

HLS 출력 (비디오 포함) max_hls_protocol_version 4 이상은 이제 '키 프레임 매니페스트'라고도하는 I-Frame 재생 목록을 생성합니다. 기본적으로 파일 이름은 기본 매니페스트 파일과 동일하지만 "-iframe-index"가 추가됩니다. 예를 들어 파일 이름이 "master.m3u8"인 매니페스트의 경우 키 프레임 매니페스트의 이름은 "master-iframe-index.m3u8"이됩니다. 다음을 사용하여 재정의 할 수 있습니다. keyframe_manifest_filename . HLS 재생 목록 출력이 키 프레임 매니페스트가있는 "소스"스트림을 지정하면 해당 키 프레임 매니페스트가 자동으로 재생 목록에 EXT-XI-FRAMES-ONLY 스트림으로 포함됩니다.

{
    "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"
}

전체 그림

재생 목록에서 서로 다른 비트 전송률의 여러 출력을 지정하고 참조 할 수 있습니다. 이 설정은 Google의 가이드 라인과 일치합니다. 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 장치에서 생성 된 적응 비트 전송률 재생 목록을 재생하지만 VLC는 상대 URL 처리 오류로 인해 발생하지 않습니다. 매니페스트 파일의 디렉토리가 아닌 재생 목록 파일과 동일한 디렉토리에서 세그먼트 파일을 찾습니다.
  • 디코더 _ 비트 레이트 _ 캡파일의 목표 비트 전송률의 1.5 배로 설정됩니다. 디코더 _ 버퍼 _ 크기파일의 대상 비트 전송률의 3.5x에서 5x로 설정됩니다. 이러한 설정은 파일 전체에서 일관된 비트 전송률을 유지하는 데 도움이 되므로 세그먼트화된 세그먼트의 크기와 비트 전송률이 너무 많이 변하지 않습니다.
  • 분할 된 출력이 임시 저장소에 업로드되면 ZIP 아카이브 .