와우자 엔진: ModuleDuplicateStreams로 동일 서버 내 어플리케이션 간 스트림 공유

와우자 스트리밍 엔진 ModuleDuplicateStreams 모듈로 스트림을 복제하면, 동일 서버 어플리케이션 간 스트림 공유 연동 불가능 문제를 해결하고 효율적인 스트림 재활용이 가능해 집니다.

와우자 스트리밍 엔진(Wowza Streaming Engine, 이하 와우자 엔진) 서버를 운용하다 보면, 한 와우자 엔진 서버에 있는 어플리케이션의 스트림을 다른 어플리케이션에서 사용해야 할 때가 있다. 예를 들어, 한 어플리케이션에서 생성된 스트림을 다른 어플리케이션에서 재활용 하고자 하는 경우이다.

문제는 서버 외부에서는 잘 사용할 수 있는 스트림 URL을 동일한 인스턴스(Instance) 즉, 동일한 와우자 엔진 서버의 다른 어플리케이션에서 사용하려고 하면 스트림 수신이 불가능하다는 점이다. 즉, 같은 서버의 어플리케이션 간에는 연결이 불가능하다.

이러한 문제를 해결해주는것이 바로 와우자의 확장 자바 모듈인 ModuleDuplicateStreams 모듈이다.

ModuleDuplicateStreams 모듈이란?

ModuleDuplicateStreams 라는 확장 모듈은, 한 인스턴스 내에서 어플리케이션의 스트림을 복제해, 사용하고자 하는 타겟 어플리케이션에게 마치 RTMP PUSH처럼 스트림을 제공해 주는 모듈이다.

이 글에서는 이전에 작성한 와우자 서버 리스너로 생성된 라이브 스트림을 다른 와우자 어플리케이션이 사용할 수 있도록 구성하는 과정을 예로, ModuleDuplicateStreams 모듈 설정 방법을 설명한다.

ModuleDuplicateStreams 사용방법

Step 1 : 사전준비

작업을 시작하기 전, 다음의 것들을 준비 해 준다.

  • ModuleDuplicateStreams 모듈 다운로드 : 링크를 통해 연결된 깃 허브에서 완성된 jar 파일을 다운받을 수 있다.
  • 와우자 엔진에 모듈 설치 : 다운로드 받은 jar 파일을 와우자 엔진의 라이브러리 디렉토리에 복사해 설치하면 된다.
  • 복제할 소스 스트림과 어플리케이션, 그리고 복제한 스트림을 수신할 어플리케이션. 본 예시에서의 구성은 아래와 같다.
    소스
    FileToLive어플리케이션의 MusicBox스트림
    타겟
    AppToReceive어플리케이션

Step 2 : ModuleDuplicateStreams 모듈 등록

  1. 와우자 UI에 접속 후, 어플리케이션 목록에서 복제할 소스 스트림이 존재하는 어플리케이션을 선택한 후, Modules 탭을 선택한다.
    FileToLive 어플리케이션의 모듈 목록
    FileToLive 어플리케이션의 모듈 목록
  2. Edit버튼을 클릭한다.
    FileToLive 어플리케이션 모듈 목록 편집 화면
    FileToLive 어플리케이션 모듈 목록
  3. Add Module버튼을 클릭해 Add New Module창을 띄운 후, 다음과 같이 모듈을 등록한다.
    ModuleDuplicateStreams 모듈 추가 창
    DuplicateStreams를 등록하는 모습
    Name
    ModuleDuplicateStreams
    Description
    운영자 필요에 따른 추가적인 설명
    Fully Qualified Name
    com.wowza.wms.plugin.ModuleDuplicateStreams
  4. AddSave 클릭으로 설정을 저장한다.
  5. Restart Now버튼을 클릭해 어플리케이션을 재 시작 한다.

Step 3 : ModuleDuplicateStreams 프로퍼티 설정

어플리케이션의 Properties를 선택해 설정 메뉴로 진입 한 후, Add Custom Property버튼을 클릭해 ModuleDuplicateStreams 모듈이 사용하는 아래 목록의 프토퍼티(Name)들을 추가해 준다.

  • 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가 자동으로 붙게 된다.
어플리케이션 사용자 정의 속성: duplicateStreamsStreamNames : MusicBox, duplicateStreamsTargetAppName : AppToReceive, duplicateStreamsStreamNameSuffix : From_FileToLive
모든 프로퍼티를 입력 완료한 모습

마지막으로 어플리케이션을 재시작 해 주면, 소스 어플리케이션에서 타겟 어플리케이션으로 스트림 복제 구성이 완료 된다.

