Articles

7 sätt att strömma RTSP på sidan

i den här artikeln visar vi 7 tekniskt olika sätt att visa en videoström från en IP-kamera med RTSP-stöd på en webbsida i en webbläsare.

som regel stöder webbläsare inte RTSP, så videoströmmen konverteras för en webbläsare med en mellanliggande server.

Metod 1-RTMP

webbläsare stöder inte RTMP-protokollet, men gissa vem som gör det? Den gamla trofasta flashspelaren som fungerar tillräckligt bra trots att den inte stöder alla webbläsare, så den kan visa videoströmmen.

Flash player

spelarens kod är byggd på Action Script 3 och ser ut som följer:

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");

i det här exemplet:

rtmp://192.168.88.59/live – är adressen till den mellanliggande servern som hämtar RTSP videoström från kameran och konverterar den till rtmp.

rtsp://192.168.88.5 / leva.sdp – är RTSP-adressen till kameran.

en lite överflödig variant av spelaren på Flex och AS3 finns här.

denna metod ser ut som följer:

Flash streaming

Metod 2 – RTMP insvept till HTML5

det är svårt att hitta de som är villiga att fortsätta koda på Action Script 3 dessa dagar. Så det finns en metod med en HTML-omslag som gör det möjligt att styra RTMP-spelaren från JavaScript. I denna variant laddas blixten till HTML-sidan bara för att visa bild och spela upp ljud.

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();

spelarens fullständiga källkod är här. Och metoden ser ut så här:

WCS url stream volume

Metod 3 – RTMFP

RTMFP-protokollet fungerar också inuti flashspelaren. Skillnaden från RTMP är att RTMFP fungerar ovanpå UDP, så det är mycket mer lämpligt för sändning med låg latens.

spelarens AS3-kod är identisk med RTMP, förutom en bokstav F som läggs till i kodraden där anslutningen till servern är etablerad.

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");

ändå är här en skärmdump med RTMFP

skärmdump med RTMFP

Metod 4 – RTMFP lindad till HTML5

detta sätt är identiskt med Metod 2 förutom att vi under initialiseringen ställer in RTMFP-protokollet för den underliggande blixten (SWF-objekt).

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();

spelarbild:

RTMFP HTML5 - spelare

Metod 5 – WebRTC

i det här fallet använder vi inte Flash alls, och videoströmmen spelas med hjälp av webbläsaren själv utan att använda plugins från tredje part. Denna metod fungerar både i Chrome och Firefox Android-webbläsare, där Flash inte är tillgängligt. WebRTC resulterar i den lägsta latensen, mindre än 0,5 sekunder.

WebRTC Android Chrome och Android Firefox

spelarens källkod är densamma:

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

skriptet upptäcker automatiskt WebRTC-stöd, och om ti stöds spelas strömmen med WebRTC.

spela WebRTC

Metod 6 – Websockets

WebRTC och Flash täcker inte alla webbläsare och plattformar. Till exempel stöder iOS Safari-webbläsaren dem inte.

Websockets - WebRTC och Flash

Du kan leverera en videoström till iOS Safari med Websocket transport (en TCP-anslutning mellan webbläsaren och servern). Därefter kanaliseras RTSP-videoströmmen via Websockets. När binärdata har mottagits kan de avkodas med JavaScript och återges på Canvas HTML5-element.

detta är vad Websocket player gör i iOS Safari-webbläsaren. Spelarens kod ser densamma ut:

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

detta liknar något de flashbaserade metoderna när swf-elementet ligger under HTML5. Här har vi en JavaScript-applikation under HTML5 som hämtar data via Websockets, avkodar dem och gör dem på duk i flera trådar.

Så här ser en RTSP-ström som återges på Canvas i iOS Safari-webbläsaren ut:

RTSP Canvas i iOS Safari

metod 7 – HLS

När RTSP konverteras till HLS delas en videoström till segment som lyckligtvis laddas ner från servern och visas i HLS-spelaren.

konvertera RTSP till HLS

som en HLS-spelare använder vi video.js. Spelarens källkod kan laddas ner här.

spelaren ser ut som följer:

HLS-player stream

metod 8 – Android-applikation, WebRTC

programmet hämtar strömmen från servern via WebRTC. Till målet för servern här är att konvertera RTSP till WebRTC och mata resultatet till mobilapplikationen.

konvertera RTSP till WebRTC

Java-koden för spelaren för Android är här och ser ut så här:

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();

en testmobilapp för spelaren kan installeras från Google Play, och källorna till applikationen kan laddas ner härifrån.

Så här ser RTSP-strömuppspelning via WebRTC ut på Asus Android tablet:

spela RTSP – ström via WebRTC

metod 9-iOS-applikation, WebRTC

precis som sina Android-bröder hämtar iOS-applikationen en videoström från servern via WebRTC.

iOS app WebRTC

spelarens mål-C-kod ser ut som visas nedan:

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;

Du kan ladda ner spelarens källkod för iOS här.

och du kan installera testprogrammet som använder ovanstående kodbitar från App Store. Spelarens funktion med RTSP-strömmen ser ut som följer:

App Store test app

resultat

låt oss sätta ihop resultaten i en sammanfattande tabell:

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 om Flash Player är installerad och när låg latens är avgörande låg
5 WebRTC Chrome, Firefox, Opera webbläsare på mobila enheter och stationära datorer på Android och när realtid uppspelning är avgörande. realtid
6 Websocket webbläsare som saknar stöd för Flash och WebRTC, men uppgiften kräver låg till medium latens. medium
7 HLS Varje webbläsare så länge latens inte är viktigt. hög
8 Android app, WebRTC Native mobila applikationer för Android som kräver realtid latens. realtid
9 iOS app, WebRTC Native mobila applikationer för iOS som kräver realtid latens. realtid

för att testa de metoder vi använde Web Call Server 5 som kan konvertera en RTSP-ström och överföra den till alla nio ovan beskrivna riktningar.

Web Call Server 5 – en server för att sända en RTSP-ström.

Flash Streaming – ett exempel swf program spelar strömmar via RTMP och RTMFP. Motsvarar metoderna 1 och 3.
Source-källkoden för swf-applikationen på Flex / AS3.

Player – ett exempel webbapplikation som spelar en RTSP-ström via RTMP, RTMFP, WebRTC, Websocket. Metoder 2,4,5,6.
Källa-källkoden för webbspelaren.

HLS player – ett exempel webbspelare som spelar HLS. Motsvarar metod 7.
Källa-källkoden för HLS-spelaren.