와우자 라이브 소스 중계 가이드 : 라이브리피터를 이용한 RTMP PULL 중계 재전송
와우자 스트리밍 엔진에서 외부 RTMP 스트림을 수신해 중계하여 외부로 재전송하기 위한 미디어캐스터의 라이브리피터(liverepeater) 설정 방법과 트래픽 분산, 서비스 무중단 이전 등 실제 활용 사례"
와우자 스트리밍 엔진(Wowza Streaming Engine, 이하 와우자 엔진)을 운영하다 보면 외부 RTMP 스트림을 소스로 입력받아 사용해야 하거나, 중계하여 외부로 재전송해야 할 경우가 생긴다. 이 경우, 라이브 인코더의 출력을 가져올때 사용하는 일반적인 방식으로는 스트림을 가져올 수 없다.
소스가 되는 서버에서 스트림을 재전송할 중계 서버를 향해 RTMP PUSH 방식으로 연동하는 방법도 있겠지만, 여러 가지 제약에 따라 공개된 주소를 Pull 방식(상대방 서버에 접속하여 스트림을 가져오는 방식)으로 가져와 입력 소스로 사용해야 할 경우도 있을 것이다.
본 글에서는 와우자가 RTMP 중계서버로 동작할 수 있도록 외부 RTMP 소스에 PULL 방식으로 연동하는 상세한 방법과, 본 필자가 와우자를 중계방식으로 운영해야 했던 경험들을 간단하게 공유하려 한다.
어떤 경우에 RTMP 중계가 필요할까?
RTMP 중계 기능은 단순히 스트림을 전달하는 것을 넘어, 서비스의 안정성, 확장성, 그리고 유연성을 크게 향상시키는데 유용한 도구가 될 수 있다. 몇 가지 활용 사례는 다음과 같다.
Case 1 : 트래픽 분산을 위한 프록시 구축
하나의 서버 또는 회선에 과도한 부하가 걸릴 경우, 안정적인 서비스 운용을 위해서 부하를 분산시켜줘야 할 필요가 있다. 동일한 역할을 할 서버를 하나 더 두고 클라이언트들이 분산 접속할 수 있도록 구성해 주면, 제한된 자원을 가지고 안정적인 서비스를 구성할 수 있다. 이 경우 소스 서버의 RTMP 출력을 프록시 역할을 할 와우자로 입력해 줄 필요가 있다.

Case 2 : 서비스 무중단 이전
본 필자는 송출 대행사라고 하는 곳에서 근무하고 있다. 자체 송출 시설을 갖추지 않은 채널사용사업자(PP)들을 대상으로 송출 설비와 관련 업무를 제공해 주는 회사이다. 어느 날 필자의 회사가 이전을 하게 되었고, 당시 회사에서는 약 10여 개 채널의 라이브 OTT 서비스를 제공해 주고 있었다.
이전을 한다고 해서 고객사의 방송을 중단시킬 수는 없다. 때문에 기존 와우자 서버의 RTMP 출력을 이전할 위치의 새로운 와우자 서버에서 중계받게 구성하고, 플랫폼이 새로운 와우자를 바라보게 구성을 완료했다. 그 뒤, 회선을 먼저 이전하고 송출시스템과 함께 와우자를 이전하는 방법으로 이전을 진행 했다. 이와 같이, 서버 이전의 경우에도 RTMP 중계 기능은 유용하게 사용할 수 있다.

필자가 경험한 위의 두 가지 예를 제외하고도, 다양한 기술적 제약이나 비즈니스 요구 사항에 따라 이와 같은 RTMP 중계 구성이 필요할 때가 있을 것이다. 예를 들면, 서로 다른 네트워크 망에 위치한 서버 간의 스트림 전달, 특정 방화벽 정책을 우회해야 하는 경우, 혹은 여러 소스 스트림을 하나의 와우자 엔진에서 처리해야 하는 경우 등이 있을 것이다. 이러한 경우, RTMP 스트림을 중계 방식으로 운영하면 간단하고 효율적으로 문제를 해결할 수 있게 된다.
중계 운용을 위한 와우자 엔진 미디어캐스터 구성 절차
와우자에서 외부 RTMP 소스를 Pull 방식 즉, 상대방 서버에 접속해서 스트림을 가져오는 방식으로 연동하기 위해서는, 아래의 절차를 따라 스트림파일을 생성해 주고, 적합한 타입의 MediaCaster 를 선택해 주어야 한다.
- 새 스트림 파일 생성
우선, RTMP 소스를 바라볼 스트림 파일을 새로 생성한다. 생성할 스트림 파일의 이름을 넣어주고, 재전송 하고자 하는 소스 스트림의 RTMP 주소(URI)를 입력해 준다.
스트림 파일 생성 - 스트림 연결 설정
스트림 파일 목록에서 새로 생성한 스트림 파일 옆의 Connect to this stream 아이콘을 클릭한다.
스트림 접속 - Mediacaster 선택
환경에 따라 Application Instance항목을 선택하고, MediaCaster Type을 클릭한다. 표시되는 목록에서 liverepeater를 선택한 후, OK를 클릭해 소스 스트림을 연결해 준다.
Liverepeater 선택 - 스트림 입력 확인
해당 어플리케이션의 Incoming Streams탭에서 스트림파일을 클릭하여 입력 스트림이 들어오고 있는지 확인한다. Network Throughput 항목의 Bytes In 항목에 입력받는 스트림의 비트레이트가 표시된다. 만약 이 항목이 0으로 표시 될 경우, 입력받는 스트림이 존재하지 않는다는 의미로, 소스의 주소나 네트워크 설정등을 다시한 번 확인해 보아야 한다.
정상 수신중인 스트림
마무리
위에서 설명한 절차대로 진행하면 별다른 문제 없이 외부의 RTMP 스트림을 중계하여 재전송할 수 있다. 이를 통해 스트림 서비스를 필요에 따라 좀 더 자유롭고 효율적으로 운영할 수 있다.
다만, 주의해야 할 것은, 사용권한이 없는 스트림을 임의로 재 전송할 경우 법적인 문제가 발생할 수 있다. 자신에게 사용 권한이 있는 스트림에 대해서만 사용해야 할 것이다.
RTMP 스트림 재 전송에 관한 추가적인 사항은 와우자의 공식 문서를 참고하기 바란다. 본 필자의 작은 글이 독자 제위의 서비스 운영에 작게나마 도움이 되기를 바라는 바이다.
요약과 FAQ
- 와우자 스트리밍 엔진에서 RTMP 스트림을 수신할 수 있는가?
- 가능하다. 원본 소스 서버에서 와우자 엔진을 향해 RTMP PUSH 로 스트림을 밀어 주거나, 라이브리피터를 이용해 RTMP PULL 방식으로 가져올 수 있다.
- RTMP 중계 기능이 필요한 상황은?
- 프록시 구성, 무중단 이전, 방화벽 우회등의 시나리오에 RTMP 중계 기능이 유용하게 사용된다.
- RTMP 재전송에는 RTMP PUSH 방식과 PULL 방식 중 어떤 것이 더 효과적인가?
- PULL 방식이 PUSH 방식보다 구성하기 쉽고 간편하다. 하지만 큰 차이는 없으며, 기술적인 제약사항이 없다면 둘 중 원하는 것을 사용해도 된다.