This article is available in English.
유튜브 라이브는 RTMP와 HLS 인제스트를 지원하지만, 와우자 스트리밍 엔진의 기본 YouTube Live 스트림 타겟은 RTMP로 송출한다. 와우자에서 HLS PUSH 연동을 지원하는 HLStoYTB 모듈을 소개하고, 모듈 설치부터 HLS 청크 설정, 사용자 Push Publish 프로파일 등록, 유튜브 스트림 타겟 구성과 전송 확인까지의 절차를 설명한다.
유튜브 라이브 연동에 HLS를 사용하는 이유
RTMP와 같은 실시간 전송 프로토콜을 사용해 영상이나 음성 데이터를 전송하는 경우, 다음과 같은 3가지 조건 중 하나라도 문제가 생기면 정상적인 재생이 불가능해진다.
- 정확한 시간에 데이터가 전달되어야 한다.
- 정확한 순서대로 데이터가 전달되어야 한다.
- 데이터가 손상 없이 전달되어야 한다.
이러한 조건이 깨져 전송 지연이나 재전송이 발생하면 재생에 문제가 생기고, 해당 데이터는 송출 장비의 메모리에 쌓이게 되어 여유 메모리가 부족해지면서 송출 장비에까지 영향을 미친다.
문제는 인터넷 환경의 특성상 이러한 조건을 항상 유지하기가 쉽지 않다는 것이다. 유튜브와 같은 해외 플랫폼에서는 이러한 문제가 더 자주 발생한다.
반면 HLS는 실시간 전송이 아닌 동영상 파일을 업로드하는 방식으로 동작한다. 이 때문에 일시적으로 네트워크 회선에 문제가 발생하더라도 평균 비트레이트만 나와 준다면 연속 재생이 가능하다는 장점이 있다.
와우자 스트리밍 엔진은 유튜브 RTMP 연동만 지원한다.
본 필자는 방송 송출일을 하고 있으며, OTT 시스템의 관리 역시 업무 중 하나이다. 앞서 설명한 메모리 문제는 정말 오랜 기간 동안 본 필자의 골치를 아프게 만들었다. 와우자 스트리밍 엔진(Wowza Streaming Engine, 이하 와우자)을 통해 24시간 방송이 송출되고 다른 채널들도 물려 있는데, 유튜브로 송출만 했다 하면 메모리가 올라가다 뻗어대니 견딜 수가 없었다.

그래서 RTMP 대신 HLS를 이용해 유튜브 라이브 스트림을 연동하려 했지만, 와우자의 Stream Targets에 별도로 제공되는 YouTube Live 역시 실제 송출에는 RTMP를 사용한다.

또한 와우자는 기본 기능으로 HLS PUSH 방식을 지원하지 않는다. 공개된 HLS 예제 모듈이 있기는 하지만, 유튜브는 일반적인 HLS와 다른 방법으로 동작한다.
어떤 기능이 필요하다면? 직접 만들면 된다.
-EQMaker
결국, 서버가 뻗을 위험과 인터넷 회선의 출렁거림으로 인한 부담을 조금이라도 덜어내고 잠 좀 편하게 자고 싶었던 본 필자는, 와우자에서 HLS PUSH를 이용해 유튜브 라이브에 연동할 수 있는 HLStoYTB 모듈을 직접 만들었다.
HLStoYTB 모듈 설치 절차
HLStoYTB 모듈을 적용하려면 다음 절차에 따라 설치한다. 이 모듈은 서버 단위로 설치되지만 어플리케이션 단위로 동작한다. 따라서 양쪽 모두 설정을 진행해 주어야 한다.
Step 1. HLStoYTB 모듈 다운로드와 설치
- 와우자 스트리밍 엔진 확장 모듈 중 하나인
HLStoYTB모듈을 찾아 다운로드받는다. - 와우자 스트리밍 엔진 확장 모듈 설치 방법을 참고해 다운로드한 압축 파일을 해제하고, 패키지의
JAR파일을 와우자 설치 디렉토리의lib디렉토리에 복사한다. - 와우자 서비스를 재시작해 준다.
Step 2. 사용 환경 구성
- Apple HLS 활성화
사용하려는 라이브 어플리케이션의 Playback Types에 Apple HLS가 활성화되어 있는지 확인하고, 아닐 경우 활성화해 준다.

Apple HLS 재생 기능 활성화 - Chunk 크기 설정
어플리케이션의 Properties 탭을 선택한 후, Cupertino Streaming Packetizer 항목의 Edit 버튼을 클릭한다.
cupertinoChunkDurationTarget을 4000으로 설정하고 Save 버튼을 눌러 저장한다.
HLS 청크 길이 설정 - Stream Target 활성화
어플리케이션 메뉴의 Stream Target를 선택한 후, Enable Stream Targets를 클릭해 기능을 활성화하고 어플리케이션을 재시작 한다. (이미 활성화되어 있다면 무시 가능)

