Wowza Streaming Engine으로 LL-HLS 스트리밍 하기
HLS와 LL-HLS
LL-HLS는 기존의 HLS를 확장한 프로토콜이다. HLS는 미디어를 segment라는 쪼개진 단위로 잘라 전송하는 프로토콜인데 segment duration 만큼의 latency가 발생할 수 밖에 없는 한계점을 가지고있다. HLS가 처음 발표되었을 때 기본 스펙에서는 30초의 latency를 가지고 있었으나 스트리밍 서버 튜닝으로 8~10초대로 latency를 낮추는 것이 가능했다. LL-HLS는 HLS와 달라진 동작 방식으로 latency를 2-8초 대로 단축시킨다.
차이점
두 프로토콜의 차이점을 간단하게 살펴보면 아래와 같다.
- HLS의 segment가 더 작은 단위로 쪼개진다. 이
mini segment는 segment가 오래 지속되는 것에 비해 짧은 시간만 존재한다. - playlist가
Preload Hints정보를 가지고 있으며 이를 통해 다운로드되어야 하는 데이터릐 크기를 미리 알 수 있다. 이를 통해 오버헤드가 줄어든다. 하지만 필수적으로 포함되는 태그는 아니다. - 각 playlist마다 독립적인 식별자를 가지고있어 캐싱이 쉬워진다.
LL-HLS vs LL-DASH
LL-HLS와 LL-DASH는 비슷한 프로토콜이지만 동작 방식이 약간 다르다.LL-HLS에서 segment가 mini segment, 혹은 part로 쪼개진다고 표현하는데 비해 LL-DASH는 chunk 혹은 fragment로 나누어진다고 표현한다. LL-DASH에서는 이 chunk들이 HTTP CTE(Chunked Transfer Encoding)으로 전송된다. 그래서 origin은 segment 전체가 인코딩되어 플레이어에 전송할 준비가 될 때까지 기다릴 필요가 없이 첫 번째 chunk가 전송 준비가 끝나는 즉시 전송할 수 있다.
LL-HLS에서 각 part는 독립적으로 읽는 것이 가능하다. 하나의 완전한 segment 단위로도 가능하며 아주 작은 byte 단위의 파일도 읽을 수 있다. 반면 LL-DASH의 장점은 manifest 업데이트에 의존하지 않는다는 점이다. 하지만 LL-HLS는 각 part에 대한 추가정보를 기재할 수 있다는 것이 장점이겠다.
하지만 LL-DASH는 재생되지 않는 디바이스들이 있으니 주의해야 한다.
LL-HLS는 이제 HLS 표준에 합쳐졌다. 기업에서도 안심하고 사용해볼 수 있을 것으로 보인다.
Wowza Streaming Engine

Wowza Streaming Engine은 미디어 서버 구축시 흔하게 사용되는 소프트웨어이다. 다양한 스트리밍 프로토콜과 미디어 형식을 지원하며 다양한 서버 옵션 커스터마이징이 가능하다. 가격은 기본 한 달에 195$로 책정되어있다.
설치
소프트웨어를 구매했거나 Trial 계정을 생성했다면 My Account에서 다운로드 탭에 접근 할 수 있다.

OS에 맞는 소프트웨어를 설치하면 된다. 나는 MacOS에 설치했다. EC2 같은 서버를 띄워 설치한다면 엔진 소프트웨어가 사용하는 포트를 열어놓아야 한다.
Ports
아래 포트들을 사용하니 방화벽 설정 등을 미리 해놓고 설치하면 편하다.
| Ports | Description |
|---|---|
| TCP 1935 | RTMP/RTMPE/RTMPT/RTSP-interleaved streaming and WOWZ™ streaming |
| TCP 8086-8088 | Administration |
| UDP 6970-9999 | RTP UDP streaming |
| TCP 80 | HLS, MPEG-DASH, and RTMPT streaming |
| TCP 443 | SSL/TLS streaming (RTMPS and HTTPS) |
| TCP 554 | RTSP streaming |
SSL/TLS 인증서 등록
LL-HLS 재생은 SSL/TLS 포트를 통하지 않고서는 동작하지 않는다. HTTPS 재생이 가능하도록 인증서를 등록해야 한다. WowzaStreamingEngine의 라이센스가 있다면 Wowza StreamLock 인증서를 사용해 쉽게 적용할 수 있다. 공식 문서도 잘 나와있다.
인증서 등록하기
Wowza 로그인 후 Account Management로 들어가 StreamLock 탭으로 들어간다.

가지고 있는 라이센스 키를 선택하고 인증서를 사용할 서버의 IP 주소를 입력 후 아래 Apply for SSL Certificate 버튼을 누르면 아래쪽 My SSL certificates에서 생성된 인증서를 볼 수 있다.

Download certificate를 누르면 팝업이 나타나며 패스워드를 입력하도록 한다. 이 때 입력한 패스워드는 뒤에서 또 사용되니 잘 기억해두어야 한다.
인증서 생성 시 입력한 IP 주소를 바꾸고 싶다면 Change 버튼을 누르면 된다. 생성된 인증서를 다운로드 받아 Wowza Steraming Engine 설치 위치의 /conf 디렉토리에 파일을 옮겨놓는다.
파일을 옮겨놓았다면 Wowza Streaming Engine Manager로 들어와 Server 탭으로 이동한다.

그리고 Virtual Host Setup을 눌러 Edit에서 +Add Host Port...를 누르면 포트 설정 팝업이 나타난다.

- Name: 인증서 이름
- Type: Streaming 선택
- IP Address: * 을 입력하여 모든 트래픽을 허용할 수도 있고 특정 IP 주소를 입력할 수도 있다.
- Port(s): 443
- Enable SSL/StreamLock: enable 필요
- Keystore Path (StreamLock certificate path): 인증서(.jks 파일) 저장 경로
- 인증서 이름은
5ab4321c0d123.streamlock.net이러한 형태를 가지고 있다. - ```text
${com.wowza.wms.context.VHostConfigHome}/conf/[인증서 도메인 이름].jks1
2
3
4
5
6
7
8
9
10- Keystore Password: 인증서를 만들 때 입력했던 패스워드
- Use WebRTC: WebRTC 스트림을 사용한다면 enable 하면 되지만 LL-HLS 이므로 체크를 해제했다.
### 설정 테스트
아래 명령어로 인증서 설정이 잘 되었는지 확인할 수 있다.
```bash
openssl s_client -connect [ssl-certificate-domain-name]:443
openssl s_client -showcerts -connect [ssl-certificate-domain-name]:443
- 인증서 이름은
- Keystore Path (StreamLock certificate path): 인증서(.jks 파일) 저장 경로
인증서가 출력되면 설정이 잘 된것이고 timeout이 발생하면 설정에 문제가 생긴 것이다. 설정을 다시 한 번 확인해봐야 한다.