Matryca funkcji sgcWebRTC — Audio, wideo, kanały danych | eSeGeCe

sgcWebRTC Matryca funkcji

Wszystko, co sgcWebRTC dodaje do TsgcRTCPeerConnection, pogrupowane według możliwości. Sygnalizacja i łączność pochodzą z komponentu bazowego w sgcWebSockets Enterprise; ten pakiet odblokowuje na nim silnik mediów — audio, wideo, przechwytywanie ekranu, kanały danych, szyfrowanie i szacowanie przepustowości. Każda funkcja działa tak samo w Delphi i C++ Builder, a każda licencja zawiera pełny kod źródłowy.

Sygnalizacja

Baza Enterprise i SDP

Audio

Opus / G.711

Wideo

VP8 / H.264 / MJPEG

Kanały danych

RFC 8831 / 8832

Udostępnianie ekranu

Przechwytywanie i renderowanie

SRTP / DTLS

Szyfrowane media

Szacowanie przepustowości

Kontrola przeciążenia

Co dostarcza Enterprise, co dodaje sgcWebRTC

Bazowa łączność jest już w sgcWebSockets. sgcWebRTC odblokowuje na tym samym komponencie powierzchnię SDP, kanałów danych i mediów.

MożliwośćDostępne wUwagi
Klient STUN (TsgcSTUNClient)sgcWebSockets StandardWykrywanie kandydatów server-reflexive, dostępne poniżej Enterprise.
Klient i serwer TURN, klient ICE (TsgcTURNClient, TsgcICEClient)sgcWebSockets EnterpriseKandydaci przekazywani przez TURN oraz pełne zbieranie / nominacja kandydatów ICE.
Bazowy TsgcRTCPeerConnection, dawna sygnalizacja przez przekaźnik WebSocketsgcWebSockets EnterpriseGatherCandidates, WriteData oraz zdarzenia OnRTCWebSocket… / OnRTCCandidatePairNominated / OnRTCConnect sterują łącznością ICE i transportem DTLS przez wbudowany serwer protokołu RTCPeerConnection, bez SDP, kanałów danych ani mediów.
Ręczna sygnalizacja oferta/odpowiedź SDPsgcWebRTCCreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription, AddIceCandidate, RestartIce — maszyna stanów JSEP (RFC 8829), której oczekuje przeglądarka.
Renegocjacja i rozwiązywanie konfliktów (glare)sgcWebRTCPonowne oferty po AddTrack / RemoveTrack, OnNegotiationNeeded, wycofanie (rollback) oraz reguła W3C perfect-negotiation przez Polite.
Trickle ICEsgcWebRTCTrickleICE i RTCOptions.TrickleICEAuto przesyłają kandydatów strumieniowo w miarę ich znajdowania, zamiast czekać na pełny limit czasu zbierania.
Stan połączenia i sygnalizacjisgcWebRTCConnectionState (podzbiór W3C RTCPeerConnectionState) i SignalingState (podzbiór RTCSignalingState), a do tego OnConnectionStateChange i OnError.
Kanały danych SCTP, audio/wideo RTP, szyfrowanie SRTPsgcWebRTCZobacz sekcje poniżej — wszystkie trzy wymagają tego pakietu ponad bazą Enterprise.

Ścieżki audio Opus i G.711

Jedno wywołanie AddTrack dołącza ścieżkę audio do połączenia peer; PCM wchodzi, RTP wychodzi, a ta sama ścieżka działa w odwrotnym kierunku dla ścieżki zdalnej.

MożliwośćSkładnikUwagi
Dołączenie ścieżki audioAddTrack(rtctkAudio, aCodec)Zwraca TsgcRTCTrack; RemoveTrack zatrzymuje jej wysyłanie.
Kodek OpuscctAudioOpus48 kHz / stereo przez dynamicznie ładowane wiązanie z libopus.
Kodek G.711cctAudioPCMU / cctAudioPCMA8 kHz / mono μ-law i A-law, zawsze dostępny, bez biblioteki zewnętrznej.
Wysyłanie przechwyconego audioTsgcRTCTrack.SendPCM(aPCM, aSamplesPerChannel)16-bitowe znakowane przeplatane PCM przy częstotliwości próbkowania i liczbie kanałów kodera.
Odbiór zdekodowanego audioOnAudio(aPCM, aSampleRate, aChannels, aSamplesPerChannel)Uruchamiane na ścieżce zdalnej w miarę napływania i dekodowania RTP.
Dostęp do kodera / dekoderaAudioEncoder / AudioDecoderBazowy obiekt TsgcAudioEncoderBase / TsgcAudioDecoderBase, wymienny dla każdej ścieżki.
Cykl życia ścieżkiEnabled, Ended, OnEndedEnabled := False wycisza bez renegocjacji; Ended odzwierciedla ścieżkę porzuconą przez stronę zdalną lub ponowną ofertę.
Przechwytywanie mikrofonuPotomkowie TsgcMediaCaptureSourceNatywne przechwytywanie per platforma (waveIn na Windows, a do tego backendy Linux, Apple i Android) zasila bezpośrednio SendPCM.

