WebRTC 회의의 맥락에서 가상 미디어 스트림은 선택적 전달 장치 (SFU)에서 생성하여 여러 참여자의 미디어를 집계하고 배포하는 미디어 스트림입니다. 대규모 회의에서 복잡한 연결 메시를 만드는 직접적인 P2P 미디어 스트림과 달리 가상 미디어 스트림은 토폴로지를 단순화합니다. SFU는 각 참여자로부터 개별 미디어 스트림을 수신하고 활성 또는 관련 스트림을 다른 참여자에게 선택적으로 전달하여 더 작고 고정된 일련의 아웃바운드 가상 미디어 스트림으로 다중화합니다.
이 접근 방식을 사용하면 각 참여자가 처리해야 하는 동시 수신 스트림 수가 줄어들어 처리 및 대역폭 요구사항이 줄어듭니다. 각 가상 스트림은 한 번에 한 명의 참여자의 미디어를 포함할 수 있으며, SFU에서 발표자 활동 또는 동영상 할당과 같은 요소를 기반으로 동적으로 조정합니다. 참여자는 이러한 가상 스트림을 수신하여 다른 모든 참여자의 개별 스트림을 관리할 필요 없이 회의의 구성된 뷰를 효과적으로 볼 수 있습니다. 가상 미디어 스트림에서 제공하는 이 추상화는 WebRTC 회의를 다수의 참여자로 확장하는 데 중요합니다.
오디오를 수신하려면 클라이언트가 정확히 세 개의 오디오 미디어 설명을 제공하여 세 개의 로컬 오디오 트랜시버를 만들어야 합니다. 동영상을 수신하려면 클라이언트가 1~3개의 동영상 미디어 설명을 제공하여 동영상 트랜시버 수를 설정해야 합니다.
수신자
각 클라이언트 소유 트랜시버에는 Meet 서버에서 오디오 RTP 스트림을 수신하는 전용 RtpReceiver
및 전용 '미디어 트랙'이 있습니다.
각 트랙에는 고유한 ID가 있으며 특정 미디어 소스에서 고유한 RTP 패킷 스트림을 수신합니다. 예를 들어 트랙 A는 production-1
에서 오디오를 수신하고 트랙 B는 production-2
에서 오디오를 수신할 수 있습니다.
SSRC
각 RTP 패킷에는 특정 트랙에 연결하는 동기화 소스(SSRC) 헤더 값이 있습니다.
Meet Media API를 통한 오디오 세션은 각각 고유한 정적 SSRC가 있는 세 가지 고유한 미디어 스트림을 사용합니다. 일단 설정되면 이러한 SSRC 값은 세션 기간 동안 변경되지 않습니다.
가상 스트림
Meet Media API는 가상 미디어 스트림을 사용합니다. 이는 세션 전체에서 정적이지만 패킷 소스는 가장 관련성 높은 피드를 반영하도록 변경될 수 있습니다. 가상 미디어 스트림은 오디오와 동영상에서 동일하게 작동합니다.
RTP 패킷 헤더의 참여 소스(CSRC)는 RTP 패킷의 실제 소스를 식별합니다. Meet에서는 참여자가 회의에 참여할 때 각 참여자에게 고유한 CSRC를 할당합니다. 이 값은 사용자가 페이지를 나가기 전까지 일정하게 유지됩니다.
SSRC 수는 Meet Media API 세션 전체에서 일정하므로 다음과 같은 세 가지 시나리오가 가능합니다.
사용 가능한 SSRC보다 많은 참여자:
Meet은 세 개의 SSRC에 가장 큰 소리를 내는 세 명의 사용자를 전송합니다. 각 RTP 스트림은 자체 전용 SSRC에 있으므로 스트림 간에 섞이지 않습니다.
그림 1. Meet은 세 개의 SSRC에 가장 큰 소리를 내는 세 명의 사용자를 전송합니다. 회의의 원본 스트림 중 더 이상 가장 큰 볼륨의 스트림이 없으면 Meet에서 SSRC를 구성하는 RTP 패킷을 가장 큰 볼륨의 스트림으로 전환합니다.
그림 2. Meet에서 RTP 패킷을 가장 큰 소리를 내는 새로운 사용자로 전환합니다. 활성 참여자 수가 오디오 SSRC 3개보다 적음:
회의에 있는 스트림보다 사용 가능한 SSRC가 더 많은 시나리오의 경우 Meet은 사용 가능한 모든 오디오 패킷을 고유한 SSRC에 매핑합니다. 사용되지 않은 SSRC는 계속 준비되고 사용할 수 있지만 RTP 패킷은 전송되지 않습니다.
그림 3. Meet은 사용 가능한 오디오 패킷을 고유한 SSRC에 매핑합니다. 활성 참여자 수가 오디오 SSRC 3개와 같음:
참여자와 사용 가능한 SSRC가 동일한 시나리오에서는 각 참여자의 미디어가 전용 SSRC에 매핑됩니다. 이러한 매핑은 이 특정 시나리오가 지속되는 한 유지됩니다.
그림 4. Meet은 각 참여자의 미디어를 전용 SSRC에 매핑합니다.