apple/iOS, Documentation

[HLS] Adding alternate media to a playlist

lgvv 2024. 12. 3. 02:32

Adding alternate media to a playlist

https://developer.apple.com/documentation/http-live-streaming/adding-alternate-media-to-a-playlist

  • 기본 프레젠테이션에 대체가능한 플레이리스트를 지정.

목차

Overview

  • Multivariant 플레이리스트에 대체 미디어를 추가하면 제공자가 메인 프레젠테이션의 override 형태로 플레이리스트를 지정
  • 클라이언트는 오디오 및 비디오만 재생하고, 같은 미디어가 있는 경우 메인 프레젠테이션 억제.
  • 제공자가 중복 미디어(오디오 및 비디오)를 저장하거나 클라이언트가 하나만 필요할 때 모든 variant를 다운하지 않고, 프레젠테이션에서 여러 버전의 미디어 제공
  • 기존 컨텐츠를 리마스터링 없이도 후속적으로 추가 미디어 추가 가능.

Add alternate media

  • 아래는 오디오를 추가하는 예제
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="eng/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, DEFAULT=NO,URI="fre/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",LANGUAGE="sp",NAME="Espanol",AUTOSELECT=YES, DEFAULT=NO,URI="sp/prog_index.m3u8"


#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=195023,CODECS="avc1.42e00a,mp4a.40.2",AUDIO="audio"
lo/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=591680,CODECS="avc1.42e01e,mp4a.40.2",AUDIO="audio"
hi/prog_index.m3u8

EXT-X-MEDIA

  • 미디어 그룹 요소 식별. 미디어 선택 그룹의 모든 요소는 유사한 특성(동일 코덱, 동일한 최대 대역폭 등)을 가져야 함.

EXT-X-STREAM-INF

  • Multivariant 플레이리스트의 다음 URL이 플레이리스트를 식별하기 위함.

EXT-X-MEDIAEXT-X-STREAM-INF의 파라미터

EXT-X-MEDIA 태그는 다음과 같은 파라미터가 존재.

TYPE(필수)

  • 미디어 타입을 나타내는 string.
  • AUDIO, VIDEO, SUTION 및 CLOSED-CAPTION값만 유효함.

GROUP-ID(필수)

  • 미디어 선택 항목이 속한 그룹을 지정하는 값. string
    • 미디어에 사용되는 기본 언어를 식별하는 값 string.
  • Language(선택)

NAME (필수)

  • 미디어에 사영되는 기본언어를 설명하는 값 string.

AUTOSELECT (선택)

  • 명시적으로 클라이언트가 미디어를 선택하여 재생할 수 있음을 나타내는 값으로 string타입임. 유효한 값은 YES와 NO이며 DEFAULT태그가 YES인 경우 해당 값도 YES

DEFAULT (선택)

  • 사용자가 다른 옵션을 선택하지 않은 경우, 미디어를 선택해 재생해야 함을 나타내는 문자열로 YES, NO을 유효한 값으로 가짐.

INSTREAM-ID (Required for closed captions)

  • 미디어 재생 목록의 세그먼트 안에서 렌더링을 지정하는 string. TYPE 태그가 CLOSED-CAPTIONs인 경우 INSTREAM-ID에는 CC1, CC3, CC3, CC4 또는 SERVICEn 값 중 하나가 존재해야 함. 여기서 n은 1에서 63 사이의 수

ASSOC-LANGUAGE (선택)

  • 렌더링에 대한 언어 태그를 포함하는 string. ASSOC-LANGUAGE는 종종 LANGUGE 태그에 지정된 언어와 종종 다름.

CHANNELS (두 개의 renditions이 동일한 코덱을 갖지만, 채널 수가 다른 경우에 필수)

  • 미디어 세그먼트에 존재하는 독립적인 동시 오디오 채널의 최대 수를 나타내는 string.

URI (선택)

  • 미디어 플레이리스트 파일을 식별하는 URI를 포함하는 string. TYPE이 CLOSED-CAPTIONs이면 이 태그를 생략해야 하며, 해당 태그를 생략할 경우 미디어 내용이 기존에 속함.
  • URI 속성이 생략되면 EXT-X-MEDIA 태그는 미디어가 EXT-X-STREAM-INF 태그의 URI에 포함되어 있음을 나타 낼 수 있음.

EXT-X-STREAM-INF 태그는 아래와 같은 파라미터가 존재.

AUDIO (선택)

  • 프레젠테이션을 재생할 떄 사용할 수 있는 오디오 스트림 집함을 따옴표로 표시된 string.
  • 이 값은 TYPE 태그가 AUDIO인 Multivariant 플레이리스트의 다른 곳에 있는 EXT-X-MEDIA 태그의 GROUP-ID 값이 일치해야 함.

VIDEO (선택)

  • 프레젠테이션을 재생할 떄 사용할 수 있는 비디오 스트림 집함을 따옴표로 표시된 string.
  • 이 값은 TYPE 태그가 VDIEO인 Multivariant 플레이리스트의 다른 곳에 있는 EXT-X-MEDIA 태그의 GROUP-ID 값이 일치해야 함.

