# FTP 사용

<figure><img src="/files/6xPSz7seTwSdm7QtOFcf" alt=""><figcaption></figcaption></figure>


# FTP 사용 시 주의 사항

### 1. 업로드 Character Set 설정

영문 및 숫자를 제외한 한글를 정상적 으로 사용하기 위해서는 Character Set (UTF-8) 유니코드를 지원해야 합니다.

ex) FileZilla 설정예시

<div align="left"><figure><img src="/files/8DdbS87PqX4YjIRIUy7m" alt=""><figcaption><p>파일 → 사이트 관리자</p></figcaption></figure></div>

<figure><img src="/files/k68TUJpEfHFmdOwmpCb6" alt=""><figcaption><p>문자셋 → 자동감지 및 UTF-8로 강제 설정</p></figcaption></figure>

### 2. 적합한 FTP Client 사용

FTP 클라이언트 사용시 고객사 환경에 적합한 FTP 클라이언트를 사용하시면 됩니다.\
※ 기본적인 FTP 클라이언트는 FileZilla 를 추천 합니다.

<details>

<summary>Filezilla Download   <a href="https://filezilla-project.org/">https://filezilla-project.org/</a></summary>

</details>

### 3. 두 명 이상의 사용자 업로드 시

두명 이상의 사용자가 동시에 접속하여 동일 경로, 파일을 업로드 하는 경우 파일이 비정상적으로 저장 될 수 있습니다.

<figure><img src="/files/LPRs9i5ooURooIBKgUZZ" alt=""><figcaption></figcaption></figure>

### 4. 스토리지 이관 작업 중 접속

스토리지 이관 작업 중 접속 시 정보가 일치 하지 않아 접속이 안될 수 있으므로 주의 부탁 드립니다.

{% hint style="info" %}
**스토리지 이관**은 작업 전 **공지**하고 있습니다.  참고하시길 바랍니다.&#x20;
{% endhint %}


# FTP 패스워드 오류로 인한 접속실패

### 1. 패스워드 만기 및 변경내역 확인&#x20;

기존 사용 했던 패스워드 변경이 되었는지 확인 부탁 드립니다.

<figure><img src="/files/YE9owJVspkCTIN3otXEN" alt=""><figcaption><p>Login incorrect error</p></figcaption></figure>

### 2. 패스워드  재설정

패스워드 재 설정을 하기 위해서는 솔박스로 문의주시기 바랍니다.&#x20;


# FTP hang(멈춤) 증상-방화벽 이슈

### 1. FTP 포트가 방화벽에 막혀있는 경우&#x20;

아래의 메세지와 함께 HANG되는 현상이 나타난다면, <mark style="color:red;">**FTP 컨트롤 패널로 사용하는 포트가 방화벽에 막혀**</mark> 있을 수 있습니다.&#x20;

{% hint style="info" %}
**200 PORT command successful.**&#x20;

**150 Opening ASCII mode data connection.**
{% endhint %}

<figure><img src="/files/kpVo9cquSOi9SlaDHpC8" alt=""><figcaption></figcaption></figure>

<mark style="color:red;">**FTP 컨트롤 채널용 포트를 방화벽에서 OPEN 하거나 , FTP 프로그램에 대하여 OPEN 해주면 해결됩니다.**</mark>

### 2. 로컬 PC 방화벽 환경에서 막혀있는 경우

① <mark style="color:blue;">**제어판**</mark>을 열고 <mark style="color:blue;">**범주**</mark>를 큰아이콘 또는 <mark style="color:blue;">**작은 아이콘**</mark>으로 변경해주세요&#x20;

<figure><img src="/files/mFS16AMwkDvzVVj8mTUN" alt=""><figcaption></figcaption></figure>

② <mark style="color:blue;">**Windows Defender 방화벽**</mark>을 클릭 후 <mark style="color:blue;">**Window Defender 방화벽을 통해 앱 또는 기능 허용**</mark> 으로 이동

<figure><img src="/files/qd6ZeeJIp6GCkyHrhsra" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/VPF4YvCv9bSwl1qi74Cy" alt=""><figcaption></figcaption></figure>

③ <mark style="color:blue;">**다른 앱 허용**</mark> 클릭 → <mark style="color:blue;">**찾아보기**</mark> 클릭&#x20;

