WebRTC의 RED Audio Codec에 대해서

by digipine posted Apr 15, 2024
?

Shortcut

PrevPrev Article

NextNext Article

ESCClose

Larger Font Smaller Font Up Down Go comment Print
WebRTC에서 오디오 전송을 위한 코덱(Codec)은 OPUS, G733, PCMA, PCMU등 여러가지 있습니다. 하지만 스테레오로 음악과 같은 고품질의 오디오를 전송하기 위한 포맷은 OPUS가 유일합니다.
OPUS는 압축율도 좋고 저지연(Low Latency)로 동작해면서도 음질이 비교적으로 좋은 편입니다. Speex를 계승하는 코덱이며 VoIP 용도로 개발된 코덱이지만 음악의 저장이나 스트리밍에서도 탁월한 성능을 발휘하는 것을 알려져 있지요.
스펙은 RFC6716에 완전히 공개되어 있습니다.
WebRTC의 대부분의 실시간 오디오 전송과 같이 UDP 방식으로 전송됩니다. Latency를 줄이는 것에는 성공적이지만 네트워크 상황이 나빠지면 패킷이 손실되어 재생이 끊기는 현상이 발생할 수 밖에는 없습니다.
OPUS에서는 이런 무제를 해결하기 위해서 FEC(Forward Error Correction)이라는 것을 사용하고 있습니다.
FEC는 미디어 패킷이 복제되어 지연 없이 네트워크를 통해 여러 번 전송되는 메커니즘입니다. 이는 일부 패킷이 수신되지 않더라도 미디어 스트림이 여전히 적절하게 구문 분석되고 디코딩될 수 있음을 의미합니다. 이는 전송 중에 손실된 패킷이 여러 번 전송되었다고 가정합니다.
FEC는 WebRTC에 다양한 방식으로 존재합니다.
1. Opus 음성 코덱 구현의 일부로
2. 각 오디오 프레임이 두 번 이상 전송될 수 있는 오디오용 중복 코딩
 
이런 기능을 독립적인 코덱으로 만든 것이 RED(REDundant Coding)라는 것으로 중복 오디오 또는 비디오 데이터를 인코딩하기 위해 RFC 2198 에 정의된 RTP 페이로드 형식 입니다 .
 
RED의 사용은 추가 페이로드 유형으로 SDP 에서 협상되며 , 오디오/비디오 RTP 패킷이 사용되면 실제 오디오/비디오 패킷을 전달하는 기본 및 보조 페이로드 앞에 6바이트 헤더가 있는 RED 형식을 사용하여 패키징됩니다. 
 
WebRTC의 관점에서 RED는 패킷 손실에 대처하는 오디오 재생의 유연성을 높이는 데 사용될 수 있습니다 . 수년 동안 WebRTC는 패킷 손실 복원력을 제공하기 위해 Opus에 내장된 내부 전달 오류 수정 기능에 의존했습니다. 결과는 유의미했지만 만족할 만한 수준은 아니었습니다. 이를 개선하기 위해 개발자는 RED를 보조 메커니즘으로 사용하여 유연성을 강화하는 방법을 모색했습니다. ULPFEC 정보로 이를 구현합니다.(아래 내용 참조)
 
여기에는 두 가지 반대 의견이 있습니다.
 
1. FEC는 가능한 한 적은 추가 비트 전송률을 사용하여 지능적인 방식으로 수행되어야 합니다.
2. RED와 같은 "무차별 대입" 솔루션은 비트레이트가 비싼 경우에도 유용합니다.
 
이로 인해 WebRTC는 실제로 RED를 "즉시" 지원하지 않고 구현자가 미디어 서버 및 삽입 가능한 스트림을 사용하여 이를 추가할 수 있도록 합니다 . RED를 채택하는 사람들은 비트 전송률이 오디오 비트 전송률의 두 배 또는 세 배가 된다는 점을 이해하고 있습니다. 이는 화상 통화에서 비디오 스트림의 비트 전송률 요구 사항에 비해 여전히 상당히 낮습니다.
 
중복된 정보를 처리하는 스키마 ULPFEC는 다음과 같습니다.
 
 
ULPFEC (Uneven Level Protection Forward Error Correction)
 
ULPFEC는 불균등 레벨 보호 순방향 오류 수정(Uneven Level Protection Forward Error Correction)을 나타냅니다. 오디오 및 비디오 패킷 손실을 복구하기 위해 WebRTC에 포함된 솔루션 중 하나입니다.
 
FEC(Forward Error Correction)는 다음 패킷에 RTP 패킷 에 대한 중복 정보를 포함하여 구성됩니다 . 이렇게 하면 패킷 중 하나가 손실된 경우 재전송 없이 다음 패킷에서 수신된 정보에서 데이터를 복구할 수 있습니다. 따라서 재전송이 필수인 높은 대기시간이나 실시간 요청 가능한 네트워크에 특히 적합합니다.
 
요즘에는 Opus FEC, ULPFEC 및 FlexFEC(플래그 뒤에 비활성화됨)를 포함하여 WebRTC 클라이언트 내부에 다양한 정방향 오류 수정 구현이 있습니다 . 이러한 스키마는 SDP 제안/응답 교환 에서 협상됩니다 .
 
ULPFEC는 RFC 5109 에 정의되어 있으며 여러 패킷에 걸쳐 XOR을 사용하여 이 중복 정보를 생성하고 필요한 경우 수신기 측에서 손실된 패킷을 복구할 수 있습니다. ULPFEC는 보호되는 바이트의 양과 XOR이 적용되는 이전 패킷의 수를 선택하여 다양한 패킷에 대해 다양한 수준의 보호를 제공하는 기능을 갖추고 있습니다.
 
WebRTC의 경우 ULPFEC 정보는 RED 형식을 사용하여 RTP 패킷에 포함되어 전송됩니다.
TAG •