와우자 스트리밍 엔진에서 유튜브 HLS 라이브 스트리밍을 구현하는 HLStoYTB 모듈 사용 방법
와우자에서도 유튜브 라이브 스트리밍에 불안정한 RTMP 대신 HLS를 사용할 수 있다. 와우자 스트리밍 엔진에서 HLStoYTB 모듈을 이용해 안정적인 HLS 라이브 스트리밍 송출을 구현하고 서버의 안정성을 확보하는 방법에 대해 설명한다.
왜 HLS로 연동해야 하는가?
RTMP와 같은 실시간 전송 프로토콜을 사용해 영상이나 음성 데이터를 전송하는 경우, 다음과 같은 3가지 조건 중 하나라도 문제가 생기면 정상적인 재생이 불가능해 진다.
- 정확한 시간에 데이터가 전달되어야 한다.
- 정확한 순서대로 데이터가 전달되어야 한다.
- 데이터가 손상없이 전달되어야 한다.
여기에 더해, 전송지연이 발생하면 해당 데이터는 고스란히 메모리에 쌓이게 되며, 결국 여유 메모리 부족으로 와우자 스트리밍 엔진과 서버에 문제를 일으킨다. (정말 오랜 기간동안 본 필자의 골치를 아프게 하는 현상이었다.)
문제는, 인터넷 환경에서 저 3가지 조건을 모두 충족시키기가 상당히 어렵다는 것이다. 때문에 여러가지 대안적인 방법들이 제시되었고, 그 중 하나가 웹 서비스에 사용되는 http 프로토콜을 이용해 영상이나 음성을 전송하는 HLS 프로토콜 이다.
HLS 프로토콜은 실시간으로 전송되는 RTMP와 달리, 라이브 스트림 데이터를 일정시간 간격으로 잘라 동영상 파일로 만든 후 타겟 서버에 업로드 해 주는 방식으로 동작한다. 때문에 네트워크 환경에 영향을 덜 받고 라이브 스트림을 안정적으로 전송할 수 있게 된다. 이러한 HLS의 장점은 특히 해외에 연동지점이 위치하는 유튜브 환경에서 더욱 빛을 발한다.
그래서 모듈을 직접 개발했다
문제는, 와우자 스트리밍 엔진의 경우, 기본적으로 제공하는 PUSH 방식이 RTMP 뿐이라는 것이다. HLS PUSH는 오직 와우자 서비스 타겟만 지원한다. Stream Target에 있는 YouTube 항목 역시 RTMP 를 사용한다.
어떤 기능이 필요하다면 직접 만들면 된다.
-EQMaker
이에, 본 필자는 와우자 스트리밍 엔진에서 유튜브 HLS PUSH 를 연동하는 HLStoYTB
모듈을 직접 개발했다. 이 모듈을 통해 와우자 서버가 뻗을 걱정과 인터넷 회선의 걱정 없이 HLS을 이용해 유튜브로 라이브 스트리밍을 구성할 수 있다.
HLStoYTB 모듈 설치 절차
Step 1 – 사전 준비
- 와우자 스트리밍 엔진 버전이 4.5.0 이후 버전인지 확인한다.
- 유튜브에서 HLS 연동 주소를 발급받는다.
Step 2 – 다운로드 및 설치
HLStoYTB
모듈을 찾아 파일을 다운로드 받는다. (와우자 스트리밍 엔진 확장 모듈 목록 참고)- 다운로드 받은
HLStoYTB.jar
파일을[와우자 설치 경로]/lib
디렉토리에 복사한다. - 와우자 엔진 서비스를 재시작 해준다.
참고로, HLStoYTB
모듈은 별도의 모듈 등록을 진행하지 않는다. 와우자 엔진이 재시작하며 라이브러리의 모듈을 자동으로 로드하게 될 것이다.
Step 3 – 사용 환경 구성
- Apple HLS 활성화
사용하려는 라이브 어플리케이션의 Playback Types에 Apple HLS가 활성화 되어 있는지 확인하고, 아닐 경우 활성화 시켜 준다.
- Chunk 크기 조정
라이브 어플리케이션의
Properties
탭을 선택 후,Cupertino Streaming Packetizer
항목의Edit
버튼을 클릭해 cupertinoChunkDurationTarget를 4000으로 설정한 후, Save버튼을 눌러 저장시켜 준다. 이는 생성되는 청크의 크기를 4초로 설정 하겠다는 의미다. (유튜브에서는 1 ~ 4초를 권장하고 있으며, 개발자(본 필자)는 4초를 사용할 것을 권장한다.) - Stream Target 활성화
어플리케이션 메뉴의 Stream Target를 선택한 후, Enable Stream Targets를 클릭해 기능을 활성화 해 준다. (이미 활성화 되어 있다면 상관 없음)
스트림 타겟 활성화 - 사용자 PUSH Profile 경로 확인
Server→Server Setup→Properties를 선택한 후, 제일 아래에 위치한 Custom항목에 다음의 내용이 있는지 확인하고, 없을 경우 추가한다.
- Path
- /Root/Server
- Name
- pushPublishProfilesCustomFile
- Type
- String (기본 설정이 있을 경우 공백일 수 있음)
- Value
- ${com.wowza.wms.ConfigHome}/conf/PushPublishProfilesCustom.xml
- 사용자 프로파일 추가
아래의 예를 참고하여,
<PushPublishProfile>
블럭을[와우자 설치 경로]/conf/PushPublishProfilesCustom.xml
파일의<PushPublishProfiles>
섹션에 추가한다. 만약 파일이 없다면 파일을 생성해 준다.<?xml version="1.0" encoding="UTF-8"?> <Root> <PushPublishProfiles> <PushPublishProfile> <Name>Youtube-HLS</Name> <Protocol>HTTP</Protocol> <BaseClass>kr.eqmaker.wms.hls.push.youtube.HLStoYTB</BaseClass> <UtilClass></UtilClass> <HTTPConfiguration> </HTTPConfiguration> <Properties> </Properties> </PushPublishProfile> </PushPublishProfiles> </Root>
Step 4 – 스트림 타겟 설정
유튜브에서 발급받은 HLS 연동 주소를 모듈에 입력한다. 본 설명에서는 연동주소가 https://a.upload.youtube.com/http_upload_hls?cid=eqma-kere-qmak-ereq-make©=0&file=
라고 가정한다.
- PushPublishMap.txt 파일 열기
[와우자 설치 경로]/conf/[어플리케이션 이름]/
에 위치한PushPublishMap.txt
파일을 연다. 예를 들어,live
라는 어플리케이션을 사용한다면 기본 경로는 아래와 같다.
- 윈도우 :
C:\Program Files\Wowza Media Systems\conf\live\PushPublishMap.txt
- 리눅스 :
/usr/local/WowzaStreamingEngine/conf/live/PushPublishMap.txt
- 윈도우 :
- 연동 주소 입력
이어지는 설명을 참고하여
PushPublishMap.txt
파일에 아래의 내용을 추가해 준다.InputStream={"entryName":"HLStoYTB1", "profile":"HLS-Youtube", "streamName":"HLStoYTB1", "host":"a.upload.youtube.com/http_upload_hls?cid=eqma-kere-qmak-ereq-make©=0&file=", "sendSSL":"true"}
- InputStream
- 유튜브로 전송하기 위한 입력 스트림 네임
- entryName
- PushPublishMap.txt 파일 내의 엔트리 이름. 파일 내에서 고유해야 한다. 아래의
streamName
과 동일하게 사용할 것을 권장한다. - streamName
- 출력되는 스트림 네임. 이 이름 역시 고유해야 한다. 위의
entryName
과 동일하게 사용할 것을 권장한다. - host
- 유튜브에서 발급받은 HLS 연동 주소를 입력한다.
https://
는 제외해 준다. - sendSSL
- 암호화 전송 여부를 선택한다. 유튜브는 https 를 사용하므로 true로 둔다.
- profile
- 값은
HLS-Youtube
로 둔다. (필수)
만약 하나의 스트림을 여러 타겟으로 전송해야 하거나, 하나의 어플리케이션에서 여러 스트림을 전송해야 할 경우, 필요한 만큼 PushPublishMap.txt
에 타겟 설정 줄을 추가해 주면 된다.
Step 5 – 재시작 및 스트림 전송
모든 변경사항을 적용하기 위해 와우자 엔진을 재시작해 준다. 입력 스트림이 감지되면 해당 라이브 어플리케이션은 자동으로 HLS 전송을 시작한다.
참고로 이렇게 구성된 HLS 타겟은 와우자 UI의 Stream Target
에는 나타나지 않는다. 와우자 로그파일과 유튜브의 라이브 관제실을 통해 서비스 상태를 확인해야 한다.
마무리
콘텐츠의 유형에 따라 다르긴 하겠지만, 유튜브 라이브 스트리밍은 HLS를 사용하는 것이 안정성 면에서 매우 유리하다. 특히, 와우자 엔진을 사용할 경우 발생할 수 있는 서비스 전체의 장애를 방지하기 위해서도 가급적 HLS 를 사용하는 것을 본 필자는 권하는 바이다.
와우자 스트리밍 엔진의 타겟 목록에 떡하니 유튜브를 따로 표시할 만큼 중요한 플랫폼인 것을 알면서도, 왜 HLS 연동 기능을 추가해 주지 않는지 도저히 모르겠지만, 목마른 사람이 우물을 판다고 했다. 이 모듈을 통해 이제 와우자에서도 HLS를 이용해 라이브 스트리밍 연동이 가능하다. 부디 이 글과 모듈이 와우자 유튜브 연동을 포기할 수 밖에 없었을 많은 분들께 도움이 되기를 바라는 바이다.