하나의 동일 와우자 스트리밍 엔진 서버 안에서 한 어플리케이션에 게시된 라이브 스트림을 다른 어플리케이션에서 사용하려면 ModuleDuplicateStreams 모듈을 이용할 수 있다. 이 글에서는 JAR 파일 준비와 모듈 등록, 소스·타겟 어플리케이션 설정, 복제 스트림 확인 절차를 그림과 함께 설명하고, 접미사를 제거해 원본과 동일한 스트림 이름을 사용하는 방법도 안내한다.
같은 와우자 서버 내부의 스트림을 다른 어플리케이션에서 사용하는 방법
와우자 스트리밍 엔진(Wowza Streaming Engine, 이하 와우자)을 운용하다 보면, 한 어플리케이션에서 게시되는 스트림을 같은 와우자 서버의 다른 어플리케이션에서 사용해야 할 때가 있다.
예를 들어 트랜스코딩을 전담하거나 스트림 간의 먹싱(Muxing) 기능을 수행하는 별도의 어플리케이션을 구성하려는 경우인데, 이때 일반적인 스트림 파일같이 URL 주소를 입력하면 정상적으로 수신되지 않는 것을 볼 수 있다.
이러한 경우 같은 와우자 서버의 어플리케이션 사이에서 스트림을 내부적으로 복제할 수 있도록 제공되는 확장 모듈이 ModuleDuplicateStreams다.
ModuleDuplicateStreams 모듈이란?
ModuleDuplicateStreams 모듈은 같은 와우자 서버 안에서 어플리케이션의 스트림을 복제해, 사용하려는 타겟 어플리케이션으로 전달하는 확장 모듈이다.
이 글에서는 와우자 서버 리스너로 생성된 라이브 스트림을 다른 와우자 어플리케이션에서 사용할 수 있도록 구성하는 과정을 예로 들어 ModuleDuplicateStreams 설정 방법을 설명한다.
ModuleDuplicateStreams 사용 방법
Step 1 : 사전 준비
작업을 시작하기 전, 다음의 것들을 준비해 준다.
- JAR 파일 준비
소스를 컴파일하거나 완성된 바이너리를 다운로드받아 JAR 파일을 준비한다.
ModuleDuplicateStreams와우자 확장 모듈 링크 목록 - 확장 모듈 설치
준비한 JAR 파일을 와우자 라이브러리 디렉토리에 복사해 설치한다.
- 복제할 소스 스트림을 준비하고 소스 스트림을 수신할 어플리케이션, 복제한 스트림을 수신할 타겟(target) 어플리케이션을 구성한다. 본 예시의 구성은 아래와 같다.
- 소스 스트림과 어플리케이션
FileToLive어플리케이션의MusicBox스트림- 타겟
AppToReceive어플리케이션
Step 2 : ModuleDuplicateStreams 모듈 등록
- 와우자 UI에 접속 후, 어플리케이션 목록에서 복제할 소스 스트림이 존재하는 어플리케이션을 선택한 후, Modules 탭을 선택하고 Edit 버튼을 클릭한다.

어플리케이션에 설치된 모듈 목록 - Add Module 버튼을 클릭한다.

Modules 편집 화면 - Add New Module 창에서 다음과 같이 모듈을 등록하고 Add를 클릭한다.

모듈 추가 - Name
- ModuleDuplicateStreams
- Description
- 운영자 필요에 따른 추가적인 설명
- Fully Qualified Class Name
- com.wowza.wms.plugin.ModuleDuplicateStreams
Save를 클릭해 설정을 저장한다.Restart Now버튼을 클릭해 어플리케이션을 재시작한다.
Step 3 : ModuleDuplicateStreams 프로퍼티 설정
소스 어플리케이션의 Properties를 선택해 설정 메뉴로 진입한 후, 제일 아래에 있는 Custom 항목으로 이동한다.
수동으로 추가한 커스텀 모듈에 대한 속성을 입력해 주기 위해 Edit 버튼을 클릭한 후 Add Custom Property 버튼을 클릭해 ModuleDuplicateStreams 모듈이 사용하는 프로퍼티들을 추가해 준다.

