HLS를 통해 라이브 YouTube 콘텐츠 제공

이 문서에서는 HTTP 실시간 스트리밍 (HLS) 프로토콜을 사용하여 인코더로 YouTube의 라이브 데이터를 스트리밍할 수 있습니다. 이 문서는 제품에 HLS 처리 지원을 추가하려는 인코더 공급업체 HLS 처리 방식은 높은 타겟 및 시청 시간이 필요한 높은 해상도의 화질과 고화질 이미지를 제공할 수 있습니다 간략한 설명 YouTube 라이브 스트리밍의 여러 처리 프로토콜 비교 스트리밍 지원에 대한 자세한 내용은 YouTube 라이브 스트리밍 처리 프로토콜 비교를 참조하세요.

HLS를 사용하여 실시간 데이터를 스트리밍하려면 인코더가 일련의 미디어를 전송해야 합니다. 재생목록 및 미디어 세그먼트를 YouTube의 HLS 엔드포인트에 HTTP PUT 또는 요청 POST개. 인코더의 관점에서 볼 때 YouTube HLS 엔드포인트는 수동 HTTP 서버인 것 같습니다.

각 미디어 세그먼트는 잠시 동안 실제 멀티미디어 콘텐츠를 1초에서 4초 사이로 스트리밍됩니다. 각 미디어 재생목록 에는 미디어 세그먼트를 올바른 스트림 순서로 다시 조립하는 방법이 설명되어 있습니다.

미디어 형식 요구사항

YouTube HLS 처리의 동영상 및 오디오 요구사항은 다음과 같습니다. 콘텐츠:

  • 동영상 및 오디오는 M2TS 형식으로 다중 처리되어야 합니다.
  • 지원되는 동영상 코덱은 H.264 및 HEVC입니다.
  • 최대 60fps의 프레임 속도가 지원됩니다.
  • 폐쇄형 GOP만 지원됩니다.
  • 지원되는 오디오 코덱은 AAC이며 단일 트랙 오디오만 지원됩니다.

자세한 요구사항은 미디어 세그먼트 섹션을 참고하세요.

HDR

HDR (High Dynamic Range) 동영상은 HEVC 코덱을 사용하여 지원되며 다음과 같은 추가 요구사항을 충족해야 합니다.

  • 지원되는 색상 표준은 휘도가 일정하지 않은 10비트 PQ 및 HLG입니다. 더 구체적으로 설명하면 다음과 같습니다.
    • 크로마 형식은 YUV 4:2:0 10비트여야 합니다.
    • 전달 함수는 PQ (SMPTE ST 2084라고도 함) 또는 HLG여야 합니다. (ARIB STD-B67이라고도 함).
    • 원색은 Rec 2020년.
    • 행렬 계수는 Rec 일정하지 않은 휘도
  • 제한된 범위 (또는 MPEG-range)와 전체 범위 (또는 JPEG-range) 샘플 모두 값이 지원됩니다. 범위는 콘텐츠에서 사용하는 샘플 값 범위입니다. 제한된 범위의 샘플 값은 좋습니다.

HLS 처리 URL 가져오기

YouTube API에서 HLS 처리 URL 가져오기

전체 처리 URL을 확인하려면 인코더가 YouTube 라이브 스트리밍 liveStream을 삽입하는 API 리소스를 속성:

"cdn": {
  "ingestionType": "hls",
  "frameRate": "variable",
  "resolution": "variable"
}

API 응답에서 cdn.ingestionInfo.ingestionAddress 필드는 기본 처리 URL, cdn.ingestionInfo.backupIngestionAddress 필드 백업 수집 URL을 지정합니다. 자세한 내용은 liveStreams 리소스.

YouTube 크리에이터 스튜디오에서 HLS 처리 URL 가져오기

YouTube 크리에이터 스튜디오 웹 인터페이스에서 크리에이터가 '만들기'를 클릭하면 '스트림'을 선택하면 YouTube에 '스트림 키' 영숫자 문자와 사용할 수 있습니다. 이 보안 키는 생성자와 YouTube로 스트리밍하기

다음과 같이 이 스트림 키에서 HLS URL을 구성할 수 있습니다.

