와우자 스트리밍 엔진 트랜스코더를 이해하기 위한 핵심 개념은 인코딩 설정을 정의하는 프리셋과 적용할 프리셋을 결정하는 템플릿이다. 이 둘의 조합을 통해 라이브 스트림의 코덱, 비트레이트와 해상도를 실시간으로 변환하고 하나의 입력으로부터 여러 출력 스트림을 생성할 수 있다. 본 글에서는 트랜스코더의 개념과 각종 제한 사항, 활성화 방법을 살펴보고, 프리셋과 템플릿의 관계부터 Fallback 템플릿 및 스트림별 템플릿 지정 방법까지 기본적인 설정 구조를 설명한다.
와우자 스트리밍 엔진 트랜스코더
와우자에서는 트랜스코더의 기능을 트랜스코딩(transcoding)과 트랜스레이팅(transrating)으로 구분하고 있으며, 각각의 정의는 아래와 같다.
- 트랜스코딩(transcoding)
- 소스를 디코딩한 뒤 코덱을 변경해 다시 인코딩하는 것
- 트랜스레이팅(transrating)
- 비트레이트를 변경하고 키프레임을 정렬하는 것
저 두 가지 정의는 실무적으로는 거의 유사한 동작을 의미한다. 고로, 독자 제위께서는 트랜스코딩이니 트랜스레이팅이니 굳이 복잡하게 구분할 필요 없이 그냥 다음과 같이 기억해 두셔도 되겠다.
뭐가 됐든,
그림을 다시 그리기 위해 CPU/GPU 연산이 필요하면
트랜스코딩이다.
이를 바탕으로 트랜스코딩에 대해 생각해 보면, 트랜스코더는 아래와 같은 작업들을 수행하는 놈이라 생각할 수 있겠다.
- 출력 스트림을 여러 비트레이트로 만들거나: 서로 다른 화질의 그림을 그린다.
- 입력되는 코덱을 변경하거나: 다른 방법을 이용해 그림을 새로 그린다.
- 로고나 이미지 등을 삽입하거나: 기존 그림 위에 무엇인가를 추가해 새로운 그림을 그린다.
와우자 스트리밍 엔진 트랜스코더의 제한과 활성화 방법
사용하는 라이선스에 따라 차이가 있으나 기본적으로 와우자 트랜스코더는 하나의 와우자 인스턴스당 10개의 스트림 입력 제한이 존재하며, 이상의 경우 별도의 비용이 발생한다.
때문에, 트랜스코더를 사용하는 어플리케이션에는 방화벽 또는 사용자 인증 등을 통해 접근을 제한해 주어야 한다. 라이선스 때문이 아니더라도 트랜스코딩은 시스템의 자원을 많이 소모하는 작업이기 때문에 시스템의 Safety Margin(안정성 여유)을 확보하기 위해서라도 트랜스코딩 작업에 대한 권한을 잘 관리해 주어야 한다.
또한 와우자는 여러 종류의 코덱을 지원하지만, 일부 코덱은 디코딩(입력)과 인코딩(출력) 중 한 가지만 지원한다. 따라서 트랜스코더를 구성하기 전에 입출력 스트림의 코덱을 확인하고, 코덱별 디코딩 및 인코딩 지원 여부를 확인해야 한다.
우선, 와우자 트랜스코더 활성화부터 시켜보도록 하겠다. 와우자 웹 UI에 접속해서 트랜스코더를 활성화할 어플리케이션을 선택하고, 좌측 메뉴에서 Transcoder를 선택해 트랜스코더 메뉴로 진입하면 현재 상태가 표시된다.

Enable Transcoder 버튼을 클릭하고 어플리케이션을 재시작하면 Status가 초록색 Enabled로 변경되고 트랜스코더가 활성화된다.
와우자 트랜스코더의 프리셋과 템플릿
와우자 트랜스코더의 동작은 트랜스코더의 세부적인 동작을 정의하는 프리셋(Preset)과 입력되는 소스 스트림에 어떤 프리셋을 적용할지 결정하는 템플릿(Template)의 조합으로 결정된다. 이를 그림으로 표현하면 아래와 같은 구조가 된다.