<figure><img src="/files/mDYc22Csfqt46fuK7w67" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/DR4iYgohkZRs3MgxRgVV" alt=""><figcaption></figcaption></figure>

④ ftp.exe 파일 추가 (경로 <mark style="color:blue;">**C:\Windows\System32\ftp.exe**</mark>)&#x20;

<figure><img src="/files/AH9uxSOAcSgkui6pPlfD" alt=""><figcaption></figcaption></figure>

⑤ <mark style="color:blue;">**추가**</mark> → <mark style="color:blue;">**확인**</mark>  하면 방화벽 허용이 완료됩니다.&#x20;

<figure><img src="/files/HBXzkUV1d4xUX6wGmbCp" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/jR9TKcxtlDgAxBCzVX1J" alt=""><figcaption></figcaption></figure>


# 업로드 실패 - Connection timed out

파일질라 FTP로 대용량 파일을 업로드 시 끊김 현상이 발생했다면, **기본 시간 설정(20초)**&#xC5D0; 의한 것일 수 있습니다. 아래와 같이 <mark style="background-color:blue;">기본 시간 설정을 변경 후 다시 시도해주세요.</mark>&#x20;

1. 업로드 시 끊김이 발생했다면, <mark style="color:red;">'Connection timed out after 20 seconds of inactivity'</mark> 라는 오류를 확인하실 수 있습니다.&#x20;

<figure><img src="/files/MOTaGpdSm2nqf4mS5VEK" alt=""><figcaption></figcaption></figure>

2. 메뉴의 <mark style="color:red;">**\[편집] >  \[설정]**</mark> 으로 들어갑니다.&#x20;

<figure><img src="/files/KpNiBFW1p11i9b2nDwBn" alt=""><figcaption></figcaption></figure>

3. 설정에서 <mark style="color:red;">**시간을 0(무제한) 설정**</mark>하신 뒤, <mark style="color:red;">**확인**</mark> 버튼을 눌러주세요.&#x20;

<figure><img src="/files/CC2PwU0PifUJPjU0n12a" alt=""><figcaption></figcaption></figure>


# CM3 사용

<figure><img src="/files/3hvWeKFzDin8PbvayRAw" alt=""><figcaption></figcaption></figure>


# CM3 접속 실패

### 1. CM3 접속 실패

CM3 접속 실패 시 아래 사진과 같은 메세지가 나오며 \
서버  문제가 아닌 사용자 계정, 패스워드, 서비스명이 잘못  될 경우에도 해당 에러가 나옵니다.

<figure><img src="/files/6quy90wWZmTo6lQFtPiS" alt=""><figcaption><p>CM3 접속 시 실패</p></figcaption></figure>

### 2. CM3 로그 경로

CM3는 Windows 에 Log 지원을 하며 로그 내용을 통해 이슈 원인에 대해 확인 할 수 있습니다.

* 로그 경로
  * KT : C:\Program Files (x86)\KT CDN\Content Manager 3\log\cm\_\[날짜].log
  * LG : C:\Program Files (x86)\LG UplusCDN\Content Manager 3\log\uplus\_\[날짜].log

<figure><img src="/files/qJ4hNB9BDDvB2y6y04ti" alt=""><figcaption></figcaption></figure>

<div align="left"><figure><img src="/files/oGt6pYTZvLg1sYpJXZAe" alt=""><figcaption></figcaption></figure></div>

### 3. 로그 목록

<table><thead><tr><th>로그 정보</th><th width="306.3333333333333">내용</th><th>확인</th></tr></thead><tbody><tr><td>[ERR] SE_Password</td><td>로그인 정보 잘못 기입 했을 경우 발생</td><td>로그인 정보 확인 부탁 드립니다.</td></tr><tr><td>[ERR] SE_ServiceName</td><td>서비스 명 잘못 기입 했을 경우 발생</td><td>해당 계정에 대한 서비스명 확인 부탁 드립니다.</td></tr><tr><td>[ERR] SE_AdminID</td><td>아이디가 올바르지 않습니다.</td><td>해당 계정에 대한 아이디 확인 부탁 드립니다.</td></tr><tr><td>[ERR] SDK_INVALIDPASVAUTH</td><td>네트워크 및 잘못된 계정 정보로 인한 발생</td><td>네트워크 설정 확인 부탁 드립니다.</td></tr><tr><td>[ERR] SDK_LOGINFAILED</td><td>인증서버에 접근 할 수 없습니다.</td><td>해당 이슈는 바로 문의 부탁 드립니다.</td></tr><tr><td>[ERR] SE_AccessDenied</td><td>접근 제한된 IP 입니다.</td><td>고객사 방화벽 설정 확인 부탁 드립니다.</td></tr></tbody></table>


