미디어 파일 자동 반복 재생 라이브 스트림 생성 방법 : 와우자 서버 리스너 사용
와우자 스트리밍 엔진은 서버 리스너(ServerListener)를 통해 동영상이나 오디오 파일로 부터 라이브 스트림 생성하고, 플레이리스트와 반복기능도 사용할 수 있어, 24시간 무중단 라이브 스트림을 생성할 수 있다. 구성하는 방법을 단계별로 설명한다.
유튜브와 같은 각종 동영상 플랫폼들을 보면 음악 스트리밍 채널이나 CCTV와 같은 24시간 라이브 스트리밍 콘텐츠들이 많이 생겨나고 있다. 이러한 24시간 채널들은 일반적으로 OBS와 같은 스트리밍 도구를 사용해 미디어 파일의 재생목록을 반복 재생하거나, 라이브 카메라를 사용하는 방식으로 구현한다.
이러한 방식은 비교적 간단하고 널리 사용되지만, 항상 실시간 인코더를 가동해야 하기 때문에 시스템 자원 소모가 크고, 장시간 운영 시 안정성에 한계가 있다. 특히 반복되는 파일 기반 콘텐츠를 스트리밍할 경우, OBS와 같은 도구는 지나치게 무거운 구성일 수 있다.
와우자 스트리밍 엔진(Wowza Streaming Engine, 이하 와우자)는 기본적으로 VOD 서비스 기능을 가지고 있다. 이 기능을 응용하면, 실시간 인코딩 과정 없이 동영상이나 오디오파일을 실시간 방송처럼 연속적으로 스트리밍 할 수 있다. 이렇게 생성된 스트림은 반복 재생이 가능한 음악 스트리밍, 배경음악 삽입을 위한 무음 영상 스트림, 또는 간단한 대체 방송 송출용 필러(Filler) 등 다양한 용도로 사용할 수 있다.
이 글에서는 와우자의 서버 리스너(ServerListener) 클래스 설정을 통해, 콘텐츠 파일 기반 24시간 라이브 스트림을 구성하는 방법에 대해 소개한다.
서버 리스너를 이용한 파일 라이브 스트리밍 구성 절차
본 필자는 3개의 MP3 오디오 파일로 재생목록을 만든 후, FileToLive라는 와우자 어플리케이션을 생성하여 라이브 스트림을 생성 하는 과정을 예시로 설명하겠다. 비디오 파일의 경우도 파일 포맷과 사용할 프리픽스(prefix)가 다를 뿐, 동일한 방법으로 구성할 수 있다.
- 사전준비
- 서버 리스너 클래스 등록
- 서버 프로퍼티 등록
- streamDemoPublisherConfig 의 Value 설정
- 재생목록 파일의 생성과 업로드
- 와우자 서비스 재시작
- 어플리케이션 확인(진실의 시간)
Step 1 – 사전준비
구성을 시작하기 전, 아래와 같은 항목들이 먼저 준비되어 있어야 한다.
- 어플리케이션
- 생성된 스트림을 송출하는데 사용할 와우자 라이브 어플리케이션
- 재생에 사용할 콘텐츠 파일
- 사용 가능한 파일 포맷 형식의콘텐츠 파일
- 정당한 사용 권한을 가지고 있어 저작권등에 문제가 없는 콘텐츠
- 업로드 도구
- WinSCP나 FTP 클라이언트와 같은 파일 업로드 도구
- 윈도우 환경에서는 USB등을 이용해 직접 디렉토리에 복사해 넣어도 된다.
- 콘텐츠 업로드
- 콘텐츠 디렉토리에 파일을 업로드한다.
- 윈도우 기본경로 :C:\Program Files\Wowza Media Systems\Wowza Streaming Engine\content
- 리눅스 기본경로 :/usr/local/WowzaStreamingEngine/content
콘텐츠 업로드 까지 마치고 나면 본격적인 구성을 시작할 수 있다. 본 필자는 아래 그림의 예에서 WinSCP를 이용해 스트리밍에 사용할 1.mp3, 2.mp3, 3.mp3 3개의 파일을 업로드했다.