- duplicateStreamsStreamNames
- Path
- /Root/Application
- Type
- String
- Value
- 복제할 스트림 (이 예에서는 MusicBox)
- 복제할 스트림의 스트림 이름을 입력해 준다.
Incoming Streams목록에서 이름을 확인할 수 있다.
- duplicateStreamsTargetAppName
- Path
- /Root/Application
- Type
- String
- Value
- 타겟 어플리케이션 이름(이 예에서는 AppToReceive)
- 복제한 스트림을 보낼 타겟 어플리케이션의 이름을 입력해 준다. 어플리케이션 목록에 표시되는 이름을 적어주면 된다.
- duplicateStreamsTargetVHostName
- Path
- /Root/Application
- Type
- String
- Value
- 타겟 어플리케이션의 VHost
- 타겟 어플리케이션에 별도의 VHost 설정이 없다면
_defaultVHost_를 입력하거나, 프로퍼티를 설정하지 않도록 한다.
- duplicateStreamsStreamNameSuffix
- Path
- /Root/Application
- Type
- String
- Value
- 타겟 어플리케이션에서 사용할 스트림 네임의 접미사(이 예에서는
From_FileToLive) - 소스 스트림의 이름 뒤에 접미사를 추가해 구분할 수 있도록 한다.
- 프로퍼티를 설정하지 않을 경우 기본값으로 원본 스트림의 이름 뒤에
_dest가 자동으로 붙게 된다.

마지막으로 어플리케이션을 재시작 해 주면, 소스 어플리케이션에서 타겟 어플리케이션으로 스트림 복제 구성이 완료된다.
Step 4 : 타겟 어플리케이션 확인
소스 어플리케이션의 설정이 완료되었으니, 이제는 타겟 어플리케이션에서 정상적으로 스트림 수신이 되고 있는지 확인해 볼 차례이다. 아래의 순서를 참고하여 스트림 수신 상태를 확인해 보도록 한다.
- 어플리케이션 목록에서 위의
duplicateStreamsTargetAppName에 설정한 수신 어플리케이션을 선택한다. - Incoming Streams을 클릭해 어플리케이션의 활성 스트림 목록을 확인한다.
- 해당 스트림을 클릭해 스트림 수신 여부를 확인한다.

Step 5 : 진실의 시간 (클라이언트에서 확인)
VLC 등의 외부 플레이어를 이용해 스트림 상태를 최종적으로 확인 한다. Incoming Streams 섹션에서 표시되는 비트레이트는 단지 스트림이 있는지 없는지를 확인하는 용도로만 사용하는 게 좋다. 스트림이 정상인가의 여부를 확인하기 위해서는 반드시 디코더를 통해 직접 재생해서 확인해야 한다.
팁 : 타겟 스트림의 접미사를 없애는 방법
duplicateStreamsStreamNameSuffix는 소스 스트림과 구분하기 위해 스트림 이름 뒤에 붙는 접미사(suffix)를 의미한다. 이 값을 비워 두면, 출력되는 스트림의 이름이 입력 스트림의 이름과 동일하게 출력된다. 단, 웹 UI 상에서는 비워 둘 경우 저장이 불가능한 오류가 발생한다. 접미사를 붙이고 싶지 않다면, 해당 Application.xml 파일을 직접 수정해 공란으로 두면 적용이 가능하다.
<Property>
<Name>duplicateStreamsStreamNames</Name>
<Value>MusicBox</Value>
<Type>String</Type>
</Property>
<Property>
<Name>duplicateStreamsTargetAppName</Name>
<Value>AppToReceive</Value>
<Type>String</Type>
</Property>
<Property>
<Name>duplicateStreamsStreamNameSuffix</Name>
<Value></Value>
<Type>String</Type>
</Property>