# 직접 문의 이슈

아래와 같은 이슈가 발생할 경우, 문의해주시기 바랍니다.

### 1. FTP 접속 시 경로 오류

* 로그인 시 “/” 경로로 마운트 되는 현상

<figure><img src="/files/TGqflnpnN7LHOpWWQ2FW" alt=""><figcaption></figcaption></figure>

### 2. 스토리지 파일을 찾을 수 없는 이슈

* 업로드 서버 또는 스토리지 부하로 인한 발생
* <mark style="color:red;">**⚠ 오류 메시지 : Connection timed out after .. of inactivity**</mark>

<figure><img src="/files/zMtvl4OqIoNL6fHf7vHI" alt=""><figcaption></figcaption></figure>

### 3. 고객사 파일, 디렉토리 소문자 이슈

* 소문자 표현 시 서버 이슈로 확인되는 경우 있음. &#x20;

<figure><img src="/files/gYF78eRbgl9Zvn9cKlEM" alt=""><figcaption></figcaption></figure>

* <mark style="color:blue;">**참고) 대소문자 정책**</mark>&#x20;

<figure><img src="/files/31h655J4g5tskb2LzEPp" alt=""><figcaption></figcaption></figure>

### 4.  삭제된 파일이 되살아 나는 이슈

* 예를 들어,  아래 사진 처럼 삭제 해도 1970-01-01 로 파일이 되살아 나는 이슈

<figure><img src="/files/WcWfeMvvKhp1QLZ4IKbJ" alt=""><figcaption></figcaption></figure>


# SMIL File


# SMIL File을 왜 생성해야 하나요?

SMIL 파일은 XML 기반으로 작성되어 있으며, 비디오, 오디오, 이미지, 텍스트 등 다양한 미디어 요소를 사용자가 지정한 방식으로 동기화 할 수 있습니다.&#x20;

이를 통해 다양한 멀티미디어 요소를 효과적으로 조합하여 사용자에게 보다 풍부하고 흥미로운 체험을 제공할 수 있습니다.


# 기본 포맷 xml

{% code overflow="wrap" %}

```
<?xml version="1.0" encoding="UTF-8"?>
<smil>
  <body>
    <playlist>
        <video src="/mp4/adaptive/41a014430be00ec4574535d49c26a87e_v3_t31.mp4" system-bitrate="1
024000" codecs="avc1.100.31, mp4a.40.2" resolution="480x272"/>
        <video src="/mp4/adaptive/41a014430be00ec4574535d49c26a87e_v3_t32.mp4" system-bitrate="2
048000" codecs="avc1.100.31, mp4a.40.2" resolution="640x360"/>
        <video src="/mp4/adaptive/41a014430be00ec4574535d49c26a87e_v3_t33.mp4" system-bitrate="5
120000" codecs="avc1.100.31, mp4a.40.2" resolution="1280x720"/>
        <video src="/mp4/adaptive/41a014430be00ec4574535d49c26a87e_v3_t34.mp4" system-bitrate="1
6384000" codecs="avc1.100.31, mp4a.40.2" resolution="1920x1080"/>
    </playlist>
  </body>
</smil>
```

{% endcode %}

* 1556 버전 부터는 아래의 형태도 허용

{% code overflow="wrap" %}

```
<?xml version="1.0" encoding="UTF-8"?>
<smil>
  <body>
    <switch>
        <video src="/mp4/adaptive/41a014430be00ec4574535d49c26a87e_v3_t31.mp4" system-bitrate="1
024000" codecs="avc1.100.31, mp4a.40.2" resolution="480x272"/>
        <video src="/mp4/adaptive/41a014430be00ec4574535d49c26a87e_v3_t32.mp4" system-bitrate="2
048000" codecs="avc1.100.31, mp4a.40.2" resolution="640x360"/>
        <video src="/mp4/adaptive/41a014430be00ec4574535d49c26a87e_v3_t33.mp4" system-bitrate="5
120000" codecs="avc1.100.31, mp4a.40.2" resolution="1280x720"/>
        <video src="/mp4/adaptive/41a014430be00ec4574535d49c26a87e_v3_t34.mp4" system-bitrate="1
6384000" codecs="avc1.100.31, mp4a.40.2" resolution="1920x1080"/>
    </switch>
  </body>
</smil>
```