Ścieżki wideo VP8, H.264 i Motion JPEG

Wideo działa w tym samym schemacie co audio — klatki wchodzą, RTP wychodzi — z kodekiem wybieranym dla każdej ścieżki, a dla H.264 z natywnym sprzętowym koderem platformy pod spodem.

MożliwośćSkładnikUwagi
Dołączenie ścieżki wideoAddTrack(rtctkVideo, aCodec)To samo wywołanie co dla audio, z wideo TsgcCodecType.
Kodek VP8cctVideoVP8Wiązanie z libvpx, ładowane dynamicznie, dostępne na Windows i Linux.
Kodek H.264cctVideoH264Natywny sprzętowy koder per platforma: Media Foundation (Windows), VideoToolbox (iOS/macOS), MediaCodec (Android). Strumień Annex-B, ładunek RFC 6184, SPS/PPS przenoszone w paśmie przy każdej klatce kluczowej.
Kodek Motion JPEGcctVideoJPEGOparty na GDI+, Windows i Delphi XE lub nowszy.
Wysłanie surowej klatkiTsgcRTCTrack.SendVideoFrame(aFrame, aForceKeyFrame)Koduje i wysyła TsgcVideoFrame (rodzina I420/NV12/RGB/BGR).
Wysłanie wstępnie zakodowanej klatkiSendEncodedFrame(aData, aIsKeyFrame)Omija własny koder ścieżki dla klatki zakodowanej zewnętrznie.
Odbiór klatek zdekodowanych / surowychOnVideoFrame / OnEncodedFrameZdekodowany TsgcVideoFrame albo surowy zakodowany strumień bitów z flagą klatki kluczowej.
Żądanie klatki kluczowejRequestKeyFrameWysyła RTCP PLI do zdalnego nadawcy.
Dostęp do kodera / dekoderaVideoEncoder / VideoDecoderBazowy obiekt TsgcVideoEncoderBase / TsgcVideoDecoderBase.
Przechwytywanie z kameryPotomkowie TsgcMediaCaptureSourceBackendy przechwytywania per platforma (Windows, Linux, Apple, Android) zasilają bezpośrednio SendVideoFrame.
RenderowaniePotomkowie TsgcMediaRendererBackendy renderowania per platforma (Windows, Linux, Apple, Android) dla zdekodowanego wideo zdalnego.

Kanały danych SCTP (RFC 8831 / 8832)

Uporządkowane lub nie, w pełni niezawodne albo ograniczone liczbą retransmisji lub czasem życia, przez SCTP-over-DTLS.

MożliwośćSkładnikUwagi
Otwarcie kanałuCreateDataChannel(aLabel, aOrdered, aMaxRetransmits, aMaxPacketLifeTime, aProtocol)Zwraca TsgcRTCDataChannel; wymusza RTCOptions.DTLS.
Kanał otwarty zdalnieOnDataChannel(aChannel)Uruchamiane, gdy peer otwiera kanał na tym połączeniu.
Wysyłanie tekstu / danych binarnychSend(aText) / SendBytes(aBytes)Zwraca False, jeśli kanał nie jest jeszcze otwarty.
OdbiórOnMessage(aText) / OnMessageBinary(aBytes)Uruchamiane w wątku obsługującym SCTP.
Zdarzenia cyklu życiaOnOpen, OnClose, OnError(aError)Zgodne z cyklem życia W3C RTCDataChannel.
Stan kanałuState, HasId, IdIdentyfikator strumienia SCTP jest ostateczny dopiero po rozstrzygnięciu roli DTLS (parzystość z RFC 8832).
Kontrola przepływuBufferedAmount, MaxMessageSizeMaxMessageSize śledzi własne a=max-message-size peera i odrzuca lokalnie zbyt duże wysłanie.
Introspekcja niezawodnościReliability, ReliabilityParam, Ordered, MaxRetransmits, MaxPacketLifeTimeOdczytaj dokładnie to, co wynegocjował kanał.
ZamknięcieCloseZamknięcie oparte na RE-CONFIG; State przechodzi w closing, a następnie closed z OnClose.
Poziom połączenia peerDataChannelCount, DataChannels[i]Wylicz każdy otwarty kanał na połączeniu.

Przechwytywanie pulpitu, monitora, okna i regionu

Źródło przechwytywania zasila tę samą ścieżkę SendVideoFrame co kamera — treść ekranu jest po prostu kolejną ścieżką wideo.

