INTEGRITY Dokumentace

Simulcast

Simulcast je funkce WebRTC, která umožňuje vydavateli odesílat více video streamů stejného média v různých kvalitách. To se hodí například v případech, kdy chcete uživatelům počítačů posílat stream ve vysoké kvalitě a uživatelům mobilních zařízení stream v nižší kvalitě.

graph LR
    A[Publisher] -->|Low quality| B[Cloudflare Realtime SFU]
    A -->|Medium quality| B
    A -->|High quality| B
B -->|Low quality| C@{ shape: procs, label: "Subscribers"}
B -->|Medium quality| D@{ shape: procs, label: "Subscribers"}
B -->|High quality| E@{ shape: procs, label: "Subscribers"}

Jak to funguje

Simulcast ve WebRTC umožňuje kódovat jeden zdroj videa, například kameru nebo sdílení obrazovky, ve více úrovních kvality a odesílat je současně, což je výhodné pro odběratele s různými síťovými podmínkami a možnostmi zařízení. Zdroj videa se rozdělí do několika streamů, z nichž každý je označen identifikátorem RID (RTP Stream Identifier) pro danou úroveň kvality, například nízkou, střední a vysokou. Tyto simulcastové streamy jsou popsány v SDP, které odesíláte do Cloudflare Realtime SFU. Zajistit, aby se každému odběrateli doručil odpovídající kvalitní stream podle jeho síťových podmínek a možností zařízení, je úkolem Cloudflare Realtime SFU.

Cloudflare Realtime SFU automaticky zpracuje konfiguraci simulcastu na základě SDP, které mu odešlete z publikující strany. SFU pak automaticky přepíná mezi jednotlivými úrovněmi kvality podle síťových podmínek odběratele, nebo lze úroveň kvality řídit ručně přes API. Chování přepínání kvality můžete ovládat pomocí simulcast konfigurační objekt při odeslání API volání pro zahájení stahování vzdáleného tracku.

Kontrola kvality

simulcast konfigurační objekt v API volání při zahájení stahování vzdáleného tracku umožňuje zadat:

Správa šířky pásma napříč mediálními stopami

Cloudflare Realtime zachází se všemi mediálními stopami na úrovni přenosu stejně. Pokud máte například více video stop (kamery, sdílení obrazovky atd.), mají všechny stejnou prioritu při přidělování šířky pásma. To znamená:

  1. Konfigurace simulcastu každé stopy se zpracovává nezávisle
  2. SFU provádí automatický odhad šířky pásma a přepínání vrstev na základě podmínek sítě nezávisle pro každou stopu

Chování při přepínání vrstev

Když je vyžádáno přepnutí vrstvy (prostřednictvím aktualizace preferredRid) s /tracks/update API:

  1. SFU automaticky vygeneruje Full Intraframe Request (FIR)
  2. Generování PLI je zpožďováno (debounce), aby se předešlo nadměrnému počtu požadavků.

Konfigurace publikující strany

Pro vydavatele (místní tracky) stačí do SDP zahrnout atributy simulcastu. SFU podle SDP automaticky zajistí konfiguraci simulcastu. SDP by například mělo obsahovat sekci podobnou této:

a=simulcast:send f;h;q
a=rid:f send
a=rid:h send
a=rid:q send

Pokud je koncový bod publikujícího prohlížečem, můžete tyto položky zahrnout zadáním sendEncodings při vytváření transceiveru takto:

const transceiver = peerConnection.addTransceiver(track, {
	direction: "sendonly",
	sendEncodings: [
		{ scaleResolutionDownBy: 1, rid: "f" },
		{ scaleResolutionDownBy: 2, rid: "h" },
		{ scaleResolutionDownBy: 4, rid: "q" },
	],
});

Příklad

Zde je příklad použití simulcastu s Cloudflare Realtime:

  1. Vytvořte novou lokální stopu s konfigurací simulcast. V SDP by měla existovat sekce s a=simulcast:send.
  2. Použijte Cloudflare Realtime API a odeslat tak tento místní track voláním endpointu /tracks/new.
  3. Použijte Cloudflare Realtime API a zahájit tak stahování vzdáleného tracku (z jiného prohlížeče nebo zařízení) voláním endpointu /tracks/new a zadáním simulcast konfigurační objekt spolu s ID vzdáleného tracku, které jste získali v kroku 2.

Další příklady najdete v GitHub repozitář Realtime Examples.