Step 4 : 타겟 어플리케이션 확인

소스 어플리케이션의 설정이 완료 되었으니, 이제는 타겟 어플리케이션에서 정상적으로 스트림 수신이 되고 있는지 확인해 볼 차례이다. 아래의 순서를 참고하여 스트림 수신 상태를 확인해 보도록 한다.

  1. 어플리케이션 목록에서 위의 duplicateStreamsTargetAppName에 설정한 수신 어플리케이션을 선택한다.
  2. Incoming Streams을 클릭해 어플리케이션의 활성 스트림 목록을 확인한다.
  3. 해당 스트림을 클릭해 스트림 수신 여부를 확인한다.
복제된 MusicBoxFrom_FileToLive 스트림이 191.320Kbits/s 로 수신되고 있는 모습
AppToReceive 에서 수신되는 복제 스트림, Prefix FileToLive가 붙어있다.

Step 5 : 진실의 시간 (클라이언트에서 확인)

VLC등의 외부 플레이어를 이용해 스트림 상태를 최종적으로 확인 한다. Incoming Streams 에서 표시되는 비트레이트는 스트림의 유무만을 나타낸다 생각해야 한다. 스트림이 정상인가의 여부를 확인하기 위해서는 반드시 디코더를 통해 직접 재생해서 확인해야 한다.

ModuleDuplicateStreams 모듈 참고사항

  1. duplicateStreamsStreamNameSuffix의 값을 공백으로 두면, 출력되는 스트림의 이름은 입력 스트림의 이름과 동일하게 출력된다. 단, 웹UI 상에서는 공란(NULL)으로 둘 경우 저장이 불가능한 오류가 발생한다. 이 경우, 해당 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> // 이 부분을 공란(NULL)으로 둔다.
      <Type>String</Type>
    </Property>
    AppToReceive 어플리케이션에서 MusicBox 스트림 수신 확인
    스트림 이름에서 프리픽스가 제거된 모습
  2. ModuleDuplicateStreams에 대한 자세한 정보는 와우자에서 제공하는 공식 문서를 참고하기 바란다.

맺음

ModuleDuplicateStreams 모듈을 활용하면 와우자의 어플리케이션 간 스트림 공유 및 재활용이 손쉽게 가능하다. 스트리밍 효율성을 높이고, 동일한 콘텐츠를 다양한 용도로 활용하려는 상황에 매우 본 글을 기억해 주기 바란다.

요약 및 FAQ

와우자 스트리밍 엔진은 자신의 출력을 다시 입력으로 사용할 수 있는가?
ModuleDuplicateStreams모듈을 이용해 하나의 와우자 스트리밍 엔진 어플리케이션 간 스트림 공유가 가능하다. 단, 일반적인 스트림 파일을 이용할 수 없다.
ModuleDuplicateStreams모듈을 이용할 경우 스트림 복제의 제한이 있는가?
와우자 스트리밍 엔진이 동작하고 있는 시스템의 성능한도 내에서 제한 없이 복제가 가능하다.
와우자 스트리밍 엔진의 인스턴스(Instance)란?
와우자 스트리밍 엔진 하나를 의미한다. 서버 두 대에 각각 와우자 스트리밍 엔진을 설치했다면 사용하는 인스턴스는 두개가 된다.
원본과 복제된 스트림의 이름을 동일하게 할 수 있는가?
duplicateStreamsStreamNameSuffix를 공란(NULL)으로 두면 접미사가 붙지 않아 원본과 동일한 이름을 사용할 수 있다. 단, 웹 UI에서는 설정할 수 없으며, Application.xml 파일을 수동으로 편집해 주어야 한다.
ModuleDuplicateStreams 모듈은 어디에 설치해야 하는가?
복제할 원본 스트림이 존재하는 어플리케이션에 설치해야 한다. 또한, 복제된 스트림을 사용할 어플리케이션이 같은 와우자 엔진 인스턴스 내에 위치해야만 한다.
스트림 복제에 네트워크 대역폭이 사용되는가?
Incoming Streams에서 표출되는 비트레이트는 해당 어플리케이션으로 수신되는 비트레이트를 나타낸다. 하지만 실제 네트워크의 대역폭을 사용하는 것은 아니다.

1998년 라이브 음향 엔지니어로 시작해 2005년부터 방송 송출 및 미디어 전송 엔지니어의 삶을 살아가고 있습니다. 아날로그 제작 시스템부터 최신 IP 미디어 라스트마일 환경까지, 미디어 기술과 정보 통신 기술(ICT)의 융합을 통해 새로운 솔루션을 제안하고 실현시켜 왔습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Post comment