2Embed a live RTSP stream in a webpage

I have recently been work­ing on my smarthome setup and one of the things I’ve been mean­ing to get set up is a tab­let with a touch-screen web inter­face to man­age my smart home. One of the first prob­lems I had to crack was how to stream my cctv feed to a web browser…

The problem

My CCTV cam­era, like many, only provides an RTSP stream. No mod­ern web browsers sup­port RTSP.

The search and requirements

Google just isn’t what it used to be and it took sev­er­al days of search­ing to find an accept­able solu­tion that met all of my requirements…

  • I wanted some­thing that would work entirely off­line without any third party serv­ers involved.
  • I wanted some­thing that was com­pletely leg­ally free, ideally open source
  • I wanted some­thing that would­n’t transcode the video or audio as this would waste pro­cessing resources

The solution

I found a really use­ful guide which explained a way to do this with a bit of JavaS­cript and ffm­peg, both of which were read­ily avail­able for free.

To run ffm­peg I used the fol­low­ing com­mand, which I ran on win­dows as a ser­vice, cre­ated with nssm…
ffmpeg -i rtsp://your_rtsp_ip:port/path/to/file.stream -c:v copy -c:a copy -bufsize 1835k -pix_fmt yuv420p -flags -global_header -hls_time 10 -hls_list_size 6 -hls_wrap 10 -start_number 1 /var/www/html/video.m3u8

To embed the video I down­loaded the fol­low­ing css file and 2 js files

  • https://vjs.zencdn.net/7.2.3/video-js.css
  • https://cdnjs.cloudflare.com/ajax/libs/videojs-contrib-hls/5.14.1/videojs-contrib-hls.js
  • https://vjs.zencdn.net/7.2.3/video.js

I then used the code from the guide (with mod­i­fied paths to loc­al files) to embed the video which worked straight away. ffm­peg is using around 0.2% cpu usage and a few mb of memory on the serv­er that hosts the website.

One final note, incase it mat­ters — I used the win64 stat­ic build of ffm­peg 4.2.2

Leave a Reply

2 Comments

JSJack Straw

FYI, chrome (only chrome to date) can dir­ectly read .m3u8 files and play the video just like it would an mp4 etc.

Reply
TThomas

Hi there,
im try­ing to do the same, but I cant seem to get it to work properly
I fol­lowed your instruc­tions, and the linked one, but i still seem to get 20–30 seconds of delay between the live feed and the pub­lished feed
any ideas what could be caus­ing it?

Reply