{% endcode %}

* 1688 버전 부터는 src 경로를 상대 경로 형태로도 사용 가능

{% code overflow="wrap" %}

```
<?xml version="1.0" encoding="UTF-8"?>
<smil>
  <body>
    <switch>
        <video src="41a014430be00ec4574535d49c26a87e_v3_t31.mp4" system-bitrate="1024000" />
        <video src="41a014430be00ec4574535d49c26a87e_v3_t32.mp4" system-bitrate="2048000" />
        <video src="1a014430be00ec4574535d49c26a87e_v3_t33.mp4" system-bitrate="5120000" />
        <video src="41a014430be00ec4574535d49c26a87e_v3_t34.mp4" system-bitrate="16384000" />
    </switch>
  </body>
</smil>
```

{% endcode %}

* attribute custom 설정 예

{% code overflow="wrap" %}

```
<smil>
    <body>
         <playlist>
            <video src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t31.mp4" system-bitrat
e="450000" codecs="avc1.42c015,mp4a.40.2" resolution="480x270" average-bandwidth="444128" frame-rate="
29.97" channels="2"/>
            <video src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t32.mp4" system-bitrat
e="900000" codecs="avc1.42c01e,mp4a.40.2" resolution="640x360" average-bandwidth="857488" frame-rate="
29.97" channels="2"/>
            <video src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t33.mp4" system-bitrat
e="1200000" codecs="avc1.4d401f,mp4a.40.2" resolution="856x480" average-bandwidth="1140176" frame-rate
="29.97" channels="2"/>
            <video src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t34.mp4" system-bitrat
e="2200000" codecs="avc1.4d401f,mp4a.40.2" resolution="1280x720" average-bandwidth="2213528" frame-rat
e="29.97" channels="2"/>
            <video src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t35.mp4" system-bitrat
e="5300000" codecs="avc1.640028,mp4a.40.2" resolution="1920x1080" average-bandwidth="5242040" frame-r
ate="29.97" channels="2"/>
        </playlist>
    </body>
</smil>
    
```

{% endcode %}


# Video 작성 규칙

video 부분만 아래의 규칙으로 작성&#x20;

### src&#x20;

* 오리진에 있는 파일 경로&#x20;
* solproxy-1.5.2.1699.2400 버전 이후 부터는 상대 경로(파일명만 기록) 사용가능&#x20;
* 필수&#x20;

### system-bitrate&#x20;

* 미디어 chunk 단위 최대 bit rate&#x20;
* 단위 : bit/sec&#x20;
* 각 미디어 파일들의 system-bitrate 는 모두 틀려야 됨&#x20;
* 정확한 bit rate를 적을 필요는 없고 유사하게만 적으면 됨&#x20;
* manifest 생성시 BANDWIDTH attribute에 기록됨&#x20;
* 필수&#x20;

### codecs&#x20;

* video codec와 audio codec&#x20;

<figure><img src="/files/UG5QWsOTydTSEwFMuPTT" alt=""><figcaption></figcaption></figure>

* manifest 생성시 CODECS attribute에 기록됨&#x20;
* 생략가능&#x20;
* 값이 설정 되지 않는 경우 media의 metadata에서 추출한 값을 사용&#x20;

### resolution&#x20;

* 해상도&#x20;
* \[width]x\[height]의 형식으로 기술해야함&#x20;
  * 예 : resolution="480x272"&#x20;
* stream 선택창에 이 값을 표시하는 플레이어도 있습니다.&#x20;
* manifest 생성시 RESOLUTION attribute에 기록됨&#x20;
* 생략가능&#x20;
* 값이 설정 되지 않는 경우 media의 metadata에서 추출한 값을 사용

### average-bandwidth&#x20;

