Articles

7 sposoby przesyłania strumieniowego RTSP na stronie

w tym artykule demonstrujemy 7 technologicznie różne sposoby wyświetlania strumienia wideo z kamery IP z obsługą RTSP na stronie internetowej w przeglądarce.

z reguły przeglądarki nie obsługują RTSP, więc strumień wideo jest konwertowany na przeglądarkę za pomocą serwera pośredniego.

Metoda 1-RTMP

przeglądarki nie obsługują protokołu RTMP, ale zgadnij, kto to robi? Stary wierny Odtwarzacz Flash, który działa wystarczająco dobrze, mimo że nie obsługuje wszystkich przeglądarek, więc może wyświetlać strumień wideo.

Flash player

kod odtwarzacza jest zbudowany na Action Script 3 i wygląda następująco:

var nc:NetConnection = nc.connect("rtmp://192.168.88.59/live",obj);var subscribeStream:NetStream = new NetStream(nc);subscribeStream.play("rtsp://192.168.88.5/live.sdp");

w tym przykładzie:

rtmp://192.168.88.59/live – jest adresem serwera pośredniego, który pobiera dane z programu.strumień wideo RTSP z kamery i konwertuje go do rtmp.

rtsp: / / 192.168.88.5 / live.sdp-to adres RTSP kamery.

nieco zbędny wariant odtwarzacza na Flex i AS3 jest dostępny tutaj.

ta metoda wygląda następująco:

Flash streaming

Metoda 2 – RTMP zawinięte do HTML5

trudno jest znaleźć tych, którzy chcą zachować kodowanie Na Action Script 3 te dni. Tak więc, istnieje metoda z zawijaniem HTML, który pozwala na sterowanie odtwarzaczem RTMP z JavaScript. W tym wariancie flash jest ładowany do strony HTML tylko w celu wyświetlenia obrazu i odtworzenia dźwięku.

RTMP-player JavaScript

var session = Flashphoner.createSession({urlServer:"wss://192.168.88.59:8443"});session.createStream({name:"rtsp://192.168.88.5/live.sdp", display:myVideo}).play();

Pełny kod źródłowy odtwarzacza znajduje się tutaj. Metoda wygląda następująco:

WCS url stream volume

Metoda 3 – RTMFP

protokół RTMFP działa również wewnątrz Flash Playera. Różnica od RTMP jest to, że RTMFP działa na szczycie UDP, więc jest znacznie bardziej odpowiedni dla niskiej latencji nadawania.

kod AS3 odtwarzacza jest identyczny z RTMP z wyjątkiem jednej litery F dodanej w wierszu kodu, w którym nawiązane jest połączenie z serwerem.

var nc:NetConnection = nc.connect("rtmfp://192.168.88.59/live",obj);var subscribeStream:NetStream = new NetStream(nc);subscribeStream.play("rtsp://192.168.88.5/live.sdp");

niemniej jednak, oto zrzut ekranu za pomocą RTMFP

zrzut ekranu z RTMFP

metoda 4 – RTMFP owinięty do HTML5

ten sposób jest identyczny z metodą 2 z tym wyjątkiem, że podczas inicjalizacji ustawiamy protokół RTMFP dla podstawowy flash (obiekt SWF).

Var session = Flashphoner.createSession({urlServer:"wss://192.168.88.59:8443", flashProto:"rtmfp"});session.createStream({name:"rtsp://192.168.88.5/live.sdp", display:myVideo}).play();

Obraz odtwarzacza:

RTMFP HTML5 - odtwarzacz

metoda 5 – WebRTC

w tym przypadku w ogóle nie używamy flasha, a strumień wideo jest odtwarzany za pomocą samej przeglądarki, bez użycia wtyczek innych firm. Ta metoda działa zarówno w przeglądarkach Chrome, jak i Firefox Android, w których Flash nie jest dostępny. Wyniki WebRTC w najniższym opóźnieniu, mniej niż 0,5 sekundy.

WebRTC Android Chrome i Android Firefox

kod źródłowy odtwarzacza jest taki sam:

var session = Flashphoner.createSession({urlServer:"wss://192.168.88.59:8443"});session.createStream({name:"rtsp://192.168.88.5/live.sdp", display:myVideo}).play();

skrypt automatycznie wykrywa obsługę WebRTC, a jeśli TI jest obsługiwana, strumień jest odtwarzany za pomocą WebRTC.

odtwarzanie WebRTC

metoda 6 – Websockets

WebRTC i Flash nie obejmują wszystkich przeglądarek i platform. Na przykład przeglądarka Safari iOS ich nie obsługuje.

Websockets - WebRTC i Flash

możesz dostarczyć strumień wideo do iOS Safari za pomocą transportu Websocket (połączenie TCP między przeglądarką a serwerem). Następnie strumień wideo RTSP jest kierowany przez Websockety. Po otrzymaniu danych binarnych można je dekodować za pomocą JavaScript i renderować na elemencie Canvas HTML5.

To jest to, co Websocket player robi w przeglądarce iOS Safari. Kod odtwarzacza wygląda tak samo:

var session = Flashphoner.createSession({urlServer:"wss://192.168.88.59:8443"});session.createStream({name:"rtsp://192.168.88.5/live.sdp", display:myVideo}).play();

jest to nieco podobne do metod opartych na Flashu, gdy element swf leży pod HTML5. Mamy tutaj aplikację JavaScript pod HTML5, która pobiera dane za pośrednictwem Websocketów, dekoduje je i renderuje na płótnie w wielu wątkach.

oto jak wygląda Strumień RTSP renderowany na płótnie w przeglądarce iOS Safari:

RTSP Canvas w przeglądarce iOS Safari

metoda 7 – HLS

gdy RTSP jest konwertowany do HLS, strumień wideo jest podzielony na segmenty, które są szczęśliwie pobrane z serwera i wyświetlane w odtwarzaczu HLS.

Konwertuj RTSP na HLS

jako odtwarzacz HLS używamy wideo.js. Kod źródłowy odtwarzacza można pobrać tutaj.

gracz wygląda następująco:

HLS-player stream

metoda 8 – Aplikacja na Androida, WebRTC

aplikacja pobiera strumień z serwera za pośrednictwem WebRTC. Celem serwera jest konwersja RTSP na WebRTC i przekazanie wyniku do aplikacji mobilnej.

Konwertuj RTSP na WebRTC

kod Java odtwarzacza dla Androida jest tutaj i wygląda tak:

SessionOptions sessionOptions = new SessionOptions("wss://192.168.88.59:8443");Session session = Flashphoner.createSession(sessionOptions);StreamOptions streamOptions = new StreamOptions("rtsp://192.168.88.5/live.sdp");Stream playStream = session.createStream(streamOptions);playStream.play();

testową aplikację mobilną odtwarzacza można zainstalować z Google Play, a Źródła aplikacji można pobrać stąd.

oto jak wygląda odtwarzanie strumienia RTSP za pośrednictwem WebRTC na tablecie z Androidem Asus:

odtwarzanie strumienia RTSP za pośrednictwem WebRTC

metoda 9 – aplikacja iOS, WebRTC

podobnie jak jego bracia Android, aplikacja iOS pobiera strumień wideo z serwera za pośrednictwem WebRTC.

aplikacja na iOS WebRTC

Kod Objective-C odtwarzacza wygląda tak, jak pokazano poniżej:

FPWCSApi2SessionOptions *options = init];options.urlServer = @"wss://192.168.88.59:8443";FPWCSApi2Session *session = ;FPWCSApi2StreamOptions *options = init];options.name = @"rtsp://192.168.88.5/live.sdp";FPWCSApi2Stream *stream = ;stream play:&error;

możesz pobrać kod źródłowy odtwarzacza na iOS tutaj.

i możesz zainstalować aplikację testową, która korzysta z powyższych fragmentów kodu z App Store. Działanie odtwarzacza ze strumieniem RTSP wygląda następująco:

App Store aplikacja testowa

wyniki

Załóżmy wyniki Razem w tabeli podsumowującej:

Display method Best for Latency
1 RTMP Legacy Flash, Flex or Adobe Air applications medium
2 RTMP + HTML5 IE, Edge, Mac Safari browsers if Flash Player is installed medium
3 RTMFP Legacy Flash, Flex or Adobe Air applications that require low latency low
4 RTMFP + HTML5 IE, Edge, Mac Safari browsers Jeśli Flash Player jest zainstalowany i gdy małe opóźnienie jest kluczowe low
5 WebRTC przeglądarki Chrome, Firefox, Opera na urządzeniach mobilnych i komputerach stacjonarnych na Androidzie oraz gdy odtwarzanie w czasie rzeczywistym jest kluczowe. real-time
6 Websocket przeglądarki, które nie obsługują Flash i WebRTC, ale zadanie wymaga małego do średniego opóźnienia. medium
7 HLS każda przeglądarka, o ile opóźnienie nie jest ważne. high
8 aplikacja na Androida, WebRTC natywne aplikacje mobilne dla Androida, które wymagają opóźnienia w czasie rzeczywistym. real-time
9 aplikacja iOS, WebRTC natywne aplikacje mobilne dla iOS, które wymagają opóźnienia w czasie rzeczywistym. real-time

do testowania metod użyliśmy Web Call Server 5, który jest w stanie konwertować Strumień RTSP i przesyłać go do wszystkich dziewięciu wyżej opisanych kierunków.

Web Call Server 5 – serwer do nadawania strumienia RTSP.

Flash Streaming-przykładowa aplikacja swf odtwarzająca strumienie za pomocą RTMP i RTMFP. Odpowiada metodom 1 i 3.
Source – kod źródłowy aplikacji swf na Flex / AS3.

Player-przykładowa aplikacja internetowa, która odtwarza Strumień RTSP poprzez RTMP, RTMFP, WebRTC, Websocket. Metody 2,4,5,6.
Source – kod źródłowy odtwarzacza internetowego .

HLS player-przykładowy Odtwarzacz internetowy grający w HLS. Odpowiada metodzie 7.
Source – kod źródłowy odtwarzacza HLS .