- 프리셋(Preset)
- 실제 트랜스코딩 작업을 정의하는 단위로, 각각의 출력 스트림에 적용할 세부 포맷을 지정한다.
- 템플릿(Template)
- 하나 이상의 프리셋을 묶어 관리하는 단위로, 입력된 소스 스트림에 어떤 프리셋들을 적용할지 결정한다.
와우자 트랜스코더의 템플릿이란?
와우자 트랜스코더의 템플릿(Template)은 하나 이상의 프리셋을 묶어 관리하는 단위이다. 와우자는 입력받은 소스 스트림의 이름을 기준으로 규칙에 따라 적절한 템플릿을 적용하고, 템플릿 내부에 정의된 프리셋 항목에 따라 트랜스코딩 작업을 수행한다.
어플리케이션에서 Transcoder 메뉴를 클릭하면 트랜스코더의 상태와 기본 설정과 함께 템플릿과 관련된 설정을 확인할 수 있다. 이 화면에는 템플릿이 저장되는 디렉토리, 입력 스트림별 템플릿 사용 여부, Fallback 템플릿과 사용할 수 있는 템플릿 목록이 표시된다.

Transcoder Templates 섹션에는 이 어플리케이션이 사용할 수 있는 트랜스코더 템플릿의 목록이 표시되는데, (Default)라는 표시가 붙은 템플릿들은 와우자 설치 시 자동으로 생성되는 템플릿이다.
자동으로 생성된 템플릿을 그대로 사용해도 되지만, Copy Template을 이용해 기존 템플릿을 복사하거나 Add Template을 이용해 새로운 사용자 템플릿을 추가할 수도 있다. 물론, 원하는 템플릿의 이름을 클릭해 수정 화면으로 들어가 적절히 변형해 사용할 수도 있다. 이렇게 추가한 템플릿도 같은 템플릿 디렉토리에 저장되며, 같은 VHost의 다른 어플리케이션에서 공통적으로 사용할 수 있다.
와우자 트랜스코더의 프리셋이란?
와우자 트랜스코더의 프리셋(Preset)은 트랜스코더의 실제 동작을 정의한다. 템플릿이 어떤 작업들을 적용할지 결정하는 묶음이라면, 프리셋은 출력 스트림의 이름, 코덱, 포맷, 하드웨어 가속 방식 등 각각의 작업에 필요한 세부 조건을 정의한다.
하나의 활성 프리셋은 하나의 출력 스트림을 생성한다. 따라서 한 템플릿에 여러 인코딩 프리셋을 활성화하면 하나의 입력 스트림으로부터 서로 다른 포맷의 출력 스트림을 여럿 생성할 수 있다.

예를 들어, 위의 Transrate (Default) 템플릿에는 source, 720p, 360p, 240p, 160p 인코딩 프리셋이 등록되어 있고, 이 가운데 source, 360p, 160p 프리셋이 활성화되어 있다. 즉, 세 개의 출력 스트림이 생성된다.
프리셋 이름을 클릭하거나 편집 버튼을 누르면 다음과 같은 세부 항목을 설정할 수 있다.
- 프리셋의 활성화 여부
- 출력 스트림의 이름
- 비디오와 오디오 코덱
- 비트레이트와 화면 해상도
- 프레임 레이트와 GOP
- 소프트웨어 또는 하드웨어 인코딩 방식
- 하드웨어 가속과 사용할 GPU
- 로고와 그래픽 이미지 삽입