* 미디어의 평균 bitrate&#x20;
* 단위 bit/sec&#x20;
* manifest 생성시 AVERAGE-BANDWIDTH attribute에 기록됨&#x20;
* 생략가능&#x20;
* 값이 설정 되지 않는 경우 media의 metadata에서 추출한 값을 사용

### &#x20;frame-rate&#x20;

* 미디어의 최대 frame-rate&#x20;
* 소수점 3째자리 까지 허용
* &#x20;manifest 생성시 FRAME-RATE attribute에 기록됨&#x20;
* 생략가능&#x20;
* 값이 설정 되지 않는 경우 media의 metadata에서 추출한 값을 사용&#x20;

### channels&#x20;

* audio stream의 채널 수를 표기&#x20;
* 정수 형으로만 표기 가능 (AC-3 5.1 인 경우 6으로 표기 해야함)
* manifest 생성시 CHANNELS attribute에 기록됨&#x20;
* 생략가능&#x20;
* 값이 설정 되지 않는 경우 media의 metadata에서 추출한 값을 사용

{% hint style="info" %}

* 정확한 media 속성 정보를 모를 경우 src와 system-bitrate만 기술하면 됨&#x20;
* 동영상 코덱은 H.264(AVC), H.265(HEVC), 오디오 코덱은 AAC나 MP3를 사용 추천&#x20;
* Adaptive에 사용되는 동영상은 동일한 인코딩 옵션으로 만드는걸 추천&#x20;
* 동일한 인코더(or 트랜스코더)에서 해상도와 bitrate, 코덱만을 제외하고 동일하게 생성&#x20;
* Adaptive에 사용되는 video track과 audio track의 재생 시간은 모두 동일해야 하고 1초 이상 차이가 나는 경우 에러 처리됨
  {% endhint %}


# 자막이 있는 경우

* 자막 파일은 textstream element 를 사용&#x20;
* textstream element 에 사용 되는 attribute&#x20;
  * type&#x20;
    * 자막파일 종류 srt, vtt 가능&#x20;
  * system-language&#x20;
    * RFC5646에 정의된 language를 지정(한개의 값만 사용)&#x20;
    * 이 값은 smil 파일 내에서 unique 해야 한다.&#x20;
    * 예: kr, en&#x20;
  * name&#x20;
    * 플레이어 선택 창에서 표시될 language&#x20;
    * 이 값은 smil 파일 내에서 unique 해야 한다.&#x20;
    * 예: Korean, English&#x20;
  * src&#x20;
    * 자막파일 경로&#x20;
* textstream element 에는 name과 src가 필수 값이고 name attibute가 자막의 트랙을 구분하는 용도로 사용되기 때문에 smil 파일 내에서 unique 해야 한다.

{% code title="Example " overflow="wrap" %}

```
<smil>
􀂠􀂠􀂠􀂠<body>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<playlist>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t31.mp4"􀂠
system-bitrate="450000"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t32.mp4"􀂠
system-bitrate="900000"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t33.mp4"􀂠
system-bitrate="1200000"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t34.mp4"􀂠
system-bitrate="2200000"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t35.mp4"􀂠
system-bitrate="5300000"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<textstream􀂠system-language="ko"􀂠name="Korean"􀂠type="srt"􀂠src="
/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko.srt"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠</playlist>
􀂠􀂠􀂠􀂠</body>
</smil>
```

{% endcode %}

{% code title="Example " overflow="wrap" %}

```
<smil>
􀂠􀂠􀂠􀂠<body>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<playlist>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t31.mp4"􀂠
system-bitrate="450000"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t32.mp4"􀂠
system-bitrate="900000"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t33.mp4"􀂠
system-bitrate="1200000"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t34.mp4"􀂠
system-bitrate="2200000"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko_KR_t35.mp4"􀂠
system-bitrate="5300000"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<textstream􀂠system-language="en"􀂠name="English"􀂠type="vtt"􀂠src="
/adaptive/subtitle/Encanto_FEA_1080P23_STT_en.vtt"/>
<textstream􀂠system-language="ko"􀂠name="Korean"􀂠type="vtt"􀂠src="
/adaptive/subtitle/Encanto_FEA_1080P23_STT_ko.vtt"/>􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠</playlist>
􀂠􀂠􀂠􀂠</body>
</smil>
```

{% endcode %}


# Audio / Video 파일 분리