SUBTITLES (선택)

  • 프레젠테이션을 재생할 떄 사용할 수 있는 자막 스트림 집함을 따옴표로 표시된 string.
  • 이 값은 TYPE 태그가 SUBTITLES인 Multivariant 플레이리스트의 다른 곳에 있는 EXT-X-MEDIA 태그의 GROUP-ID 값이 일치해야 함.

CLOSED-CAPTIONS (선택)

  • 사용할 수 있는 CLOSED-CAPTIONS 집합을 나타내는 따옴표로 표시된 string 또는 NONE 값을 갖는 열거형.
  • 이 값은 TYPE 태그가 CLOSED-CAPTIONs인 Multivariant 플레이리스트의 다른 곳에 있는 EXT-X-MEDIA 태그의 GROUP-ID 값이 일치해야 함.
  • 코드나 비트전송률 변경하기 위해 여러 오디오 그룹을 가질 수 있음.
  • 그러나 각 오디오 그룹은 그 안에서 동일한 variant를 가져야 함.
    • 예를 들면, 한 오디오 그룹에 영어를 둘 수 없다면, 다른 그룹에도 둘 수 없음.
  • 아래 예제는 두개의 오디오 그룹을 정의
    • 하나는 높은 비트 전송율을 위한 것. 다른 하나는 낮은 전송율을 위한 것
    • 두 오디오 그룹은 동일한 언어를 사용하나, 사용 가능한 대역폭이 기초해 호출
#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="englo/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, DEFAULT=NO,URI="frelo/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-lo",LANGUAGE="es",NAME="Espanol",AUTOSELECT=YES, DEFAULT=NO,URI="splo/prog_index.m3u8"


#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="eng",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="eng/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="fre",NAME="Français",AUTOSELECT=YES, DEFAULT=NO,URI="fre/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-hi",LANGUAGE="es",NAME="Espanol",AUTOSELECT=YES, DEFAULT=NO,URI="sp/prog_index.m3u8"


#EXT-X-STREAM-INF:BANDWIDTH=195023,CODECS="mp4a.40.5", AUDIO="audio-lo"
lo/prog_index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=260000,CODECS="avc1.42e01e,mp4a.40.2", AUDIO="audio-lo"
hi/prog_index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=591680,CODECS="mp4a.40.2, avc1.64001e", AUDIO="audio-hi"
lo/prog_index.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=650000,CODECS="avc1.42e01e,mp4a.40.2", AUDIO="audio-hi"
hi/prog_index.m3u8

Combine Groups and Single Options

  • 플레이리스트에 그룹과 단일 스트림을 모두 가질 수 있음.
  • 이런 케이스는 종종 동일 오디오를 사용하는 여러 카메라의 각도가 존재할 때 사용
  • 비디오 스트림에 대한 그룹을 만든 다음 단일 오디오 스트림을 선언.
  • 아래 예제는 3개의 카메라 각도와 단일 오디오 스트림이 존재하는 예제.
#EXTM3U
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle1",AUTOSELECT=YES,DEFAULT=YES
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle2",AUTOSELECT=YES,DEFAULT=NO, URI="Angle2/500kbs/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle3",AUTOSELECT=YES,DEFAULT=NO, URI="Angle3/500kbs/prog_index.m3u8"


#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="en",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="eng/prog_index.m3u8"
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=754857,CODECS="mp4a.40.2,avc1.4d401e", VIDEO="500kbs",AUDIO="aac"
Angle1/500kbs/prog_index.m3u8
  • 서로 다른 비트전송율에 대해 서로 다른 스트림을 제공하기 위해 각기 다른 비디오 그룹 ID가 필요.
#EXTM3U
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="200kbs",NAME="Angle1",AUTOSELECT=YES,DEFAULT=YES
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="200kbs",NAME="Angle2",AUTOSELECT=YES,DEFAULT=NO, URI="Angle2/200kbs/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="200kbs",NAME="Angle3",AUTOSELECT=YES,DEFAULT=NO, URI="Angle3/200kbs/prog_index.m3u8"


#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle1",AUTOSELECT=YES,DEFAULT=YES
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle2",AUTOSELECT=YES,DEFAULT=NO, URI="Angle2/500kbs/prog_index.m3u8"
#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID="500kbs",NAME="Angle3",AUTOSELECT=YES,DEFAULT=NO, URI="Angle3/500kbs/prog_index.m3u8"


#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",LANGUAGE="en",NAME="English",AUTOSELECT=YES, DEFAULT=YES,URI="eng/prog_index.m3u8"


#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=300000,CODECS="mp4a.40.2,avc1.4d401e", VIDEO="200kbs",AUDIO="aac"
Angle1/200kbs/prog_index.m3u


#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=754857,CODECS="mp4a.40.2,avc1.4d401e", VIDEO="500kbs",AUDIO="aac"
Angle1/500kbs/prog_index.m3u8