https://a.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY&copy=0&file=

여기서 $STREAM_KEY는 웹 인터페이스에 표시되는 스트림 키입니다. 예를 들면 다음과 같습니다. https://a.upload.youtube.com/http_upload_hls?cid=abcd-efgh-ijkl-mnop-qrst&copy=0&file=

안정성을 높이기 위해 수집의 중복 두 번째 사본을 전송할 수 있습니다. 다음 백업 URL에 추가합니다.

https://b.upload.youtube.com/http_upload_hls?cid=$STREAM_KEY&copy=1&file=

백업은 기본 URL과 호스트 이름과 두 가지 차이점이 있습니다. 및 copy= 매개변수가 변경되었습니다. 백업 수집은 데이터 세트에서 반드시 방지해야 할 기본 처리와 다른 copy= 매개변수 값 스트림 손상을 가져올 수 있습니다.

HLS 처리 URL 작성

두 방법 중 하나를 사용하여 얻은 URL은 불완전한 템플릿입니다. 양쪽 끝 빈 file= 쿼리 매개변수를 사용합니다. 최종 URL을 만들려면 인코더가 미디어 재생목록 또는 미디어 세그먼트의 파일 이름을 URL 끝에 추가 file= 매개변수가 완료됩니다.

file= 매개변수의 값에는 다음 규칙이 적용됩니다.

  • 인코더는 각 오디오 녹음 파일로부터 미디어 재생목록 또는 미디어 세그먼트 파일 이름을 영숫자 문자, 밑줄, 슬래시, 하이픈, 마침표 다른 문자는 지원되지 않습니다.
  • 인코더는 파일 이름을 URL 인코딩해서는 안 됩니다.
  • 인코더는 파일 이름에 상대 또는 절대 경로 구성요소를 포함할 수 있습니다. 필수는 아닙니다 인코더에 경로 구성요소가 포함된 경우 같은 경우 미디어 세그먼트 파일 이름 내에서 동일한 경로를 참조해야 하므로 확인할 수 있습니다.

HLS 프로토콜 요구사항

미디어 재생목록과 인코더에서 전송한 미디어 세그먼트는 HTTP Live Streaming 2nd Edition 사양을 참조하세요.

HLS 사양은 미디어 재생목록과 마스터라는 두 가지 유형의 재생목록을 정의합니다. 재생목록 YouTube는 스트리밍 콘텐츠를 다양한 해상도로 트랜스코딩하기 때문에 인코더가 다른 비트 전송률로 콘텐츠를 YouTube 따라서 YouTube는 HLS 처리를 위한 미디어 재생목록만 지원합니다. 및 마스터 재생목록은 무시됩니다. 마스터 재생목록은 한 세트의 변형과 스트림은 각각 동일한 콘텐츠의 다른 버전을 설명합니다.)

인코더는 다음 요건을 충족해야 합니다.

  • 전송하려는 가장 높은 해상도의 인코딩된 스트림 하나만 사용자에게 게재된다는 점입니다 (단일 해상도 및 코덱).
  • mux 오디오 및 비디오
  • 모든 요청에 HTTPS 및 영구 연결을 사용합니다.

다음 섹션에는 미디어 재생목록에 대한 더 구체적인 요구사항이 나와 있습니다. 확인할 수 있습니다

미디어 재생목록

미디어 재생목록에는 다음에 연결할 수 있는 미디어 세그먼트 목록이 포함됩니다. 연속적이고 디코딩 가능한 멀티미디어 스트림을 나타냅니다. 미디어 재생목록은 미디어 세그먼트가 예상되는 서버와 이 세그먼트를 다시 조합된 스트림입니다.