Stream Targets 기능 활성화
Step 3. 사용자 Push Publish 프로파일 등록
설치한 모듈을 사용하기 위해서는 관련 프로퍼티를 입력해 주어야 한다. 프로퍼티 입력 방법을 참고하여 서버 프로퍼티를 추가해 준다.
- 사용자 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>HLS-Youtube</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\Wowza Streaming Engine [버전]\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
PushPublishProfilesCustom.xml에 등록한 프로파일 이름인HLS-Youtube를 입력한다.
만약 하나의 스트림을 여러 타겟으로 전송해야 하거나, 하나의 어플리케이션에서 여러 스트림을 전송해야 할 경우, 필요한 만큼 PushPublishMap.txt에 타겟 설정 줄을 추가해 주면 된다.
Step 5. 재시작 및 스트림 전송
모든 변경 사항을 적용하기 위해 와우자 엔진을 재시작해 준다. 입력 스트림이 감지되면 해당 라이브 어플리케이션은 자동으로 HLS 전송을 시작한다.
이 방식으로 구성한 HLS 스트림 타겟은 와우자 UI의 Stream Targets 목록에 표시되지 않는다. 따라서 와우자 로그와 유튜브 라이브 관제실에서 스트림 연결 여부와 전송 상태를 확인해야 한다.
마무리
와우자는 Stream Targets 목록에 떡하니 YouTube Live를 별도 항목으로 제공하면서도 실제 연동에는 RTMP만 사용한다. 유튜브가 HLS 인제스트를 지원하는데도 왜 와우자에는 관련 기능을 추가해 주지 않는지 도저히 모르겠지만, 목마른 사람이 우물을 판다고 했다.
HLStoYTB 모듈을 적용하면 와우자에서 생성한 HLS 미디어 플레이리스트와 세그먼트를 유튜브의 HLS 인제스트 서버로 전송할 수 있다. 와우자의 기본 기능은 아니므로 별도의 설치와 설정이 필요하지만, RTMP PUSH 방식에서 문제를 겪고 있던 환경에서는 새로운 선택지가 될 수 있다. 부디 이 글과 모듈이 와우자와 유튜브 사이의 HLS 연동을 포기할 수밖에 없었던 많은 분께 도움이 되기를 바라는 바이다.
FAQ
- 와우자 스트리밍 엔진은 유튜브 라이브 HLS 전송을 기본으로 지원하는가?
- 아니다. 와우자의 Stream Targets에 YouTube Live 항목이 있지만 실제로는 RTMP를 사용한다. 별도로
HLStoYTB모듈을 설치하고 설정하면 와우자에서 생성한 HLS 미디어 플레이리스트와 세그먼트를 유튜브의 HLS 인제스트 서버로 전송할 수 있다. - 유튜브 라이브 스트리밍에서 HLS가 RTMP보다 유리한 점은 무엇인가?
- HLS는 라이브 스트림을 일정한 길이의 청크로 나누어 HTTP로 전송하므로, 일시적인 전송 지연이 발생했을 때 연속된 RTMP 세션보다 유연하게 대응할 수 있다. 특히 유튜브 인제스트 서버까지의 네트워크 상태를 항상 보장하기 어려운 환경에서는 전송 안정성을 확보하는 데 도움이 될 수 있다.
- HLS를 사용하면 RTMP에서 발생하던 전송 장애가 모두 해결되는가?
- 아니다. HLS는 RTMP PUSH에서 발생할 수 있는 연결 단절과 송출 대기열 누적 위험을 줄이는 데 도움이 되지만, 회선 대역폭 부족이나 지속적인 패킷 손실, 잘못된 인코딩 설정, 서버 자원 부족까지 해결해 주지는 않는다. 안정적인 운영을 위해서는 라이브 스트리밍에 적합한 인터넷 회선과 서버 상태를 함께 점검해야 한다.
- 유튜브 라이브 연동에는 HLS와 RTMP 중 어떤 방식을 선택해야 하는가?
- 전송 안정성과 고화질·고해상도 콘텐츠를 우선한다면 HLS를 고려할 수 있고, 송출 지연을 최소화해야 한다면 RTMP가 더 적합할 수 있다. HLS는 청크 단위로 전송되므로 일반적으로 RTMP보다 지연 시간이 길다. 따라서 방송의 지연 허용 범위와 회선 상태를 기준으로 선택해야 한다.
- 유튜브 HLS 라이브 스트리밍 연동 시 청크 크기는?
- 청크 길이는 1~4초를 권장한다. 이 글에서는 와우자의 HLS 청크 길이를 4초로 설정했다. 또한 GOP 사이즈를 청크 길이의 약수로 설정해 주어야 한다. 예를 들어 청크가 4초라면 키 프레임 간격은 1초, 2초 또는 4초로 설정하는 식이다.
HLStoYTB는 무료로 사용할 수 있는가?- 그렇다.
HLStoYTB는 BSD 3-Clause License에 따라 공개 배포되는 무료 모듈이며 상업적으로 사용이 가능하다. 소스 코드를 수정하고 재배포하는 것 역시 적극 권장한다. - 일반적인 HLS PUSH 용도로도 사용할 수 있는가?
- 수신 서버의 HLS 인제스트 방식에 따라 다르다. 이 모듈은 유튜브의 HLS 인제스트 규격에 따라 미디어 플레이리스트와 세그먼트를 HTTP로 업로드한다. 유튜브와 같은 방식으로 동작하는 서버에는 사용할 수 있지만, 별도의 인증 방식이나 업로드 API 또는 다른 플레이리스트 구조를 요구하는 서버에는 그대로 사용할 수 없다.
- 설정할 수 있는 스트림 타겟 수에 제한이 있는가?
HLStoYTB모듈 자체에는 스트림 타겟 수를 제한하는 별도의 기능이 없다. 필요한 만큼PushPublishMap.txt에 타겟을 추가할 수 있지만, 실제 운용 가능한 수는 와우자 서버의 CPU·메모리, 네트워크 대역폭과 유튜브 계정의 라이브 스트리밍 조건에 따라 달라진다.- HLS 스트림 타겟의 동작 상태는 어디에서 확인하는가?
HLStoYTB로 구성한 타겟은 와우자 UI의 Stream Targets 목록에 표시되지 않는다. 와우자 로그에서 업로드 결과와 오류를 확인하고, 유튜브 라이브 관제실에서 스트림 연결 상태와 수신 품질을 함께 확인해야 한다.
갱신 내역
- — 최초 게시
- — 1차 수정
- — 2차 수정 및 주소 이전