Step 2 – 서버 리스너 클래스 등록
서버 리스너 클래스(Server Listener Class)는 와우자가 어떠한 동작을 언제 진행할지 제어하는 트리거 역할을 하는 클래스다. 이 클래스를 통해 와우자의 동작을 자동화 할 수 있다.
- 와우자 웹 UI에 접속해 상단의 Server메뉴를 선택하고, 왼쪽에서 Server Setup을 선택한다.
- 상단의 Server Listeners 탭을 선택하면 현재 설정된 서버 리스너의 목록이 표시된다.
서버 리스너 목록 - Edit 버튼을 클릭하고 Add Server Listeners 버튼을 클릭해 서버 리스너 추가 창을 띄운다.
- Base Class항목에 com.wowza.wms.module.ServerListenerStreamDemoPublisher를 입력해 주고 Add버튼을 클릭해 준다.
추가할 서버 리스너 입력 - Save버튼을 클릭해 클래스가 추가된 것을 확인하고 Restart Now버튼을 클릭해 와우자 서비스를 재시작 한다.
클래스가 추가된 모습
Step 3 – 서버 프로퍼티 등록
서버 프로퍼티(Server Properties)는 와우자 서버가 동작하는데 필요한 설정값들을 변경하는 부분으로, 위에서 설정한 서버 리스너가 어떤 방식으로 동작할지 정의하는 부분이다.구성 절차에 있어 가장 주의를 기울여야 할 부분이다.
- 재부팅된 와우자 서버의 웹 UI에 다시 접속해 Server메뉴를 선택하고, 왼쪽에서 Server Setup을 선택한 후, Properties 탭을 선택한다. 현재 설정된 와우자 서버의 설정값들이 표시된다.
서버 프로퍼티 목록 - 제일 아래에 위치한 Custom항목의 Edit버튼을 클릭해 프로퍼티 추가 메뉴에 진입하면 현재 설정된 사용자 프로퍼티 설정값 목록이 표시된다.
- Add Custom Property버튼을 클릭해 Add Custom Property창을 열어 아래와 같이 입력해 준다.
- Path : /Root/Server
- Name : streamDemoPublisherConfig
- Type : String
- Value : Step 4에서 설명할 값을 입력해야 하므로 이 단계에서는 비워둔다.

아직 Add 버튼을 클릭하면 안된다! Value 항목은 해당 서버 리스너의 동작 방식을 제어하는 가장 중요한 설정 값이며, 이에 대한 자세한 작성 방법은 아래 Step 4에서 설명한다.
Step 4 – streamDemoPublisherConfig 의 Value 설정
Value는 우리가 등록한 streamDemoPublisherConfig 의 동작을 정의하는 부분으로, 가장 주의를 기울어야 하는 부분이다. 아래의 예와 같이 값을 설정할 수 있으며,
이를 각 구성요소 별로 분리해 보면 다음과 같이 정리할 수 있다.
- 프로퍼티
- 적색 부분, 설정 항목
- appName, srcStream, dstStream
- 값
- 청색 부분, 프로퍼티에 적용할 값
- FileToLive, m3u8:lst.m3u8, MusicBox
- 연결자
- 녹색으로 표시된 =는 프로퍼티와 값을 연결해 준다
- 구분자
- 둘 이상의 프로퍼티를 선언할 경우 ,로 구분해 준다.
streamDemoPublisherConfig의 프로퍼티중 자주 사용되는 것과 의미는 다음과 같다.
- appName
- 이 스트림을 생성할 어플리케이션의 이름
- dstStream
- 생성될 스트림의 이름. (스트림 파일 이름이라 생각하면 된다)
- playlistRepeat
- true일 경우 반복재생, false일 경우 반복재생 안함
- random
- true일 경우 재생목록 랜덤 재생
- sendOnMetadata
- 스트림 시작 시 코덱이나 해상도등의 메타데이터를 전송
- 클라이언트가 직접 재생할 경우, 호환성을 위해 true권장
- srcStream
- 스트림할 파일 또는 재생목록. 프리픽스를 꼭 지정해야 한다.
- timeBetweenItems
- 재생목록을 재생할 시, 다음 콘텐츠 재생까지 여유시간
이 형식에 맞춰 다음과 같이 streamDemoPublisherConfig의 Value를 지정할 수 있다.