요구사항

  • 미디어 재생목록 파일 이름은 .m3u8 또는 .m3u로 끝나야 합니다.

  • 스트림에 대해 전송된 첫 번째 미디어 재생목록은 순서 번호에서 시작해야 합니다. 0 및 순서 번호는 일정하게 증가해야 합니다.

  • EXT-X-MEDIA-SEQUENCE 태그는 첫 번째 미디어 세그먼트가 표시됩니다.

  • 미디어 재생목록에는 5개 이상의 미해결 세그먼트가 포함될 수 없습니다. 가 서버가 세그먼트를 수신하거나 확인하지 않은 경우 미완료 세그먼트입니다. 있습니다.

    뛰어난 세그먼트 외에 확인된 몇 가지 세그먼트도 포함하세요. 세그먼트를 만들 수 있습니다. 이렇게 하면 서버 측에서 미디어 재생목록이 손실되면 건너뛸 수 있습니다. 대상 예를 들어 확인된 세그먼트를 최대 2개, 최대 5개까지 포함할 수 있습니다. 각 미디어 재생목록에서 두드러지는 세그먼트의 수가 많았습니다

    서버는 세그먼트 업로드에 대한 200 (OK) 또는 202 (Accepted) 응답 가 202 응답은 세그먼트를 식별한 재생목록입니다.

  • 모든 미디어 세그먼트에 대해 업데이트된 미디어 재생목록을 전송하여 손실된 경우 빠르게 복구될 수 있습니다.

  • 서버가 미디어 세그먼트 수신을 확인하면 EXT-X-MEDIA-SEQUENCE 태그 값을 사용하여 미디어 재생목록이 너무 깁니다. 예를 들어 서버가 이미 다음 미디어 재생목록에는 여덟 번째, 9번째, 10번째 미디어 세그먼트가 있습니다.

  • EXT-X-KEYEXT-X-SESSION-KEY 태그는 지원되지 않습니다.

다음 목록은 인코더가 처리해야 하는 파일의 예를 보여줍니다. 전송:

Media Playlist file with seqnum #0
Media Segment file #0
Media Playlist file with seqnum #0-#1
Media Segment file #1
Media Playlist file with seqnum #0-#2
Media Segment file #2
Media Playlist file with seqnum #1-#3
Media Segment file #3
...

다음 예는 라이브 동영상 중간에 전송된 미디어 재생목록을 보여줍니다. 있습니다. 예시는 스트림 중간이므로 EXT-X-MEDIA-SEQUENCE 태그의 값이 0이 아닙니다.

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:2680

#EXTINF:3.975,
fileSequence2680.ts
#EXTINF:3.941,
fileSequence2681.ts
#EXTINF:3.975,
fileSequence2682.ts

미디어 세그먼트

다음 목록은 미디어 세그먼트의 요구사항을 나타냅니다.

  • 파일 이름
    • URL의 미디어 세그먼트 파일 이름에는 .ts 파일 이름이 있어야 합니다. 확장자가 포함되고 재생목록에 있는 파일 이름과 일치해야 합니다.
    • 미디어 세그먼트 파일 이름은 인코더 재부팅 시 고유해야 하며 스트리밍이 다시 시작됩니다.
  • 형식
    • 미디어 세그먼트는 M2TS 형식이어야 하며 자체적으로 초기화되어야 합니다.
    • 각 M2TS 세그먼트에는 하나의 MPEG-2 프로그램이 포함되어야 합니다.
    • M2TS 세그먼트에는 PAT와 PMT가 하나씩 포함되어야 하며, 처음 두 개의 세그먼트는 세그먼트의 전송 스트림 패킷은 PAT 및 PMT여야 합니다.
  • 콘텐츠
    • 동영상 및 오디오가 다중화되어야 합니다.
    • 지원되는 동영상 코덱은 H.264 및 HEVC입니다.
    • HDR과 HEVC가 지원됩니다 (HDR 요구사항 참고).
    • 최대 60fps의 프레임 속도가 지원됩니다.
    • 폐쇄형 GOP만 지원됩니다.
    • 지원되는 오디오 코덱은 AAC이며 단일 트랙 오디오만 지원됩니다.
    • 미디어 세그먼트의 재생 시간은 1~4로 설정하는 것이 좋습니다. 초 단위 시간으로 렌더링됩니다. 미디어 세그먼트는 재생 시간이 5초보다 긴 경우
    • 미디어 세그먼트는 HTTPS를 사용하는 TLS/SSL 레이어에서만 암호화해야 합니다. 다른 암호화 메커니즘은 지원되지 않습니다.

미디어 세그먼트 길이