* audio element가 있는 경우 audio를 별도의 track으로 분리해서 스트리밍 하도록 한다.&#x20;
* 이 때에는 audio element와 video element 에 모두 group-id가 지정 되어 있어야 하고 group-id가 없는 경우는 에러 처리 한다.&#x20;
* 이 경우 audio, video element에 모두 group-id attribute가 있어야 한다.&#x20;
* audio와 video 가 같이 들어 있는 mp4 파일이라도 video element의 mp4파일은 video track만 사용되고 audio element에서는 audio track만 사용된다.&#x20;
* system-bitrate는 track을 구분하는 기준이 되므로 같은 element(audio, video)내에서 unique 해야 한다.&#x20;

<table data-header-hidden><thead><tr><th width="255"></th><th></th><th data-hidden></th></tr></thead><tbody><tr><td>video element 작성</td><td>system-bitrate : video track에 해당하는 bitrate만 기록</td><td></td></tr><tr><td>audio element 작성</td><td>system-bitrate : aduio track에 해당하는 bitrate만 기록</td><td></td></tr><tr><td>codecs 작성 </td><td>사용될 video와 audio track에 해당하는 codec 정보만 기록 </td><td></td></tr></tbody></table>

* &#x20;참고&#x20;

{% embed url="<https://developer.apple.com/documentation/http-live-streaming/hls-authoring-specification-for-apple-devices-appendixes>" %}

* audio element에는 src, system-bitrate, system-language, name, group-id는 필수 값이다.&#x20;

{% hint style="info" %}
**smil 파일내에 audio element가 1개 이상 있는 경우**&#x20;

* audio와 video 가 같이 들어 있는 mp4 파일이라도 video element의 mp4파일은 video track만 사용되고 audio element에서는 audio track만 사용된다.
* audio와 video 가 같이 들어 있는 mp4 파일에서 audio도 사용하고 싶은 경우에는 audio element로 따로 등록해야함.  *<mark style="color:blue;">\*이때 codecs와 system-bitrate는 audio에 해당하는 값만 적는다.</mark>*
  {% endhint %}


# 추가된 Attribute

### group-id <a href="#group-id" id="group-id"></a>

* audio, video element에서 사용 가능
* 최대 31자까지 허용
* audio tag를 사용하는 경우 video tag와 audio tag에는 group-id가 필수로 들어 있어야함

### audio-track <a href="#audio-track" id="audio-track"></a>

* 여러개의 audio track이 한 media에 들어 있는 경우 처음의 0번째 audio track을 제외한 audio track을 선택할때 사용
* 기본값 : 0 (첫번째 오디오 트랙)
* 이 부분은 현재 구현하지 않고 향후 필요할 경우에 구현할 예정임

### system-language <a href="#system-language" id="system-language"></a>

* 아래   링크의 language code를 사용

{% embed url="<https://datatracker.ietf.org/doc/html/rfc5646>" %}

​

​


# 별도의 audio 파일 사용

* video tag 에 system-bitrate와 codecs에 video track 정보만 기록한다.&#x20;
* smil 파일내에 audio tag가 존재 하기 때문에 video tag에 있는 파일은 video track만 인식 한다.&#x20;

### smil 파일

{% embed url="<http://iostest.solbox.com/adaptive/dual_audio/Operation_Chromite_sep_audio.smil>" %}

{% code title="" overflow="wrap" %}

```
<smil>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<body>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<playlist>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="Operation_Chromite_t31.mp4"􀂠system-bitrate="
382000"􀂠codecs="avc1.100.31"􀂠resolution="480x272"􀂠group-id="audio0"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="Operation_Chromite_t32.mp4"􀂠system-bitrate="
762000"􀂠codecs="avc1.100.31"􀂠resolution="640x360"􀂠group-id="audio0"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="Operation_Chromite_t33.mp4"􀂠system-bitrate="
1014000"􀂠codecs="avc1.100.31"􀂠resolution="856x480"􀂠group-id="audio0"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="Operation_Chromite_t34.mp4"􀂠system-bitrate="
2022000"􀂠codecs="avc1.100.31"􀂠resolution="1280x720"􀂠group-id="audio0"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="Operation_Chromite_t35.mp4"􀂠system-bitrate="
5047000"􀂠codecs="avc1.100.31"􀂠resolution="1920x1080"􀂠group-id="audio0"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<textstream􀂠system-language="en"􀂠name="English"􀂠type="
vtt"􀂠src="Operation_Chromite_subtitle_English.vtt"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<audio􀂠src="Operation_Chromite_audio_hindi.m4a"􀂠
system-bitrate="256000"􀂠codecs="mp4a.40.2"􀂠system-language="hindy"􀂠name="Hindi"􀂠group-id="audio0"
/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<audio􀂠src="Operation_Chromite_audio_korean.m4a"􀂠
system-bitrate="256001"􀂠codecs="mp4a.40.2"􀂠system-language="kr"􀂠name="Korean"􀂠group-id="audio0"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠</playlist>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠</body>
</smil>
```

