m3u8 소개
M3U8 유니코드 버전입니다 엠3유UTF-8로 인코딩되었습니다. "M3U"와 "M3U8" 파일은 모두 Apple에서 사용하는 HTTP 라이브 스트리밍(HLS) 프로토콜 형식의 기반이며, iPhone 및 Macbook과 같은 기기에서 재생할 수 있습니다.
위의 텍스트 정의는 다음에서 나옵니다.위키피디아보시다시피 m3u8 파일은 실제로 HTTP 라이브 스트리밍(HLS로 약칭) 프로토콜의 일부이며, HLS는 Apple에서 제안한 HTTP 기반 스트리밍 미디어 네트워크 전송 프로토콜입니다.
HLS는 전체 스트림을 작은 HTTP 기반 파일로 분할하여 다운로드하며, 한 번에 몇 개씩만 다운로드합니다. 미디어 스트림이 재생되는 동안 클라이언트는 다양한 소스에서 동일한 리소스를 각기 다른 속도로 다운로드할 수 있으므로, 스트리밍 세션이 다양한 데이터 속도에 맞춰 조정될 수 있습니다. 스트리밍 세션을 시작할 때 클라이언트는 사용 가능한 미디어 스트림을 찾기 위한 메타데이터가 포함된 확장된 M3U(m3u8) 재생 목록 파일을 다운로드합니다.
HLS는 기본 HTTP 메시지만 요청합니다. 실시간 전송 프로토콜(RTP)과 달리 HLS는 HTTP 데이터 통과를 허용하는 모든 방화벽을 통과할 수 있습니다.연기섬기는 사람콘텐츠 전송 네트워크를 사용하면 미디어 스트림을 전송하는 것도 쉽습니다.
간단히 말해, HLS는 차세대 스트리밍 미디어 전송 프로토콜입니다. HLS의 기본 구현 원리는 대용량 미디어 파일을 분할하고, 분할된 파일의 리소스 경로를 m3u8 파일(즉, 재생 목록)에 기록하고, 클라이언트에 추가 설명(예: 리소스의 다중 대역폭 정보 등)을 제공하는 것입니다. 클라이언트는 m3u8 파일을 기반으로 해당 미디어 리소스를 가져와 재생할 수 있습니다.
따라서 클라이언트는 주로 m3u8 파일을 파싱하여 HLS 스트림 파일을 얻습니다.
그럼, m3u8파일에 대해 간단히 소개해드리겠습니다.
M3U8 파일 소개
m3u8 파일은 실제로 재생 목록이며, 미디어 재생 목록이나 마스터 재생 목록일 수 있습니다. 재생 목록의 유형에 관계없이 파일 안의 텍스트는 UTF-8로 인코딩됩니다.
m3u8 파일을 미디어 재생 목록으로 사용하면 내부 정보에 일련의 미디어 세그먼트 리소스가 기록됩니다. 세그먼트 리소스를 순서대로 재생하면 멀티미디어 리소스를 모두 표시할 수 있습니다. 파일 형식은 다음과 같습니다.
#EXTM3U
#EXT-X-TARGET기간:10
#EXTINF:9.009,
http://media.example.com/first.ts
#EXTINF:9.009,
http://media.example.com/second.ts
#EXTINF:3.003,
http://media.example.com/third.ts
주문형 재생의 경우, 클라이언트는 위의 세그먼트 리소스를 순서대로 다운로드하여 하나씩 재생하기만 하면 됩니다. 라이브 스트리밍의 경우, 클라이언트는 정기적으로 m3u8 파일을 다시 요청하여 다운로드 및 재생해야 할 새로운 세그먼트 데이터가 있는지 확인해야 합니다.
m3u8을 마스터 재생 목록으로 사용하면 동일한 미디어 리소스에 대한 여러 스트림 목록 리소스(변형 스트림)를 제공합니다. 형식은 다음과 같습니다.
#EXTM3U
#EXT-X-STREAM-INF:대역폭=150000, 해상도=416x234, 코덱="avc1.42e00a,mp4a.40.2"
http://example.com/low/index.m3u8
#EXT-X-STREAM-INF:대역폭=240000, 해상도=416x234, 코덱="avc1.42e00a,mp4a.40.2"
http://example.com/lo_mid/index.m3u8
#EXT-X-STREAM-INF:대역폭=440000, 해상도=416x234, 코덱="avc1.42e00a,mp4a.40.2"
http://example.com/hi_mid/index.m3u8
#EXT-X-STREAM-INF:대역폭=640000, 해상도=640x360, 코덱="avc1.42e00a,mp4a.40.2"
http://example.com/high/index.m3u8
#EXT-X-스트림-INF:대역폭=64000,코덱="mp4a.40.5"
http://example.com/audio/index.m3u8
백업 스트림 리소스는 다양한 비트 전송률과 형식을 갖춘 다양한 미디어 재생 목록을 지정하고, 백업 스트림 리소스는 다양한 언어로 된 오디오 파일, 다양한 각도에서 촬영한 비디오 파일 등 다양한 버전의 리소스 콘텐츠를 동시에 제공할 수도 있습니다. 고객은 다양한 네트워크 상황에 맞춰 적절한 비트 스트림을 갖춘 리소스를 선택할 수 있으며, 사용자 선호도에 따라 적절한 리소스 콘텐츠를 선택하는 것이 가장 좋습니다.
위 내용은 m3u8 파일의 일반적인 내용입니다. 다음으로 m3u8 콘텐츠 형식을 설명하겠습니다.
m3u8 파일 형식
m3u8 파일 형식은 주로 세 가지 측면을 포함합니다.
파일 재생 목록 형식 정의: 재생 목록(m3u8 파일이라고도 함)의 내용은 사양 정의의 요구 사항을 엄격히 충족해야 합니다. 다음은 준수해야 할 주요 조건입니다.
m3u8 파일은 utf-8로 인코딩되어야 하며, 바이트 순서 표시(BOM) 바이트 순서를 사용할 수 없고, utf-8 제어 문자(U+0000 ~ U_001F 및 U+007F ~ u+009F)를 포함할 수 없습니다.
m3u8 파일의 각 줄은 URI, 빈 줄이거나 #로 시작합니다.끈명시적인 선언 요소를 제외하고는 공백 문자가 나타날 수 없습니다.
m3u8 파일에서 #로 시작하는 문자열은 주석이거나 태그입니다. 태그는 #EXT로 시작하며 대소문자를 구분합니다.
속성 목록: 특정 태그의 값은 속성 목록입니다. 태그 뒤의 속성 목록은 쉼표를 구분 기호로 사용하여 여러 속성/값 쌍을 공백 없이 구분합니다.
속성/값 쌍의 구문은 다음과 같습니다.
속성 이름=속성 값
안에:
속성 AttributeName은 [A..Z], [0..9], 그리고 -로 구성된 따옴표 없는 문자열입니다. 따라서 속성 AttributeName은 대문자만 사용할 수 있으며 소문자는 사용할 수 없습니다. 또한 AttributeName과 = 사이에는 공백이 들어갈 수 없습니다. 마찬가지로 =과 AttributeValue 사이에도 공백이 들어갈 수 없습니다.
AttributeValue의 값은 다음 유형만 될 수 있습니다.
10진수 정수: 따옴표가 없는 10진수 문자열로 [0..9]로 구성되며, 범위는 ~ (18446744073709551615)이고 문자 길이는 1~20입니다.
16진수 시퀀스: [0..9]와 [A..F]로 구성되고 0x 또는 0X 접두사가 붙은 따옴표 없는 문자열입니다. 시퀀스의 최대 길이는 속성 이름인 AttributeNames에 따라 달라집니다.
부호 있는 10진수 부동 소수점: [0..9], -, 및 .로 구성된 따옴표 없는 문자열.
문자열(따옴표로 묶인 문자열): 큰따옴표로 묶인 문자열. 0xA, 0xD 및 큰따옴표(" ")는 문자열에 사용할 수 없습니다. 문자열은 대소문자를 구분합니다.
열거형 문자열: AttributeName으로 정의된 따옴표 없는 문자열 시리즈입니다. 문자열에는 큰따옴표, 쉼표, 공백 문자가 포함될 수 없습니다.
십진 해상도: 문자 x로 구분된 두 개의 십진수. 첫 번째 정수는 가로 너비를, 두 번째 정수는 세로 높이를 나타냅니다(단위: 픽셀).
태그: 태그는 m3u8 파일의 글로벌 매개변수나 다음 슬라이스 파일/미디어 재생 목록의 일부 정보를 지정하는 데 사용됩니다.
태그에는 기본 태그, 미디어 세그먼트 태그, 미디어 재생목록 태그, 마스터 재생목록 태그, 재생목록 태그 등 다섯 가지 유형이 있습니다. 구체적인 내용은 다음과 같습니다.
기본 태그: 미디어 재생 목록과 마스터 재생 목록 모두에 적용됩니다. 구체적인 태그는 다음과 같습니다.
EXTM3U: 해당 파일이 m3u8 파일임을 나타냅니다. 각 M3U 파일은 첫 번째 줄에 이 태그를 추가해야 합니다.
EXT-X-VERSION: HLS의 프로토콜 버전 번호를 나타냅니다. 이 태그는 스트리밍 미디어의 호환성과 관련이 있습니다. 이 태그는 전역적으로 적용되며 전체 m3u8 파일을 활성화합니다. 각 m3u8 파일에는 이 태그의 정의가 최대 하나만 나타날 수 있습니다. m3u8 파일에 이 태그가 포함되어 있지 않으면 기본적으로 첫 번째 버전의 프로토콜이 사용됩니다.
미디어 세그먼트 태그: 각 세그먼트 URI 앞에는 해당 세그먼트를 설명하는 일련의 미디어 세그먼트 태그가 붙습니다. 일부 세그먼트 태그는 다음 세그먼트 리소스에만 유효하고, 다른 세그먼트 태그가 나타날 때까지 모든 후속 세그먼트에 유효합니다. 미디어 세그먼트 유형 태그는 마스터 재생 목록에 나타날 수 없습니다. 구체적인 태그는 다음과 같습니다.
EXTINF: 다음 URL에 지정된 미디어 세그먼트의 지속 시간(초)을 나타냅니다. 이 태그는 각 URL 미디어 세그먼트 앞에 지정해야 합니다. 이 태그의 형식은 다음과 같습니다.
#EXTINF:,[]<br>
안에:</p>
<p>기간: 10진수 정수 또는 부동 소수점 유형이 될 수 있으며, 값은 EXT-X-TARGETDURATION에서 지정한 값보다 작거나 같아야 합니다.<br>
참고: 지속 시간을 지정할 때는 항상 부동 소수점 값을 사용하는 것이 좋습니다. 이렇게 하면 클라이언트가 스트림 위치 지정 시 반올림 오류를 줄일 수 있습니다. 단, 호환 버전 번호 EXT-X-VERSION이 3 미만인 경우에는 정수 값을 사용해야 합니다.<br>
EXT-X-BYTERANGE: 이 태그는 다음 슬라이스 리소스가 후속 URI에 지정된 미디어 세그먼트 리소스의 로컬 범위임을 나타냅니다(즉, URI 미디어 리소스의 내용이 다음 슬라이스로 가로채집니다). 이 태그는 다음 URI에만 적용됩니다. 형식은 다음과 같습니다.</p>
<p>#EXT-X-바이트 범위:<n>[@<o>]<br>
안에:</p>
<p>n은 가로채는 세그먼트의 크기(바이트)를 나타내는 10진수 정수입니다.<br>
선택적인 매개변수 o 역시 십진수 정수이며, 가로채기의 시작 위치를 나타냅니다(바이트 단위로 표현, 가로채기는 URI에서 지정한 리소스의 시작 부분에서 바이트 위치를 옮긴 후에 수행됨).<br>
o가 지정되지 않으면 가로채기의 시작 위치는 이전 태그 가로채기의 다음 바이트(즉, 이전 n+o+1)입니다.<br>
이 태그가 지정되지 않으면 세분화 범위는 전체 URI 리소스 조각입니다.<br>
참고: EXT-X-BYTERANGE 태그를 사용하려면 호환 버전 번호 EXT-X-VERSION이 4 이상이어야 합니다.<br>
EXT-X-DISCONTINUITY: 이 태그는 이전 슬라이스와 다음 슬라이스 사이에 불연속성이 있음을 나타냅니다. 형식은 다음과 같습니다.</p>
<p>#EXT-X-불연속성<br>
다음 조건 중 하나라도 변경되면 이 태그를 사용해야 합니다.</p>
<p>파일 형식<br>
트랙의 번호, 유형, 식별자<br>
타임스탬프 시퀀스<br>
다음 조건 중 하나라도 변경될 때 이 태그를 사용해야 합니다.</p>
<p>인코딩 매개변수<br>
코딩 순서<br>
참고: EXT-X-DISCONTINUITY의 일반적인 사용 시나리오는 비디오 스트림에 광고를 삽입하는 것입니다. 비디오 스트림과 광고 비디오 스트림은 동일한 리소스가 아니므로, EXT-X-DISCONTINUITY는 두 스트림이 전환되는 시점을 나타내는 데 사용됩니다. 클라이언트가 이 태그를 인식하면 전환 중단 문제를 처리하여 더 나은 경험을 제공합니다.<br>
자세한 내용은 다음을 참조하세요: 재생 목록에 광고 통합</p>
<p>EXT-X-KEY: 미디어 세그먼트를 암호화할 수 있으며, 이 태그는 암호 해독 방법을 지정할 수 있습니다.<br>
이 태그는 다음 EXT-X-KEY가 나타날 때까지 EXT-X-MAP 태그로 선언된 모든 미디어 세그먼트와 그 주변의 모든 미디어 초기화 블록(미디어 초기화 섹션)에 유효합니다(m3u8 파일에 EXT-X-KEY 태그가 하나만 있는 경우 모든 미디어 세그먼트에 유효합니다).<br>
여러 개의 EXT-X-KEY 태그가 모두 동일한 키를 생성하는 경우 동일한 미디어 세그먼트에 적용할 수 있습니다.<br>
이 태그의 형식은 다음과 같습니다.</p>
<p>#EXT-X-키:<attribute-list><br>
속성 목록에는 다음 키가 포함될 수 있습니다.</p>
<p>METHOD: 이 값은 암호화 방법을 지정하는 열거 가능한 문자열입니다.<br>
이 키는 필수 매개변수입니다. 값은 NONE, AES-128, SAMPLE-AES 중 하나일 수 있습니다.<br>
안에:<br>
없음: 슬라이스가 암호화되지 않았음을 나타냅니다(이때 다른 속성은 나타날 수 없음).<br>
AES-128: 암호화에 AES-128이 사용됨을 나타냅니다.<br>
SAMPLE-AES: 미디어 세그먼트에 AES-128로 암호화된 오디오나 비디오와 같은 샘플 미디어가 포함되어 있음을 의미합니다. 이 경우 IV 속성이 존재할 수도 있고 존재하지 않을 수도 있습니다.</p>
<p>URI: 키 경로를 지정합니다.<br>
키는 16바이트 데이터입니다.<br>
METHOD가 NONE이 아닌 경우 이 키는 필수 매개변수입니다.</p>
<p>IV: 이 값은 128비트 16진수 값입니다.<br>
AES-128은 암호화와 복호화에 동일한 16바이트 IV 값을 사용해야 합니다. 다른 IV 값을 사용하면 암호의 강도를 높일 수 있습니다.<br>
속성 목록에 IV가 나타나면 해당 값을 사용합니다. 나타나지 않으면 기본적으로 미디어 세그먼트 시퀀스 번호(예: EXT-X-MEDIA-SEQUENCE)를 IV 값으로 사용하고, 빅 엔디언 바이트 순서를 사용하고 시퀀스 번호가 16바이트(128비트)에 도달할 때까지 왼쪽에 0을 채웁니다.</p>
<p>KEYFORMAT: 키 파일에 키가 저장되는 방식을 나타내는 큰따옴표로 묶인 문자열(키 파일의 AES-128 키는 이진 형식으로 저장된 16바이트 키입니다).<br>
이 속성은 선택 사항이며 기본값은 "identity"입니다.<br>
이 속성을 사용하려면 호환 버전 번호 EXT-X-VERSION이 5 이상이어야 합니다.</p>
<p>KEYFORMATVERSIONS: /로 구분된 하나 이상의 양의 정수 값으로 구성된 따옴표로 묶인 문자열(예: "1", "1/2", "1/2/5").<br>
하나 이상의 특정 KEYFORMT 버전이 정의된 경우, 이 속성을 사용하여 컴파일할 특정 버전을 나타낼 수 있습니다.<br>
이 속성은 선택 사항이며 기본값은 "1"입니다.<br>
이 속성을 사용하려면 호환 버전 번호 EXT-X-VERSION이 5 이상이어야 합니다.</p>
<p>EXT-X-MAP: 이 태그는 미디어 초기화 섹션을 얻는 방법을 지정합니다.<br>
이 태그는 다른 EXT-X-MAP 태그가 나타날 때까지 이후의 모든 미디어 세그먼트에 유효합니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-X-MAP:<attribute-list><br>
해당 속성 목록의 값 범위는 다음과 같습니다.</p>
<p>URI: 미디어 초기화 블록이 포함된 리소스의 경로를 지정하는 따옴표로 묶인 문자열입니다. 이 속성은 필수 매개변수입니다.</p>
<p>BYTERANGE: URI에서 지정한 리소스 내에서 미디어 초기화 블록의 위치(조각)를 지정하는 따옴표로 묶인 문자열입니다.<br>
이 속성으로 지정된 범위에는 미디어 초기화 블록만 포함되어야 합니다.<br>
이 속성은 선택적 매개변수입니다. 지정하지 않으면 URI에 지정된 리소스가 전체 미디어 초기화 블록임을 의미합니다.</p>
<p>EXT-X-PROGRAM-DATE-TIME: 이 태그는 절대 날짜/시간을 사용하여 첫 번째 샘플 세그먼트가 샘플링된 시점을 나타냅니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-X-프로그램-날짜-시간:<date-time-msec><br>
그 중 date-time-msec는 <a href="https://uzbox.com/ko/%ea%bc%ac%eb%a6%ac%ed%91%9c/-502" class="st_tag internal_tag" rel="tag" title="이소">ISO</a>/IEC 8601:2004에서 지정한 날짜 형식은 다음과 같습니다: YYYY-MM-DDThh:mm:ss.SSSZ.</p>
<p>EXT-X-DATERANGE: 이 태그는 일련의 속성/값 쌍으로 구성된 날짜 범위를 정의합니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-X-날짜 범위:<attribute-list><br>
속성 목록 값은 다음과 같습니다.</p>
<p>ID: 날짜 범위를 지정하는 큰따옴표로 묶인 고유 식별자입니다.<br>
이 속성은 필수 매개변수입니다.</p>
<p>클래스: 고객이 정의한 일련의 속성과 해당 의미 값으로, 큰따옴표로 묶습니다.<br>
동일한 CLASS 속성을 갖는 모든 날짜 범위는 해당 의미 체계를 준수해야 합니다.<br>
이 속성은 선택 사항입니다.</p>
<p>시작 날짜: 큰따옴표로 묶인 날짜 범위의 시작 값입니다.<br>
이 속성은 필수 매개변수입니다.</p>
<p>종료일: 큰따옴표로 묶인 날짜 범위의 종료 값입니다.<br>
이 속성 값은 START-DATE보다 크거나 같아야 합니다.<br>
이 속성은 선택 사항입니다.</p>
<p>기간: 날짜 범위의 기간은 소수점 부동 소수점 값입니다(단위: 초).<br>
이 속성 값은 음수일 수 없습니다.<br>
현재 시간을 표현할 때는 속성 값을 0으로 설정하면 됩니다.<br>
이 속성은 선택 사항입니다.</p>
<p>계획 기간: 이 속성은 날짜 범위의 예상 기간입니다.<br>
값은 10진수 부동 소수점 값 유형(단위: 초)입니다.<br>
이 속성 값은 음수일 수 없습니다.<br>
실제 기간을 미리 알 수 없는 경우, 이 속성을 사용하여 날짜 범위의 예상 기간을 추정할 수 있습니다.<br>
이 속성은 선택 사항입니다.</p>
<p>엑스-<client-attribute>: X- 접두사는 클라이언트가 정의한 속성에 예약된 네임스페이스입니다.<br>
클라이언트가 속성 이름을 사용자 정의하는 경우 그 반대입니다. <a href="https://uzbox.com/ko/%ea%bc%ac%eb%a6%ac%ed%91%9c/dns" class="st_tag internal_tag" rel="tag" title="DNS">DNS</a>충돌을 피하기 위한 (역방향 DNS) 구문입니다.<br>
사용자 정의 속성 값은 큰따옴표로 묶인 문자열이거나, 16진수 시퀀스이거나, 10진수 부동 소수점 숫자여야 합니다(예: X-COM-EXAMPLE-AD-ID="XYZ123").<br>
이 속성은 선택 사항입니다.</p>
<p>SCTE35-CMD, SCTE35-OUT, SCTE35-IN: SCTE35 데이터를 전송하는 데 사용됩니다.<br>
이 속성은 선택 사항입니다.</p>
<p>END-ON-NEXT: 이 속성 값은 열거 가능한 문자열이며, 값은 YES여야 합니다.<br>
이 속성은 범위의 끝에 도달했음을 나타냅니다. 즉, 이후 범위의 시작 위치인 START-DATE와 동일합니다. 이후 범위는 동일한 CLASS를 가진 태그의 START-DATE 이후 가장 빠른 START-DATE 값을 갖는 날짜 범위를 나타냅니다.<br>
이 속성은 선택 사항입니다.</p>
<p>미디어 재생 목록 유형 태그: 미디어 재생 목록 태그는 m3u8 파일의 글로벌 매개변수 정보입니다.<br>
이러한 태그는 m3u8 파일에서 최대 한 번 나타날 수 있습니다.<br>
미디어 재생 목록 태그는 마스터 재생 목록에 나타날 수 없습니다.<br>
미디어 재생 목록의 구체적인 태그는 다음과 같습니다.</p>
<p>EXT-X-TARGETDURATION: 각 비디오 세그먼트의 최대 지속 시간(초)을 나타냅니다.<br>
이 태그는 필수입니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-X-TARGET기간:<s><br>
여기서: 매개변수 s는 대상 지속 시간(단위: 초)을 나타냅니다.</p>
<p>EXT-X-MEDIA-SEQUENCE: 재생 목록의 첫 번째 URL 조각 파일의 시퀀스 번호를 나타냅니다.<br>
각 미디어 세그먼트 URL에는 고유한 정수 시퀀스 번호가 있습니다.<br>
각 미디어 세그먼트의 시퀀스 번호는 나타나는 순서대로 1씩 증가합니다.<br>
이 태그가 지정되지 않으면 기본 시퀀스 번호는 0부터 시작합니다.<br>
미디어 세그먼트 시퀀스 번호는 세그먼트 파일 이름과 관련이 없습니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-X-미디어-시퀀스:<number><br>
그 중 매개변수 번호는 슬라이스 시퀀스 번호입니다.</p>
<p>EXT-X-DISCONTINUITY-SEQUENCE: 이 태그는 EXT-X-DISCONTINUITY 태그를 사용하여 동일한 스트림과 다른 백업 스트림의 다양한 렌디션을 동기화할 수 있게 합니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-X-불연속성-순서:<number><br>
그 중 매개변수 번호는 10진수 정수 값입니다.<br>
재생 목록에 EXT-X-DISCONTINUITY-SEQUENCE 태그가 설정되지 않은 경우 첫 번째 세그먼트의 인터럽트 시퀀스 번호는 0이어야 합니다.</p>
<p>EXT-X-ENDLIST: m3u8 파일의 끝을 나타냅니다.<br>
이 태그는 m3u8 파일의 어느 곳에나 나타날 수 있으며, 보통은 파일 마지막에 나타납니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-X-ENDLIST<br>
EXT-X-PLAYLIST-TYPE: 스트리밍 미디어 유형을 나타냅니다. 전역적으로 적용됩니다.<br>
이 태그는 선택사항입니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-X-재생목록-유형:<type-enum><br>
그 중 type-enum 선택적 값은 다음과 같습니다.</p>
<p>VOD: 주문형 비디오(Video on Demand). 즉, 비디오 스트림이 주문형 비디오 소스이므로 서버가 m3u8 파일을 변경할 수 없습니다.</p>
<p>EVENT: 비디오 스트림이 진행 중임을 나타냅니다.<a href="https://uzbox.com/ko/%ea%bc%ac%eb%a6%ac%ed%91%9c/-1298" class="st_tag internal_tag" rel="tag" title="라이브 소스">라이브 소스</a>따라서 서버는 파일의 어떤 부분도 변경하거나 삭제할 수 없습니다(하지만 파일 끝에 새로운 내용을 추가할 수는 있습니다).<br>
참고: VOD 파일은 주문형 소스이므로 변경되지 않으므로 일반적으로 EXT-X-ENDLIST 태그가 있습니다. 반면 EVEVT 파일은 초기화 시 일반적으로 EXT-X-ENDLIST 태그가 없습니다. 이는 새 파일이 재생 목록 끝에 추가됨을 나타냅니다. 따라서 클라이언트는 EXT-X-ENDLIST 태그에 액세스할 때까지 새로운 미디어 세그먼트 리소스를 얻기 위해 주기적으로 m3u8 파일을 가져와야 합니다.</p>
<p>EXT-XI-FRAMES-ONLY: 이 태그는 각 미디어 세그먼트가 I-프레임임을 나타냅니다. I-프레임 프레임 비디오 인코딩은 다른 프레임의 개수에 의존하지 않으므로, 빠른 재생, 빠른 뒤집기 등에 I-프레임을 사용할 수 있습니다.<br>
이 태그는 전 세계적으로 적용됩니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-XI-프레임 전용<br>
재생 목록이 EXT-XI-FRAMES-ONLY로 설정된 경우 슬라이스의 지속 시간(EXTINF 태그의 값)은 현재 슬라이스 I-프레임의 시작부터 다음 I-프레임이 나타날 때까지의 지속 시간입니다.<br>
미디어 리소스에 I-프레임 슬라이스가 포함되어 있는 경우 미디어 초기화 블록을 제공하거나 EXT-X-MAP 태그를 통해 미디어 초기화 블록에 대한 액세스를 제공해야 합니다. 이렇게 하면 클라이언트가 이러한 I-프레임 슬라이스를 어떤 순서로든 로드하고 디코딩할 수 있습니다.<br>
I-프레임 슬라이스에 EXT-BYTE_RANGE가 설정된 경우 미디어 초기화 청크를 제공해서는 안 됩니다.<br>
EXT-XI-FRAMES-ONLY를 사용하려면 EXT-X-VERSION이라는 호환 버전 번호가 4 이상이어야 합니다.</p>
<p>마스터 재생 목록 유형 태그: 마스터 재생 목록은 백업 스트림, 다국어 번역 스트림 및 기타 글로벌 매개변수를 정의합니다.<br>
마스터 재생 목록 태그는 미디어 재생 목록에 나타나서는 안 됩니다.<br>
구체적인 태그는 다음과 같습니다.</p>
<p>EXT-X-MEDIA: 동일한 콘텐츠에 대한 대체 다국어 번역 재생 미디어 목록 리소스를 지정하는 데 사용됩니다.<br>
예를 들어, 세 개의 EXT-X-MEIDA 태그를 사용하여 영어, 프랑스어, 스페인어로 동일한 콘텐츠를 담은 오디오 리소스를 제공할 수 있으며, 두 개의 EXT-X-MEDIA 태그를 사용하여 두 가지 다른 촬영 각도를 담은 비디오 리소스를 제공할 수 있습니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-X-미디어:<attribute-list><br>
속성 목록의 값 범위는 다음과 같습니다.</p>
<p>TYPE: 속성 값은 열거 가능한 문자열입니다.<br>
값은 AUDIO, VIDEO, SUBTITLES, CLOSED-CAPTIONS의 4가지입니다.<br>
일반적으로 닫힌 자막이 사용됩니다.<br>
이 속성은 필수 매개변수입니다.</p>
<p>URI: 큰따옴표로 묶인 미디어 리소스 재생 목록 경로입니다.<br>
TYPE 속성 값이 CLOSED-CAPTIONS인 경우 URI는 제공되지 않습니다.<br>
이 속성은 선택 사항입니다.</p>
<p>GROUP-ID: 큰따옴표로 묶인 문자열로, 다국어 번역 흐름이 속한 그룹을 나타냅니다.<br>
이 속성은 필수 매개변수입니다.</p>
<p>언어: 스트림에서 사용되는 언어를 지정하는 큰따옴표로 묶은 문자열입니다.<br>
이 속성은 선택 사항입니다.</p>
<p>ASSOC-LANGUAGE: 다중 언어 스트림의 언어 버전 중 하나를 제공하는 언어 태그가 포함된 큰따옴표로 묶인 문자열입니다.<br>
이 매개변수는 선택 사항입니다.</p>
<p>NAME: 번역 스트림에 대한 사람이 읽을 수 있는 설명을 제공하는 데 사용되는 큰따옴표로 묶인 문자열입니다.<br>
LANGUAGE 속성이 설정된 경우 NAME 속성도 설정해야 합니다.<br>
이 속성은 필수 매개변수입니다.</p>
<p>기본값: 속성 값은 열거 가능한 문자열입니다.<br>
가능한 값은 YES와 NO입니다.<br>
이 속성이 지정되지 않은 경우 기본값은 NO입니다.<br>
이 속성을 YES로 설정하면 클라이언트는 다른 선택 정보가 없는 경우 번역된 스트림을 재생해야 합니다.<br>
이 속성은 선택 사항입니다.</p>
<p>AUTOSELECT: 속성 값은 열거 가능한 문자열입니다.<br>
유효한 값은 YES 또는 NO입니다.<br>
지정하지 않으면 기본값은 NO입니다.<br>
이 속성을 YES로 설정하면 사용자가 명시적으로 설정하지 않아도 클라이언트가 번역 스트림을 재생하도록 선택할 수 있습니다. 시스템 언어 선택과 같은 현재 재생 환경을 구성할 수 있기 때문입니다.<br>
이 속성이 설정된 경우 DEFAULT가 YES로 설정된 경우 이 속성도 YES로 설정해야 합니다.<br>
이 속성은 선택 사항입니다.</p>
<p>강제: 속성 값은 열거 가능한 문자열입니다.<br>
유효한 값은 YES 또는 NO입니다.<br>
지정하지 않으면 기본값은 NO입니다.<br>
이 속성은 TYPE이 SUBTITLES로 설정된 경우에만 설정할 수 있습니다.<br>
이 속성을 YES로 설정하면 번역 스트림에 중요한 콘텐츠가 포함되어 있음을 의미합니다. 이 속성을 설정하면 클라이언트는 현재 재생 환경에 가장 적합한 번역 스트림을 재생하도록 선택해야 합니다.<br>
이 속성을 NO로 설정하면 번역 스트림 콘텐츠가 사용자 표시 요청에 응답하는 데 사용됨을 나타냅니다.<br>
이 속성은 선택 사항입니다.</p>
<p>INSTREAM-ID: 슬라이스의 언어(Rendition) 버전을 나타내는 큰따옴표로 묶인 문자열입니다.<br>
TYPE이 CLOSED-CAPTIONS로 설정된 경우 이 속성을 설정해야 합니다.<br>
사용 가능한 값은 "CC1", "CC2", "CC3", "CC4" 및 "SERVICEn"입니다(n의 값은 1~63입니다).<br>
다른 TYPE 값의 경우 이 속성을 설정해서는 안 됩니다.</p>
<p>특성: 쉼표로 구분된 하나 이상의 UTI로 구성된 문자열이며 큰따옴표로 묶입니다.<br>
각 UTI는 번역 흐름의 특성을 나타냅니다.<br>
이 속성에는 개인 UTI가 포함될 수 있습니다.<br>
이 속성은 선택 사항입니다.</p>
<p>채널: 역슬래시(/)로 구분된, 큰따옴표로 묶인 정렬된 인수 목록으로 구성된 문자열입니다.<br>
모든 오디오 EXT-X-MEDIA 태그에는 CHANNELS 속성이 설정되어 있어야 합니다.<br>
마스터 재생 목록에 동일한 인코딩이지만 채널 수가 다른 두 개의 번역 스트림이 포함된 경우 CHANNELS 속성을 설정해야 합니다. 그렇지 않은 경우 CHANNELS 속성은 선택적 매개변수입니다.</p>
<p>EXT-X-STREAM-INF: 이 속성은 백업 소스를 지정합니다. 속성 값은 백업 소스에 대한 정보를 제공합니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-X-스트림-INF:<attribute-list><br>
<uri><br>
안에:</p>
<p>URI가 지정한 미디어 재생 목록에는 이 태그가 지정한 번역 백업 소스가 포함되어 있습니다.<br>
URI는 필수 매개변수입니다.</p>
<p>EXT-X-STREAM-INF 태그 매개변수 속성 목록에는 다음과 같은 옵션이 있습니다.</p>
<p>대역폭: 이 속성은 초당 전송되는 비트 수를 나타내며, 대역폭이라고도 합니다. 백업 스트림의 최대 속도를 나타냅니다.<br>
이 속성은 필수 매개변수입니다.</p>
<p>평균 대역폭: 이 속성은 백업 스트림의 평균 슬라이스 전송 속도입니다.<br>
이 속성은 선택 사항입니다.</p>
<p>코덱: 쉼표로 구분된 형식 목록을 포함하는 큰따옴표로 묶인 문자열입니다.<br>
각 EXT-X-STREAM-INF 태그는 CODEC 속성을 가져야 합니다.</p>
<p>해상도: 이 속성은 백업 스트림 비디오 소스의 최적 픽셀 해상도를 설명합니다.<br>
이 속성은 선택적 매개변수이지만, 비디오 소스가 포함된 백업 스트림에 이 속성 설정을 추가하는 것이 좋습니다.</p>
<p>프레임 속도: 이 속성은 백업 스트림의 모든 비디오의 최대 프레임 속도를 설명하기 위해 소수점 부동 소수점 값을 사용합니다.<br>
백업 스트림에서 프레임 속도가 초당 30프레임을 초과하는 모든 비디오 소스의 경우 이 속성 설정을 늘려야 합니다.<br>
이 속성은 선택적 매개변수이지만, 비디오 소스가 포함된 백업 스트림에 이 속성 설정을 추가하는 것이 좋습니다.</p>
<p>HDCP-LEVEL: 이 속성 값은 열거 가능한 문자열입니다.<br>
유효한 값은 TYPE-0 또는 NONE입니다.<br>
TYPE-0 값은 출력이 HDCP(고대역폭 디지털 콘텐츠 보호)로 보호되지 않으면 백업 스트림이 재생되지 않을 수 있음을 나타냅니다.<br>
NONE 값은 스트림 콘텐츠에 출력 복사 보호가 필요하지 않음을 나타냅니다.<br>
다양한 수준의 HDCP 암호화를 사용하는 백업 스트림은 서로 다른 미디어 암호화 키를 사용해야 합니다.<br>
이 속성은 선택 사항이며 HDCP가 없어 재생이 실패할 수 있는 경우 제공되어야 합니다.</p>
<p>AUDIO: 속성 값은 큰따옴표로 묶여 있어야 하며, 기본 재생 목록 어딘가에 정의된 AUDIO로 설정된 TYPE 속성을 가진 EXT-X-MEDIA 태그의 GROUP-ID 속성 값과 일치해야 합니다.<br>
이 속성은 선택 사항입니다.</p>
<p>VIDEO: 속성 값은 큰따옴표로 묶여 있어야 하며, 기본 재생 목록 어딘가에 정의된 VIDEO로 설정된 TYPE 속성을 가진 EXT-X-MEDIA 태그의 GROUP-ID 속성 값과 일치해야 합니다.<br>
이 속성은 선택 사항입니다.</p>
<p>자막: 속성 값은 큰따옴표로 묶여 있어야 하며, 메인 재생 목록 어딘가에 정의된 자막으로 설정된 TYPE 속성을 가진 EXT-X-MEDIA 태그의 GROUP-ID 속성 값과 일치해야 합니다.<br>
이 속성은 선택 사항입니다.</p>
<p>닫힌 캡션: 이 속성 값은 큰따옴표로 묶인 문자열이거나 없음일 수 있습니다.<br>
값이 문자열인 경우 마스터 재생 목록 어딘가에 정의된 CLOSED-CAPTIONS로 설정된 TYPE 속성을 가진 EXT-X-MEDIA 태그의 GROUP-ID 속성 값과 일치해야 합니다.<br>
값이 NONE이면 모든 ext-x-stream-inf 태그도 이 속성을 NONE으로 설정해야 합니다. 이는 메인 재생 목록의 백업 스트림 중 닫힌 제목이 없음을 나타냅니다. 한 백업 스트림에 닫힌 제목이 있는 경우 다른 백업 스트림에는 닫힌 제목이 없을 수 있으며, 이 경우 재생이 중단될 수 있습니다.<br>
이 속성은 선택 사항입니다.</p>
<p>EXT-XI-FRAME-STREAM-INF: 이 태그는 미디어 재생 목록 파일에 여러 미디어 리소스의 I-프레임 프레임이 포함되어 있음을 나타냅니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-XI-프레임-스트림-인포:<attribute-list><br>
이 태그의 속성 목록에는 FRAME-RATE, AUDIO, SUBTITLES, CLOSED-CAPTIONS를 제외하고 EXT-XI-FRAME-STREAM-INF 태그와 동일한 속성 목록 옵션이 포함되어 있습니다. 또한, 다음과 같은 속성이 있습니다.</p>
<p>URI: 이 속성 값은 큰따옴표로 묶인 문자열로, I-프레임 미디어 재생 목록 파일의 경로를 나타냅니다. 미디어 재생 목록 파일에는 EXT-XI-FRAMES-ONLY 태그가 포함되어야 합니다.<br>
EXT-X-SESSION-DATA: 이 태그를 사용하면 메인 재생 목록이 임의의 세션 데이터를 전달할 수 있습니다.<br>
이 태그는 선택사항입니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-X-세션-데이터:<attribute-list><br>
이 중 매개변수 속성 목록 값 옵션은 다음과 같습니다.</p>
<p>DATA-ID: 큰따옴표로 묶인 문자열로, 특정 데이터 값을 나타냅니다.<br>
이 속성은 "com.example.movie.title"과 같이 역방향 DNS를 사용하여 이름을 지정해야 합니다. 하지만 중앙 레지스트리가 없으므로 충돌이 발생할 수 있습니다.<br>
이 속성은 필수 매개변수입니다.</p>
<p>VALUE: 속성 값은 DATA-ID로 지정된 값을 포함하는 큰따옴표로 묶인 문자열입니다.<br>
LANGUAGE가 설정된 경우 VALUE에는 해당 언어로 사람이 읽을 수 있는 문자열이 포함되어야 합니다.</p>
<p>URI: 큰따옴표로 묶인 URI 문자열. URI로 지정된 리소스는 JSON 형식을 사용해야 합니다. 그렇지 않으면 클라이언트가 해당 리소스의 구문 분석에 실패할 수 있습니다.</p>
<p>LANGUAGE: VALUE에서 사용되는 언어를 나타내는 언어 태그를 포함하고 있는 큰따옴표로 묶인 문자열입니다.</p>
<p>EXT-X-SESSION-KEY: 이 태그를 사용하면 마스터 재생 목록이 미디어 재생 목록의 암호화 키를 지정할 수 있습니다. 이를 통해 클라이언트는 미디어 재생 목록에서 키를 가져오지 않고도 해당 키를 미리 로드할 수 있습니다.<br>
이 태그는 선택사항입니다.<br>
형식은 다음과 같습니다.<br>
#EXT-X-세션-키:<attribute-list><br>
속성 목록은 EXT-X-KEY와 동일하지만 METHOD 속성의 값은 NONE이어서는 안 됩니다.<br>
재생 목록 유형 태그: 다음 태그는 마스터 재생 목록과 미디어 재생 목록 모두에 설정할 수 있습니다.<br>
하지만 마스터 재생 목록에 설정된 태그는 마스터 재생 목록이 가리키는 미디어 재생 목록에 다시 설정되어서는 안 됩니다.<br>
두 재생 목록에 나타나는 동일한 태그는 동일한 값을 가져야 합니다. 이러한 태그는 한 재생 목록에 두 번 이상 나타날 수 없으며, 한 번만 사용할 수 있습니다. 구체적인 태그는 다음과 같습니다.</p>
<p>EXT-X-INDEPENDENT-SEGMENTS: 이 태그는 미디어 세그먼트의 모든 미디어 샘플이 다른 미디어 세그먼트 정보에 의존하지 않고도 독립적으로 디코딩될 수 있음을 나타냅니다.<br>
이 태그는 목록의 모든 미디어 세그먼트에 유효합니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-X-독립-세그먼트<br>
이 태그가 마스터 재생 목록에 나타나면 모든 미디어 재생 목록에 있는 모든 미디어 클립에 적용됩니다.</p>
<p>EXT-X-START: 이 태그는 재생 목록의 시작 위치를 나타냅니다.<br>
기본적으로 클라이언트가 재생 세션을 시작하면 이 태그로 지정된 위치를 재생에 사용해야 합니다.<br>
이 태그는 선택사항입니다.<br>
형식은 다음과 같습니다.</p>
<p>#EXT-X-시작:<attribute-list><br>
매개변수 속성 목록의 값 범위는 다음과 같습니다.</p>
<p>TIME-OFFSET: 이 속성 값은 부호 있는 10진수 부동 소수점 숫자입니다(단위: 초).<br>
재생 목록의 시작 부분으로부터의 시간 오프셋을 나타내는 양수입니다.<br>
음수는 재생 목록에서 미디어 세그먼트의 마지막 위치 이전의 시간 오프셋을 나타냅니다.<br>
이 속성의 절댓값은 재생 목록의 길이를 초과할 수 없습니다. 이 값을 초과하면 파일이 끝(양수 값) 또는 시작(음수 값)에 도달했음을 의미합니다.<br>
재생 목록에 EXT-X-ENDLIST 태그가 포함되어 있지 않으면 TIME-OFFSET 속성 값은 재생 파일의 끝에서 3개 슬라이스 이내에 있어서는 안 됩니다.</p>
<p>정확함: 값은 열거 가능한 문자열입니다.<br>
유효한 값은 YES 또는 NO입니다.<br>
값이 YES인 경우, 클라이언트는 TIME-OFFSET이 포함된 미디어 세그먼트를 재생해야 하지만, TIME-OFFSET보다 앞선 해당 청크 내의 샘플 청크는 렌더링하지 않아야 합니다.<br>
값이 NO인 경우, 클라이언트는 미디어 조각 내의 모든 샘플 청크를 렌더링하려고 시도해야 합니다.<br>
이 속성은 선택 사항이며 지정하지 않으면 NO로 간주됩니다.</p>
<p>이 시점에서 우리는 m3u8 관련 태그를 완전히 소개했습니다.</p>
<p>다음으로, 리소스 파일을 얻기 위한 구체적인 작업을 간략하게 소개하겠습니다.</p>
<p>위에서 언급했듯이 m3u8 파일은 미디어 재생 목록이거나 마스터 재생 목록입니다. 재생 목록의 유형에 관계없이 유효한 콘텐츠는 두 가지 구조로 구성됩니다.</p>
<p>#EXT로 시작하는 정보는 미디어 리소스에 대한 추가 설명으로 사용되는 태그 정보입니다.<br>
나머지는 리소스 정보로, 프래그먼트 리소스(미디어 재생 목록)의 경로이거나 m3u8 리소스(마스터 재생 목록)의 경로입니다.<br>
먼저 m3u8 파일 미디어 조각의 표현 방법을 간략하게 소개해 드리겠습니다.</p>
<p>m3u8 파일에서 미디어 세그먼트는 전체 경로로 표현될 수 있습니다. 아래와 같습니다.<br>
#EXTINF:10.0,<br>
<a href="http://example.com/movie1/fileSequenceA.ts" rel="nofollow">http://example.com/movie1/fileSequenceA.ts</a><br>
이렇게 하면 리소스 조각을 얻는 경로는 m3u8 파일에 지정된 경로, 즉 http://example.com/movie1/fileSequenceA.ts가 됩니다.</p>
<p>m3u8 파일에서는 미디어 세그먼트를 아래와 같이 상대 경로를 사용하여 표현할 수도 있습니다.<br>
#EXTINF:10.0,<br>
fileSequenceA.ts<br>
즉, 조각 파일의 경로는 m3u8 파일의 경로를 기준으로 합니다. 즉, m3u8의 현재 경로가 https://127.0.0.1/hls/m3u8이라면, 조각 파일 fileSequenceA.ts의 경로는 https://127.0.0.1/hls/fileSequenceA.ts가 됩니다.</p>
<p>m3u8 파일에서 미디어 조각 리소스 경로를 지정하는 데 절대 경로를 사용할 수 있지만, 상대 경로를 사용하는 것이 더 좋습니다. 상대 경로는 절대 경로보다 가벼우며 m3u8 파일의 URL을 기준으로 합니다. 반면, 절대 경로는 m3u8 파일 내용(문자 수 증가)을 늘리고, 파일 내용과 네트워크 전송량을 증가시킵니다.</p>
<p>기타 참고 사항<br>
m3u8 재생 목록을 요청하는 방법은 두 가지가 있습니다. 하나는 m3u8 URI를 통해 요청하는 것입니다. 이 경우 파일은 .m3u8 또는 .m3u로 끝나야 합니다.<br>
두 번째는 HTTP를 통해 요청을 하는 것입니다. 그러면 요청 헤더가<a href="https://uzbox.com/ko/%ea%bc%ac%eb%a6%ac%ed%91%9c/-365" class="st_tag internal_tag" rel="tag" title="콘텐츠">콘텐츠</a>-Type은 application/vnd.apple.mpegurl 또는 audio/mpegurl로 설정해야 합니다.</p>
<p>구문 분석 중에는 빈 줄과 주석 줄은 무시됩니다.</p>
<p>미디어 재생 목록에 있는 스트리밍 리소스의 총 지속 시간은 각 슬라이스 리소스의 지속 시간의 합계입니다.</p>
<p>각 슬라이스의 비트 전송률은 슬라이스 크기를 해당 지속 시간(EXTINF로 지정된 지속 시간)으로 나눈 값입니다.</p>
<p>동일한 속성 AttributeName은 태그의 속성 목록에 한 번만 나타날 수 있습니다.</p>
<p>EXT-X-TARGETDURATION에 지정된 지속 시간은 변경할 수 없습니다. 일반적으로 이 값은 10초로 지정됩니다.</p>
<p>EXT-X-FRAMES-ONLY를 지정하고 리소스가 미디어 초기화 블록을 즉시 전달하지 않는 슬라이스의 경우, 미디어 초기화 블록을 얻는 방법을 지정하기 위해 EXT-X-MAP 태그를 추가해야 합니다.</p>
<p>EXT-XI-FRAMES-ONLY 태그를 포함하는 EXT-X-MAP 태그를 사용하는 데 필요한 호환성 버전 번호 EXT-X-VERSION은 5 이상이어야 합니다. EXT-X-MAP만 사용하는 데 필요한 호환성 버전 번호는 6 이상이어야 합니다.</p>
<p>EXT-X-MAP 태그로 선언된 미디어 초기화 블록은 AES-128 방식으로 암호화할 수 있습니다. 이 경우, EXT-X-MAP 태그에 적용되는 EXT-X-KEY 태그는 IV 속성을 설정해야 합니다.</p>
<p>END-ON-NEXT=YES 속성을 가진 EXT-X-DATERANGE 태그는 CLASS 속성을 포함해야 하지만, DURATION 및 END-DATE 속성은 포함할 수 없습니다. 동일한 CLASS 속성을 가진 다른 EXT-X-DATERANGE 태그는 겹치는 날짜 범위를 지정할 수 없습니다.</p>
<p>날짜 범위에 DURATION, END_DATE, END-ON-NEXT=YES 속성이 지정되지 않으면 PLANNED-DURATION 속성이 설정되어 있어도 해당 기간을 알 수 없습니다.</p>
<p>재생 목록에 EXT-X-DATERANGE 태그가 설정되면 EXT-X-PROGRAM-DATE-TIME 태그도 설정해야 합니다.</p>
<p>재생 목록에 동일한 ID 속성 값을 갖는 두 개의 EXT-X-DATERANGE 태그가 설정된 경우, 동일한 속성 이름에 대한 두 개의 EXT-X-DATERANGE 태그의 해당 값은 일관성이 있어야 합니다.</p>
<p>EXT-X-DATERANGE가 DURATION 및 END-DATE 속성을 모두 설정하는 경우 END-DATE 속성 값은 START-DATE 속성 값에 DURATION 속성 값을 더한 값과 같아야 합니다.</p>
<p>EXT-X-MEDIA-SEQUENCE 태그는 재생 목록의 첫 번째 세그먼트 앞에 나타나야 합니다.</p>
<p>EXT-X-DISCONTINUITY-DEQUENCE 태그는 재생 목록의 첫 번째 세그먼트 앞에 나타나야 합니다.</p>
<p>EXT-X-DISCONTINUITY-DEQUENCE 태그는 모든 EXT-X-DISCONTINUITY 태그보다 먼저 나타나야 합니다.</p>
<p>m3u8 파일에 EXT-X-PLAYLIST-TYPE 태그가 설정되어 있지 않으면 재생 목록은 언제든지 수정할 수 있습니다. 예를 들어, 재생 목록의 미디어 세그먼트를 업데이트하거나 삭제할 수 있습니다.</p>
<p>각 EXT-XI-FRAME-STREAM-INF 태그에는 BANDWIDTH 및 URI 속성이 포함되어야 합니다.</p>
<p>각 EXT-X-SESSION-DATA 태그에는 VALUE 또는 URI 속성 중 하나가 포함되어야 하지만 둘 다 포함되어서는 안 됩니다.</p>
<p>재생 목록에는 동일한 DATA-ID 속성을 가진 여러 개의 EXT-X-SESSION-DATA 태그가 포함될 수 있지만, 동일한 DATA-ID 및 동일한 LANGUAGE 속성을 가진 여러 개의 EXT-X-SESSION-DATA 태그가 포함될 수는 없습니다.</p>
<p>EXT-X-SESSION-KEY가 설정된 경우 해당 METHOD, KEYFORMAT 및 KEYFORMATVERSIONS 속성 값은 동일한 URI에 대한 모든 EXT-X-KEY 태그의 속성 값과 동일해야 합니다.</p>
<p>여러 개의 대체 스트림이나 여러 언어 스트림이 동일한 암호화 키와 형식을 사용하는 경우 EXT-X-SESSION-KEY 태그를 설정해야 합니다.</p>
<p>마스터 재생 목록은 동일한 METHOD, URI, IV, KEYFORMAT 및 KEYFORMATVERSIONS 속성 값을 갖는 여러 개의 EXT-X-SESSION-KEY 태그를 설정해서는 안 됩니다.</p>
<h3 class="typography-headline"><span id="HTTP"><a href="https://developer.apple.com/streaming/"><span>HTTP 라이브 스트리밍이 무엇인지 이해하세요</span></a></span></h3><div class="kk-star-ratings kksr-auto kksr-align-center kksr-valign-bottom" data-payload="{"align":"center","id":"9800","slug":"default","valign":"bottom","ignore":"","reference":"auto","class":"","count":"0","legendonly":"","readonly":"","score":"0","starsonly":"","best":"5","gap":"5","greet":"评分","legend":"0\5 - (0 votes)","size":"24","title":"m3u8 格式是什么文件?","width":"0","_legend":"{score}\{best} ({count} {votes})","font_factor":"1.25"}">
<div class="kksr-stars">
<div class="kksr-stars-inactive">
<div class="kksr-star" data-star="1" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" data-star="2" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" data-star="3" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" data-star="4" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" data-star="5" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
</div>
<div class="kksr-stars-active" style="width: 0px;">
<div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
<div class="kksr-star" style="padding-right: 5px"><div class="kksr-icon" style="width: 24px; height: 24px;"></div>
</div>
</div>
</div><div class="kksr-legend" style="font-size: 19.2px;">
<span class="kksr-muted">점수</span>
</div>
</div>