HLS 처리는 높은 처리량이 필요한 프리미엄 콘텐츠에 사용될 것으로 고화질 및 해상도가 많죠. 일반적으로 HLS 처리는 RTMP-처리보다 지연 시간이 깁니다. 및 WebRTC 기반 처리입니다.

미디어 세그먼트 길이를 1~4초로 설정하는 것이 좋습니다. 미디어 세그먼트가 작을수록 높은 비용을 감수하더라도 지연 시간이 짧아질 수 있습니다. 리버퍼링 속도 및 인코딩 효율 저하를 일으킬 수 있습니다. 이전 섹션에서 설명했듯이 미디어 세그먼트는 5초 이하여야 합니다.

전송률

YouTube 도움말 센터 에는 비트 전송률 설정에 대한 가이드라인이 나와 있습니다.

HEVC는 일반적으로 동일한 수준에서 25~50% 더 많은 데이터 압축을 생성합니다. 동영상 품질은 H.264 대비입니다. 따라서 추천 범위는 HEVC와 함께 사용하여 대역폭을 절약할 수 있으며, 특히 4K 콘텐츠에 유용합니다.

기타 요구사항

  • 인코더는 다음을 사용하여 HTTP 요청에 User-Agent 헤더를 설정해야 합니다. 제조업체 이름, 모델 이름 및 모델명이 포함된 버전:

    User-Agent: <manufacturer> / <model> / <version>
    

자막

HLS 처리는 자막 전송을 위한 두 가지 옵션을 지원합니다.

  • 별도의 HTTP POST 요청을 사용하여 자막을 전송합니다. 이는 HLS 처리
  • 삽입된 608/708 자막은 H264를 사용하는 HLS 처리와 함께 작동합니다. 동영상 코덱을 지원하지만 HEVC 동영상 코덱을 사용하는 처리를 사용하지 않음 자세한 내용은 자세한 내용은 실시간 자막 요구사항을 참고하세요. 참조하세요.

HTTP 응답 코드

다음 섹션에서는 YouTube가 반환하는 응답 코드를 설명합니다. HLS를 사용하여 전달된 미디어 세그먼트 및 미디어 재생목록에 대한 응답입니다.

200 (OK)

HTTP 200 (OK) 응답은 PUT 또는 POST 요청에 대한 응답으로 YouTube 서버가 예상 작업을 수신하여 있습니다.

DELETE 요청에 대한 응답으로, HTTP 200 (OK) 응답은 YouTube 서버가 요청을 수신하고 무시했습니다. YouTube 서버는 클라이언트가 스트림의 리소스를 삭제할 필요가 없으며 DELETE 요청 실적을 위해 YouTube는 DELETE를 전송하지 않습니다.

202(허용됨)

HTTP 202 (수락됨) 응답은 YouTube 서버가 미디어 세그먼트를 포함하는 미디어 재생목록을 수신하기 전의 미디어 세그먼트입니다. 이는 클라이언트가 미디어 재생목록을 해당 미디어 세그먼트를 최대한 빨리 조정하여 해당 미디어 세그먼트의 처리가 지연되지 않도록 세그먼트입니다. 인코더가 업데이트된 최신 버전 모든 미디어 세그먼트의 미디어 재생목록입니다.

400 (Bad Request)

HTTP 400 (잘못된 요청) 응답은 다음 문제 중 하나를 나타냅니다. 발생:

  • 잘못된 URL
  • 재생목록을 파싱할 수 없거나 지원되지 않는 태그가 포함되어 있습니다.
401 (Unauthorized)

HTTP 401 (승인되지 않음) 응답은 YouTube HLS 엔드포인트의 기본 URL이 손상되었거나 만료되었습니다. 클라이언트 계속하려면 cid 매개변수를 업데이트해야 합니다.

405 (허용되지 않는 방법)

HTTP 405 (메서드가 허용되지 않음) 응답은 요청이 POST, PUT, DELETE 요청이 아닙니다.

500 (내부 서버 오류)

HTTP 500 (내부 서버 오류) 응답은 서버가 요청을 처리할 수 없습니다. 이 오류의 경우 인덱스 1과 1로 이루어진 지수로 백오프가 있습니다.