{% endcode %}

### manifest 응답

{% embed url="<http://iostest.solbox.com/adaptive/dual_audio/Operation_Chromite_sep_audio.smil/playlist.m3u8>" %}

{% code overflow="wrap" %}

```
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-STREAM-INF:BANDWIDTH=638000,AVERAGE-BANDWIDTH=638016,CODECS="avc1.100.31,mp4a.4
0.2",RESOLUTION=480x272,FRAME-RATE=29.97,AUDIO="audio0",SUBTITLES="subs"􀂠
video_382000.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1018000,AVERAGE-BANDWIDTH=1018376,CODECS="avc1.100.31,mp4
a.40.2",RESOLUTION=640x360,FRAME-RATE=29.97,AUDIO="audio0",SUBTITLES="subs"􀂠
video_762000.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1270000,AVERAGE-BANDWIDTH=1269712,CODECS="avc1.100.31,mp4
a.40.2",RESOLUTION=856x480,FRAME-RATE=29.97,AUDIO="audio0",SUBTITLES="subs"􀂠
video_1014000.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2278000,AVERAGE-BANDWIDTH=2277784,CODECS="avc1.100.31,mp4
a.40.2",RESOLUTION=1280x720,FRAME-RATE=29.97,AUDIO="audio0",SUBTITLES="subs"􀂠
video_2022000.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=5303000,AVERAGE-BANDWIDTH=5303224,CODECS="avc1.100.31,mp4
a.40.2",RESOLUTION=1920x1080,FRAME-RATE=29.97,AUDIO="audio0",SUBTITLES="subs"􀂠
video_5047000.m3u8
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio0",DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="hindy",
NAME="Hindi",CHANNELS="2",URI="audio_256000.m3u8"􀂠
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio0",DEFAULT=NO,AUTOSELECT=NO,LANGUAGE="kr",NAM
E="Korean",CHANNELS="2",URI="audio_256001.m3u8"􀂠
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",DEFAULT=NO,LANGUAGE="en",NAME="English",URI
="subtitle_0.m3u8"􀂠
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",DEFAULT=NO,LANGUAGE="kr",NAME="Korean",URI=
"subtitle_1.m3u8"
```

{% endcode %}


# 별도의 audio file과 mp4 파일에 들어 있는 audio track 을 사용

* audio tag 에 video와 audio track이 같이 들어 있는 mp4파일을 사용할 경우는 system-bitrate와 codecs에 audio track에 해당하는 정보만 기록한다.&#x20;
* Operation\_Chromite\_t31.mp4에 있는 audio track을 사용하기 위해 audio tag를 추가

### smil 파일

{% embed url="<http://iostest.solbox.com/adaptive/dual_audio/Operation_Chromite_inc_audio.smil/playlist.m3u8>" %}

{% code overflow="wrap" %}

