• Stars
    star
    115
  • Rank 305,916 (Top 7 %)
  • Language
    JavaScript
  • License
    GNU General Publi...
  • Created over 9 years ago
  • Updated over 9 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Video live streaming with jpeg renders in html5 and nodejs

Video live streaming in html5

This tutorial describes how to display video data in real-time on the canvas object in html5. Data are broadcast by web socket to html5 in two different ways:

  • FFmpeg convert stream data to images which are sent to server. The server merge images data and convert binary to base64, then broadcast full image in string/base64 format by web socket. The javascript refresh images on canvas object.
  • Binary data are sent to server which broadcast blob object by web socket. The library jsmpeg allows render this type of data on canvas object.

This solution allows only broadcast video without audio.

I. Requirements:

Tools and nodejs libraries which was used in this tutorial.

a) Tools

b) nodejs library

The below libraries you have to install in your project folder

$ npm install ws
$ npm install express

II. Web socket server

Run stream server in nodejs which allow broadcast data by web socket. The parameter base64 is optional and allow broadcast data in base64 format. Without parameter base64 data are sent in binary format.

$ node server-stream.js [your_password] [http_port] [ws_port] [base64]
$ node server-stream.js pass123 8082 8084 base64

III. Command FFmpeg:

1. Windows

FFmpeg commands use in Windows

a) Streaming from PC camera

image streaming

$ ffmpeg -f vfwcap -i 0 -f image2 -vcodec mjpeg -b:v 500k -r 21 -q:v 10 -s 640x480 http://127.0.0.1:8082/temp123/640/480/image-%3d.jpg

binary streaming

$ ffmpeg -f vfwcap -i 0 -f mpeg1video -b:v 500k -r 21 -q:v 10 -s 640x480 http://127.0.0.1:8082/temp123/640/480/

b) Streaming from rtmp protocol

image streaming

$ ffmpeg -i "rtmp://127.0.0.1/video_audio live=1" -f image2 -vcodec mjpeg -b:v 500k -r 21 -q:v 10 -s 640x480 http://127.0.0.1:8082/temp123/640/480/image-%3d.jpg

binary streaming

$ ffmpeg -i "rtmp://127.0.0.1/video_audio live=1" -f mpeg1video -b:v 500k -r 21 -q:v 10 -s 640x480 http://127.0.0.1:8082/temp123/640/480/

2. Unix/Linux

FFmpeg commands use in Unix/Linux

TODO

IV. HTTP Server

Run http server based on express in nodejs

$ node server-http.js [http_port] 

Following you can find example client implementation

http://127.0.0.1:8080/stream-base64.html 
http://127.0.0.1:8080/stream-jsmpeg.html