위의 화면은 Transcode H.265 (Default) 템플릿에 포함된 1080p 인코딩 프리셋의 설정 예다. 출력 스트림 이름에는 입력 스트림 이름을 가져오는 ${SourceStreamName} 변수가 사용되며, 비디오 코덱은 H.265, 비트레이트는 4500000bps로 설정되어 있다. (Mbps가 아니다!) 이처럼 각 프리셋의 설정을 다르게 구성하면 목적에 맞는 여러 출력 스트림을 만들 수 있다.
Fallback 템플릿과 스트림별 템플릿 지정 방법
입력 스트림마다 서로 다른 템플릿을 적용하려면 트랜스코더 설정 메뉴에서 Match source stream name to template name 옵션을 활성화하고, 각 입력 스트림과 같은 이름의 트랜스코더 템플릿을 생성한다.

Match source stream name to template name 옵션이 해제되어 있거나, 입력 스트림의 이름과 같은 템플릿이 존재하지 않는 경우에는 Fallback 템플릿으로 지정된 템플릿이 자동으로 적용된다.
Fallback으로 사용할 템플릿을 선택하고 스트림별 전용 템플릿을 사용하는 옵션은 어플리케이션의 Transcoder 메뉴에서 Edit 버튼을 클릭해 수정할 수 있다.
예를 들어 MD.stream이라는 입력 스트림이 있을 경우, 트랜스코더 템플릿 중에 MD.stream이라는 이름의 템플릿이 존재하면 Fallback 템플릿이 아닌 MD.stream 템플릿이 적용된다.
아래 화면은 MD.stream에 Transrate 템플릿이 적용된 결과다. 원본 입력 스트림과 함께 활성 인코딩 프리셋에 따라 생성된 MD.stream_source, MD.stream_360p, MD.stream_160p 스트림이 모두 Active 상태로 표시된다.

