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

Got some thoughts of your own? Indulge yourself below by commenting! If you would like to subscribe please use the subscribe link on the menu at the top right. You can also share this with your friends by using the social links below. Cheers.

Leave a Reply

2 Comments

gravatarJack 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
gravatarThomas

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