추가 정보
ModuleDuplicateStreams 모듈을 활용하면 와우자의 어플리케이션 간 스트림 공유와 재활용이 손쉽게 가능하다. 이는 하나의 어플리케이션에 여러 기능을 집중시키지 않고 역할과 설정을 분리해 운영과 장애 분석을 용이하게 할뿐더러, 동일한 콘텐츠를 다양한 용도로 활용하려는 상황에도 유용하다. 이러한 상황에 처했다면 본 글을 기억해 주기 바란다.
ModuleDuplicateStreams에 대한 자세한 정보는 와우자에서 제공하는 공식 문서를 참고하기 바란다.
요약 및 FAQ
- 와우자 스트리밍 엔진의 출력을 같은 와우자의 다른 어플리케이션에서 사용할 수 있는가?
- 가능하다.
ModuleDuplicateStreams모듈을 이용하면 같은 와우자 스트리밍 엔진 서버 안에서 한 어플리케이션에 게시된 라이브 스트림을 다른 어플리케이션 인스턴스로 복제할 수 있다. 외부 스트림을 연결할 때 사용하는 일반적인 스트림 파일 방식이 아니라, 모듈을 통해 서버 내부에서 스트림을 복제하는 방식이다. ModuleDuplicateStreams모듈을 이용할 경우 스트림 복제 수에 제한이 있는가?- 와우자 스트리밍 엔진이 설치된 서버의 하드웨어 자원이 허락하는 범위 이내일 경우 최대 복제 스트림 수의 제한은 없다.
- 와우자 스트리밍 엔진의 어플리케이션 인스턴스(Application Instance)란?
- 와우자 어플리케이션이 실제로 실행되는 단위를 의미한다. 별도의 인스턴스를 지정하지 않으면 일반적으로 기본 어플리케이션 인스턴스인
_definst_가 사용된다. 예를 들어AppToReceive/_definst_는AppToReceive어플리케이션의 기본 인스턴스를 의미한다. - 원본과 복제된 스트림의 이름을 동일하게 할 수 있는가?
- 가능하다.
duplicateStreamsStreamNameSuffix의 값을 빈 문자열로 두면 접미사가 붙지 않아 원본과 동일한 스트림 이름을 사용할 수 있다. 단, 어플리케이션의Application.xml파일을 직접 편집해<Value></Value>로 설정해야 한다. ModuleDuplicateStreams모듈은 어디에 등록해야 하는가?- 복제할 원본 스트림이 게시되는 소스 어플리케이션에 등록해야 한다. 모듈은 소스 어플리케이션에 새 스트림이 게시되면 스트림 이름을 확인하고, 설정 조건과 일치하는 스트림을 지정된 타겟 어플리케이션 인스턴스로 복제한다.
- 복제된 스트림을 다른 와우자 서버로 보낼 수 있는가?
ModuleDuplicateStreams는 같은 와우자 스트리밍 엔진 서버 안의 어플리케이션 인스턴스 사이에서 스트림을 복제하는 모듈이다. 별도의 와우자 서버나 외부 송출 대상에 스트림을 전송하려면 Push Publishing이나 Stream Targets와 같은 다른 기능을 사용해야 한다.- 복제할 스트림을 여러 개 지정할 수 있는가?
- 가능하다.
duplicateStreamsStreamNames에 복제할 스트림 이름을 쉼표로 구분해 입력할 수 있다. 또한*와일드카드를 사용해 모든 스트림을 지정하거나,*_720p처럼 특정 이름 패턴과 일치하는 스트림만 복제하도록 할 수 있다. duplicateStreamsStreamNames를 설정하지 않으면 어떻게 되는가?- 기본값은
*다. 따라서 별도의 값을 지정하지 않으면 소스 어플리케이션에 게시되는 모든 스트림이 복제 대상이 될 수 있다. 특정 스트림만 복제하려면 스트림 이름이나 이름 패턴을 명시하는 것이 좋다. - 원본 스트림이 종료되면 복제된 스트림은 어떻게 되는가?
- 원본 스트림의 게시가 종료되면 타겟 어플리케이션에 생성된 복제 스트림도 함께 종료된다.
ModuleDuplicateStreams는 원본 스트림과 독립된 별도의 미디어 소스를 생성하는 기능이 아니라, 원본 스트림의 동작 상태에 따라 복제 스트림을 게시하고 종료한다. - 스트림 복제에 네트워크 대역폭이 사용되는가?
- 같은 와우자 서버 안에서 소스 스트림을 타겟 어플리케이션으로 내부 복제하므로, 네트워크 인터페이스의 대역폭을 추가로 사용하지는 않는다. 다만 복제 처리에는 하드웨어 자원이 필요하다.
- 복제된 스트림에는 기본적으로 어떤 이름이 사용되는가?
duplicateStreamsStreamNameSuffix를 설정하지 않으면 기본 접미사인_dest가 원본 스트림 이름 뒤에 붙는다. 예를 들어 원본 스트림 이름이MusicBox라면 타겟 어플리케이션에는MusicBox_dest로 게시된다.- 타겟 VHost를 별도로 지정해야 하는가?
- 소스와 타겟 어플리케이션이 기본 VHost를 사용한다면
duplicateStreamsTargetVHostName프로퍼티를 생략하거나_defaultVHost_를 입력할 수 있다. 별도의 VHost를 사용하는 경우에는 실제 타겟 어플리케이션이 속한 VHost 이름을 입력해야 한다. - 복제된 스트림이 정상인지 확인하는 방법은?
- 타겟 어플리케이션의 Incoming Streams 목록에서 복제된 스트림 이름과 비트레이트를 먼저 확인한다. 다만 관리 화면에 스트림이 표시되는 것만으로 영상과 음성이 정상이라고 단정할 수 없으므로, VLC와 같은 외부 플레이어나 실제 서비스 클라이언트에서 직접 재생해 확인하는 것이 좋다.