템플릿과 프리셋의 관계만 알면 그다음은 쉽다
일반적인 라이브 인코더나 파일 기반 트랜스코더에 익숙한 경우, 템플릿과 프리셋으로 나뉘는 와우자 트랜스코더의 설정 구조가 처음에는 낯설 수 있다. 하지만 찬찬히 생각해 보면 그다지 큰 차이가 있는 것은 아니다. 프리셋은 일반적인 인코더나 트랜스코더의 출력 설정에 해당하고, 템플릿은 여러 프리셋을 하나로 묶어 입력 스트림에 적용하는 역할을 한다.
결국 하나의 입력과 하나의 출력을 전제로 한 일반적인 인코더의 설정 구조를, 여러 입력과 여러 출력을 처리하기에 적합하도록 확장한 것뿐이다. 그 외의 기본적인 동작은 대동소이하다.
정리와 첨언
동영상 포맷에 대한 기본적인 이해가 있는 독자 제위라면 본 글만으로도 와우자 트랜스코더의 기본 구조를 이해하고 목적에 맞게 구성할 수 있으리라 생각한다. 대부분의 경우 기본 템플릿을 선택하고 그 안에 포함된 프리셋을 조금 수정하는 것으로 필요한 스트림을 만들 수 있다.
다만 본 필자는 가급적 와우자에서 트랜스코딩을 수행하지 않는 것을 권한다. 시스템의 구성에 따라 달라지겠지만, 대부분 와우자는 오리진의 역할을 기본적으로 수행한다. 와우자 트랜스코더는 분명 탄탄한 안정성과 다양한 기능을 제공하지만, 실시간 트랜스코딩에는 상당한 시스템 자원이 필요하다. 애초에 인코더에서 최종 출력 포맷에 맞는 스트림을 생성할 수 있다면 오리진 서버에 같은 작업을 다시 맡길 필요가 없다.
본 필자의 경험상, 예산이 허락한다면 인코더는 인코딩을, 오리진은 콘텐츠 배포를 담당하도록 역할을 분리하는 것이 시스템을 안정적으로 운영하는 데 유리하다.
요약 및 FAQ
- 와우자 스트리밍 엔진에서 트랜스코딩 작업이 가능한가?
- 가능하다. 와우자 스트리밍 엔진은 CPU 또는 GPU를 이용한 트랜스코딩 작업을 지원하며, 시스템의 자원과 라이선스의 제한 내에서 복수의 입력 스트림을 복수의 출력 스트림으로 변환할 수 있다.
- 와우자 스트리밍 엔진 트랜스코더의 제한은?
- 와우자가 지원하는 코덱 중 일부는 입력 또는 출력용으로 사용이 불가능하다. 또한 라이선스에 따라 와우자 인스턴스당 트랜스코딩 가능한 스트림의 수가 10개로 제한되며 이를 넘길 경우 추가 비용 검토가 필요하다.
- 와우자 스트리밍 엔진 트랜스코더의 기능은?
- 오디오·비디오 코덱 변경, 비트레이트와 해상도 조정, 여러 화질의 출력 스트림 생성, 프레임 자르기(Crop), 로고와 그래픽 이미지 삽입 등의 작업을 수행할 수 있다.
- 와우자 스트리밍 엔진 트랜스코더의 프리셋이란?
- 출력 스트림의 이름, 코덱, 비트레이트, 해상도와 인코딩 방식 등 실제 트랜스코딩 작업을 정의하는 설정 단위다. 하나의 활성 인코딩 프리셋은 하나의 출력 스트림을 생성한다.
- 와우자 스트리밍 엔진 트랜스코더의 템플릿이란?
- 하나 이상의 프리셋을 묶어 관리하는 설정 단위다. 입력 스트림에 어떤 프리셋들을 적용할지 결정하며, 하나의 템플릿에 여러 인코딩 프리셋을 활성화하면 서로 다른 포맷과 화질의 출력 스트림을 동시에 생성할 수 있다.
- 와우자의 입력 스트림마다 서로 다른 트랜스코딩 옵션을 적용할 수 있는가?
- 가능하다. Match source stream name to template name 옵션을 활성화하고 입력 스트림과 이름이 일치하는 템플릿을 준비하면 된다. 이름이 일치하는 템플릿이 없으면 해당 스트림에는 Fallback 템플릿이 적용된다.
- 와우자 트랜스코더를 사용하는 주된 이유는?
- 입력 스트림을 클라이언트와 전송 환경에 적합한 코덱, 비트레이트와 해상도로 실시간 변환하기 위해 사용한다. 하나의 입력 스트림으로부터 여러 화질의 출력 스트림을 생성하면 적응형 비트레이트 스트리밍에도 활용할 수 있다.
- 트랜스코더를 사용하는 어플리케이션의 접근을 제한해야 하는 이유는?
- 허가되지 않은 입력 스트림이 트랜스코더 채널과 시스템 자원을 점유하는 것을 방지하기 위해서다. 트랜스코딩은 CPU와 GPU 자원을 많이 사용하는 작업이므로 방화벽과 사용자 인증 등을 통해 입력 권한을 관리하는 것이 좋다.
- Fallback 템플릿은 언제 적용되는가?
- 스트림 이름에 따라 적용할 템플릿을 찾지 못했거나 스트림별 템플릿 지정 기능을 사용하지 않을 때 적용된다. 사용할 Fallback 템플릿은 어플리케이션의 Transcoder 설정에서 지정할 수 있다.
- 출력 스트림의 이름을 변경할 수 있는가?
- 각 인코딩 프리셋의 출력 스트림 이름 설정에서 변경할 수 있다. 특별한 명명 규칙이 필요하지 않다면 입력 스트림 이름과 프리셋 이름을 조합하는 기본 형식을 사용하는 편이 출력 스트림의 중복과 식별 오류를 줄이는 데 유리하다.
- 와우자 트랜스코더와 외부 트랜스코더 중 어느 쪽이 더 적합한가?
- 충분한 예산이 있다면 인코딩·트랜스코딩과 오리진의 역할을 분리하는 편이 자원 관리와 장애 범위 축소에 유리하다.
갱신 내역
- — 최초 게시
- — 1차 수정
- — 2차 수정 및 주소 이전