이 설정에 따라, 와우자는
- 재생목록 lst.m3u8파일을 읽어, 그 안에 있는 콘텐츠들을
- 재생목록에 기록된 순서에 따라,
- 250mSec 의 간격으로
- 연속해서 반복 재생하는 스트림을, (명시적으로 playlistRepeat를 선언하지 않았으나 자동 적용된다)
- FileToLive라는 이름을 가진 어플리케이션에
- MusicBox라는 이름으로 생성하게 된다.
Add버튼을 클릭해 프로퍼티가 추가된 것을 확인한 후 Save버튼을 클릭해 적용해 주고 와우자 서비스를 재시작 해주면 streamDemoPuslibherConfig 설정이 완료된다.
또한 이 글에서는 다루지 않았지만 좀 더 다양한 조건을 지정하기 위한 프로퍼티들이 있다. 와우자 홈페이지에서 제공하는 문서를 참고하기 바란다.
Step 5 – 재생목록 파일의 생성과 업로드
재생목록으로 지정된 lst.m3u8파일을 생성한다. 일반적인 텍스트 편집기를 이용해 다음과 같이 작성해 주면 된다. 본 필자는 위에서 언급한 3개의 MP3 오디오 파일을 스트리밍 하기 위해 mp3:프리픽스를 사용했다.
mp3:1.mp3
mp3:2.mp3
mp3:3.mp3
생성한 파일을 콘텐츠 디렉토리에 업로드 해 준다.
Step 6 – 와우자 서비스 재시작
설정을 완료하고 모든 콘텐츠 파일이 업로드 되었으면, 와우자 서비스를 재시작 해 준다.
Step 7 – 어플리케이션 확인(진실의 시간)
- 와우자 웹 UI에 접속해 Applications메뉴를 선택한 후, 좌측의 어플리케이션 목록 중 appName에서 지정한 어플리케이션을 선택한다.
- Incoming Streams을 클릭해 스트림이 추가 되었는지 확인한다.
- 스트림의 비트레이트가 0이 아닌지 확인한다.
MusicBox 스트림이 정상 수신되고 있다. - 최종적으로 VLC등의 클라이언트를 이용해 스트림을 재생해 본다.
참고 사항
ServerListener는 와우자 서비스의 하위 어플리케이션에서 동작하는 것이 아닌, 와우자 서비스 자체에 정의된다. 이는, 와우자 서비스가 시작할때 함께 시작되고, 종료될때 함께 종료되며, 설정 변경을 위해서는 와우자 서비스를 재 시작해야 한다는 것을 의미한다. 다시말해, 재생목록을 변경하려면, 재생목록 파일을 수정한 다음, 와우자 서비스 전체를 내렸다 올려야 한다는 것이다!
와우자 서비스를 재시작 하면 당연히 다른 어플리케이션들을 통해 서비스중인 스트림들도 중단된다. 이를 피하기 위해서는 서버 리스너 대신, streampublisher라고 하는 확장 모듈과 REST-API를 사용해야 한다.
또한 콘텐츠 파일의 길이가 지나치게 짧을 경우, 정상적인 재생을 못할 경우가 생긴다. 필자의 경험상 사용하는 미디어 파일의 재생시간이최소한 5초 이상이어야 문제가 발생하지 않는다.
마지막으로 참고할 것은, 콘텐츠 파일을 재생할 때 마다 로그가 생성된다. 로그를 분석할때 필터링 하는게 은근 귀찮아 지고, 로그파일 관리에 소홀히 하면 시스템이 뻗어버리는 황당한 경우가 발생할 수 있다. 정기적으로 로그파일의 상황을 확인해 주어야 한다.