MożliwośćSkładnikUwagi
Backend przechwytywaniaTsgcScreenCapture_WinPrzechwytywanie pulpitu, monitora, okna i regionu oparte na GDI. Obecnie tylko Windows.
Wyliczanie monitorówGetMonitors / MonitorIndexJedna linia na monitor (rozdzielczość, pozycja, flaga główny); -1 przechwytuje cały wirtualny pulpit.
Przechwytywanie regionuRegionProstokąt we współrzędnych ekranu; pusty prostokąt wyłącza tryb regionu.
Okna warstwowe / przezroczysteCaptureLayeredUżywa CAPTUREBLT, dzięki czemu okna warstwowe i przezroczyste są uwzględniane.
KursorIncludeCursorRysuje kursor myszy w przechwyconej klatce.
Zmniejszanie skaliMaxWidth0 wyłącza zmniejszanie; w przeciwnym razie szersze klatki są skalowane w dół przed kodowaniem.
Liczba klatek na sekundęFrameRate źródła przechwytywaniaDomyślnie 5 fps, do 30 fps dla treści ekranu.
Kodowanie i wysyłanieTsgcRTCTrack.SendVideoFramePrzechwycone klatki BGRA32 zasilają koder wideo ścieżki tak jak każde inne źródło.

Obowiązkowe szyfrowanie mediów

Każdy pakiet RTP, RTCP i SCTP na połączeniu jest szyfrowany od handshake'u DTLS — nie ma trybu jawnego tekstu.

MożliwośćSzczegóły
Wymiana kluczyHandshake DTLS na wynegocjowanej parze kandydatów ICE (RFC 5764 DTLS-SRTP), wyprowadzający materiał kluczowy SRTP.
Rola DTLSW sygnalizacji ręcznej rola pochodzi z a=setup (oferujący pasywny, odpowiadający aktywny); IsDTLSClient zgłasza ją po rozstrzygnięciu.
Profile ochrony SRTPSRTP_AES128_CM_SHA1_80, SRTP_AES128_CM_SHA1_32, SRTP_AEAD_AES_128_GCM, SRTP_AEAD_AES_256_GCM, negocjowane podczas handshake'u DTLS.
Stan kryptograficzny per SSRCJeden kontekst kryptograficzny (licznik rollover, okno odtwarzania) na SSRC, zgodnie z wymogiem RFC 3711 sekcja 3.2.3, nawet gdy BUNDLE umieszcza każdą linię m na jednym transporcie DTLS-SRTP.
ZakresObejmuje media RTP/RTCP oraz asocjację SCTP przenoszącą kanały danych — całe połączenie, nie tylko jedną linię m.
BackendImplementacja SRTP oparta na OpenSSL.

Kontrola przeciążenia i odporność na straty

Estymator oparty na opóźnieniach, w stylu Google Congestion Control, śledzi łącze i steruje docelowym bitrate kodera wideo.

MożliwośćSkładnikUwagi
Estymator oparty na opóźnieniachTsgcBWE_EstimatorGrupuje pakiety w 5 ms serie wysyłkowe, uruchamia filtr linii trendu na opóźnieniu między grupami i klasyfikuje łącze jako normalne, przeciążone lub niedociążone.
Kontrola szybkościKontroler AIMDPrzeciążenie zmniejsza do 85% potwierdzonej szybkości, niedociążenie utrzymuje, stan normalny zwiększa (multiplikatywnie z dala od ostatniego znanego sufitu, addytywnie blisko niego).
Sufit stratŚledzenie współczynnika stratPowyżej 10% strat sufit spada; poniżej 2% odzyskuje 8% na sekundę aż do MaxBitrate.
Informacja zwrotna transport-wideTWCC (RTCP)BuildRTCP_TWCC / ParseRTCP_TWCC, informacja zwrotna o przeciążeniu na poziomie całego transportu, z REMB jako sufitem zapasowym dla peerów, które obsługują tylko to.
WłączenieRTCOptions.Media.CongestionControlDziała tylko wtedy, gdy zdalny opis negocjuje też odpowiednie rozszerzenie nagłówka / informację zwrotną.
Odzyskiwanie po stratachRTCOptions.Media.RTXRetransmisja strumienia wideo z RFC 4588 na RTCP NACK.
Korekcja błędów w przódRTCOptions.Media.FECOchrona RED / ULPFEC na wychodzącym strumieniu wideo.
PacingRTCOptions.Media.PacingRozkłada w czasie wychodzące pakiety wideo według szacowanego bitrate, zamiast wysyłać je seriami.
Odzyskiwanie klatki kluczowejRTCP PLIRequestKeyFrame na odbierającej ścieżce prosi nadawcę o świeżą klatkę kluczową po stracie.
Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Twórz z sgcWebRTC

Pobierz bezpłatną wersję próbną i otwórz prawdziwe połączenie peer z Delphi lub C++ Builder.