INTEGRITY Dokumentace

WebSocket adaptér

Streamujte zvuk a video mezi stopami WebRTC a koncovými body WebSocket. Podporuje příjem zvuku ze zdrojů WebSocket a odesílání zvuku a videa WebRTC ke spotřebitelům WebSocket. Výstup videa (egress) je podporován ve formátu JPEG přibližně při 1 FPS.

Co můžete vytvořit

Jak to funguje

Vytváření WebRTC stop z externího zvuku

Přijímejte zvuk z externích zdrojů přes WebSocket a vytvářejte z něj WebRTC tracky pro distribuci.

graph LR
    A[External System] -->|Audio Data| B[WebSocket Endpoint]
    B -->|Adapter| C[Realtime SFU]
    C -->|New Session| D[WebRTC Track]
    D -->|WebRTC| E[WebRTC Clients]

Případy použití:

  • Streamování generování řeči z textu pomocí AI do WebRTC
  • Zvuk z backendových služeb nebo databází
  • Živé zvukové vstupy z externích systémů

Klíčové vlastnosti:

  • Automaticky vytvoří nové ID relace
  • Používá buffer režim pro přenos zvuku po částech
  • Maximálně 32 KB na zprávu WebSocket

Streamujte zvuk a video WebRTC do externích systémů

Streamujte zvuk a video z existujících stop WebRTC do externích systémů prostřednictvím WebSocket za účelem zpracování nebo uložení.

graph LR
    A[WebRTC Source] -->|WebRTC| B[Realtime SFU Session]
    B -->|Adapter| C[WebSocket Endpoint]
    C -->|Media Data| D[External System]

Případy použití:

  • Přepis řeči na text v reálném čase
  • Nahrávání a archivace zvuku
  • Kanály pro živé zpracování zvuku
  • Pořizování snímků z videa a miniatury
  • Příjem dat pro počítačové vidění (nízké FPS)

Klíčové vlastnosti:

  • Vyžaduje ID existující relace s trackem
  • Zvuk: Odesílá jednotlivé snímky PCM tak, jak vznikají, každý obsahuje časové razítko a pořadové číslo
  • Video: odesílá jednotlivé snímky JPEG přibližně s frekvencí 1 FPS; každý obsahuje časové razítko (pořadové číslo nemusí být nastaveno)
  • Po krátkých výpadcích spojení nebo restartu koncového bodu automaticky opakuje pokusy o připojení ke stejnému koncovému bodu WebSocket až po dobu 5 sekund. Více informací najdete v Automatické opětovné připojení pro streamování.

Referenční dokumentace API

Vytvoření adaptéru

POST /v1/apps/{appId}/adapters/websocket/new

Tělo požadavku

{
  "tracks": [
    {
      "location": "local",
      "trackName": "string",
      "endpoint": "wss://...",
      "inputCodec": "pcm",
      "mode": "buffer"
    }
  ]
}

Parametry

Parametr Typ Popis
location string Povinné. Musí být "local" pro příjem zvuku
trackName string Povinné. Název nového WebRTC tracku, který chcete vytvořit
endpoint string Povinné. URL WebSocket, ze které přijímat zvuk
inputCodec string Povinné. Kodek příchozího zvuku. Aktuálně pouze "pcm"
mode string Povinné. Musí být "buffer" pro lokální režim

Odpověď

{
  "tracks": [
    {
      "trackName": "string",
      "adapterId": "string",
      "sessionId": "string",    // New session ID generated
      "endpoint": "string"      // Echo of the requested endpoint
    }
  ]
}

Tělo požadavku

{
  "tracks": [
    {
      "location": "remote",
      "sessionId": "string",
      "trackName": "string",
      "endpoint": "wss://...",
      "outputCodec": "pcm"
    }
  ]
}

Parametry

Parametr Typ Popis
location string Povinné. Musí být "remote" pro odchozí streamování médií
sessionId string Povinné. Stávající ID relace obsahující stopu
trackName string Povinné. Název existujícího tracku, který chcete streamovat
endpoint string Povinné. URL WebSocket, na kterou odesílat média
outputCodec string Povinné. Kodek pro odchozí média. Použijte "pcm" pro zvuk, "jpeg" pro video (pouze odchozí přenos)

Odpověď

{
  "tracks": [
    {
      "trackName": "string",
      "adapterId": "string",
      "sessionId": "string",    // Same as request sessionId
      "endpoint": "string"      // Echo of the requested endpoint
    }
  ]
}

Zavření adaptéru

POST /v1/apps/{appId}/adapters/websocket/close

Tělo požadavku

{
	"tracks": [
		{
			"adapterId": "string"
		}
	]
}

Formáty médií

WebRTC tracky

Binární formát WebSocket

Média využívají Protocol Buffers. Audio používá PCM payloady, video používá JPEG payloady:

message Packet {
    uint32 sequenceNumber = 1;  // Used in Stream mode only
    uint32 timestamp = 2;       // Used in Stream mode only
    bytes payload = 5;          // Media data
}

Režim příjmu (buffer): Pouze payload pole se používá a obsahuje části zvukových dat.

Režim streamování (egress):

Video (JPEG)

Protokol připojení

Připojuje se k vašemu koncovému bodu WebSocket:

  1. Handshake při upgradu WebSocket
  2. Zabezpečené připojení pro wss:// URL adresy
  3. Streamování médií začíná

Formát zprávy

Režim bufferu (ingest)

Režim streamování (egress)

Životní cyklus připojení

  1. Připojuje se ke koncovému bodu WebSocket
  2. Streamování zvuku začíná
  3. Streamování videa začíná (pokud je nakonfigurováno)
  4. Při streamování z WebRTC do WebSocket krátce opakuje pokusy o připojení ke stejnému koncovému bodu po odpojení
  5. Připojení se uzavře po ukončení, při chybě nebo po vyčerpání okna pro automatické opětovné připojení

Automatické opětovné připojení pro streamování

Když použijete WebSocket adaptér v Režim streamování (egress) a odeslat tak živé audio nebo video z SFU do vlastního WebSocket endpointu (WebRTC → WebSocket), SFU se automaticky znovu připojí po krátkém odpojení nebo restartu koncového bodu.

SFU opakuje pokusy o připojení ke stejnému koncovému bodu WebSocket až po dobu 5 sekund. Žádné změny API nejsou nutné. Pokud koncový bod zůstane po uplynutí okna pro opětovné připojení nedostupný, adaptér se uzavře a vaše aplikace musí pro obnovení streamování vytvořit nový adaptér.

Ukládání médií do vyrovnávací paměti při opětovném připojení

Automatické opětovné připojení používá vyrovnávací paměť s prioritou živého přenosu po dobu, kdy je koncový bod WebSocket dočasně nedostupný:

Automatické opětovné připojení se použije pouze při použití Režim streamování (egress). Opakuje pokus pouze na stejném koncovém bodu a neposkytuje přepnutí na jiné koncové body.

Ceny

Aktuálně je ve fázi beta a používání je zdarma.

Po dosažení obecné dostupnosti se bude fakturace řídit standardním ceníkem Cloudflare Realtime ve výši $0.05 za GB odchozích dat. Poplatky se účtují pouze za provoz směřující z Cloudflare k WebSocket koncovým bodům. Provoz přijímaný z WebSocket koncových bodů do Cloudflare se neúčtuje.

Využití se počítá do vaší bezplatné úrovně Cloudflare Realtime v objemu 1,000 GB.

Osvědčené postupy

Správa připojení

Výkon

Security

Omezení

Zpracování chyb

Kód chyby Popis
400 Neplatné parametry požadavku
404 Relace nebo stopa nebyla nalezena
503 Adaptér nebyl nalezen (pro operace zavření)

Referenční implementace

Migrace z vlastních bridgí

  1. Nahraďte vlastní signalizaci voláními adaptérového API
  2. Aktualizace endpointů WebSocket pro zpracování formátu PCM
  3. Implementujte správu životního cyklu adaptéru
  4. Odebrání vlastní konfigurace STUN/TURN

Časté dotazy

Otázka: Lze stejný adaptér použít pro obousměrný zvuk? Odpověď: Ne, každá instance je jednosměrná. Pro odesílání a příjem vytvořte samostatné adaptéry.

Otázka: Co se stane, když spojení WebSocket vypadne?

Odpověď: Při použití Režim streamování (egress), SFU automaticky opakuje pokus na stejném koncovém bodu WebSocket až po dobu 5 sekund. Pokud se koncový bod v tomto intervalu obnoví, streamování automaticky pokračuje.

Zvuk využívá krátkou omezenou frontu, která snižuje slyšitelné výpadky při krátkých přerušeních. Video pokračuje od posledního dostupného snímku JPEG, místo aby přehrávalo starší snímky.

Pokud koncový bod zůstane nedostupný i po 5sekundovém okno automatického opětovného připojení, adaptér se uzavře a je nutné jej znovu vytvořit.

Při příjmu dat z WebSocket do WebRTC by se měl váš WebSocket klient podle potřeby znovu připojit a znovu vytvořit adaptér.

Otázka: Existuje limit na počet současně běžících adaptérů? Odpověď: Limity odpovídají standardním kvótám Cloudflare Realtime. V případě specifických požadavků kontaktujte podporu.

Otázka: Lze po vytvoření adaptéru změnit formát zvuku? Odpověď: Ne, formát zvuku je pevně daný v okamžiku vytvoření. Pro jiné formáty vytvořte nový adaptér.