```
<smil>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<body>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<playlist>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="Operation_Chromite_t31.mp4"􀂠system-bitrate="
382000"􀂠codecs="avc1.100.31"􀂠resolution="480x272"􀂠group-id="audio0"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="Operation_Chromite_t32.mp4"􀂠system-bitrate="
762000"􀂠codecs="avc1.100.31"􀂠resolution="640x360"􀂠group-id="audio0"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="Operation_Chromite_t33.mp4"􀂠system-bitrate="
1014000"􀂠codecs="avc1.100.31"􀂠resolution="856x480"􀂠group-id="audio0"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="Operation_Chromite_t34.mp4"􀂠system-bitrate="
2022000"􀂠codecs="avc1.100.31"􀂠resolution="1280x720"􀂠group-id="audio0"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<video􀂠src="Operation_Chromite_t35.mp4"􀂠system-bitrate="
5047000"􀂠codecs="avc1.100.31"􀂠resolution="1920x1080"􀂠group-id="audio0"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<textstream􀂠system-language="en"􀂠name="English"􀂠type="vtt"􀂠src="Operation_Chromite_subtitle_English.vtt"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<audio􀂠src="Operation_Chromite_t31.mp4"􀂠system-bitrate="
64000"􀂠codecs="mp4a.40.2"􀂠system-language="hindy"􀂠name="Hindi"􀂠group-id="audio0"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠<audio􀂠src="Operation_Chromite_audio_korean.m4a"􀂠
system-bitrate="256001"􀂠codecs="mp4a.40.2"􀂠system-language="kr"􀂠name="Korean"􀂠group-id="audio0"/>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠</playlist>
􀂠􀂠􀂠􀂠􀂠􀂠􀂠􀂠</body>
</smil>
```

{% endcode %}

### manifest 응답

{% embed url="<http://iostest.solbox.com/adaptive/dual_audio/Operation_Chromite_inc_audio.smil/playlist.m3u8>" %}

{% code overflow="wrap" %}

```
#EXTM3U
#EXT-X-VERSION:4
#EXT-X-STREAM-INF:BANDWIDTH=446000,AVERAGE-BANDWIDTH=446016,CODECS="avc1.100.31,mp4a.4
0.2",RESOLUTION=480x272,FRAME-RATE=29.97,AUDIO="audio0",SUBTITLES="subs"􀂠
video_382000.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=826000,AVERAGE-BANDWIDTH=826376,CODECS="avc1.100.31,mp4a.4
0.2",RESOLUTION=640x360,FRAME-RATE=29.97,AUDIO="audio0",SUBTITLES="subs"􀂠
video_762000.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=1078000,AVERAGE-BANDWIDTH=1077712,CODECS="avc1.100.31,mp4
a.40.2",RESOLUTION=856x480,FRAME-RATE=29.97,AUDIO="audio0",SUBTITLES="subs"􀂠
video_1014000.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2086000,AVERAGE-BANDWIDTH=2085784,CODECS="avc1.100.31,mp4
a.40.2",RESOLUTION=1280x720,FRAME-RATE=29.97,AUDIO="audio0",SUBTITLES="subs"􀂠
video_2022000.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=5111000,AVERAGE-BANDWIDTH=5111224,CODECS="avc1.100.31,mp4
a.40.2",RESOLUTION=1920x1080,FRAME-RATE=29.97,AUDIO="audio0",SUBTITLES="subs"􀂠
video_5047000.m3u8
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio0",DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="hindy",
NAME="Hindi",CHANNELS="2",URI="audio_64000.m3u8"􀂠
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio0",DEFAULT=NO,AUTOSELECT=NO,LANGUAGE="kr",NAM
E="Korean",CHANNELS="2",URI="audio_256001.m3u8"􀂠
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",DEFAULT=NO,LANGUAGE="en",NAME="English",URI
="subtitle_0.m3u8"􀂠
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",DEFAULT=NO,LANGUAGE="kr",NAME="Korean",URI=
"subtitle_1.m3u8"􀂠
```

{% endcode %}


# attribute별 길이 제한

<table><thead><tr><th>Attribute</th><th>길이 </th><th data-hidden></th></tr></thead><tbody><tr><td>src</td><td>1023</td><td></td></tr><tr><td>codecs</td><td>63</td><td></td></tr><tr><td>system-bitrate</td><td>11 </td><td></td></tr><tr><td>average-bandwidth</td><td>11</td><td></td></tr><tr><td>resolution</td><td>31</td><td></td></tr><tr><td>system-language</td><td>31</td><td></td></tr><tr><td>name</td><td>31 </td><td></td></tr><tr><td>group-id</td><td>31 </td><td></td></tr><tr><td>frame-rate</td><td>11</td><td></td></tr><tr><td>channels </td><td>2</td><td></td></tr></tbody></table>

참고

{% embed url="<https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-03#page-8>" %}

{% embed url="<https://developer.apple.com/documentation/http-live-streaming/hls-authoring-specification-for-apple-devices-appendixes>" %}


