jsmpeglive v1.0.3
jsmpeglive
An MPEG1 Video Decoder in JavaScript
jsmpeglive is a MPEG1 Live Video Decoder, written in JavaScript.
It receives a live stream, via WebSocket.
It is prepared to use any other Transport method available. It just needs to follow the same interface as the included built-in WebSocketClient.
This WebSocketClient has the logic to reconnect every 5 seconds
TODO: add some logarithmic/fibonacci/exponential back-off method
Setup
Run npm install and then npm start to start the HTTP and WebSockets server.
In an other terminal, Then, to start streaming, you can use a camera that provides a RTSP feed, or your own laptop
# Laptop Web cam feed
./start_ffmpeg_stream.sh /dev/video0or
# Camera Feed
./start_ffmpeg_stream.sh "rtsp://192.168.1.54:554/axis-media/media.amp?videocodec=h264&resolution=640x480"Building
To build, just run npm build
API
Constructor
var player = new jsmpeglive(uri[, options])
The uri argument accepts a WebSocket address for streaming playback.
The options argument to jsmpeglive() supports the following properties:
benchmarkwhether to log benchmark results to the browser's consolecanvasthe HTML Canvas element to use; jsmpeglive will create its own Canvas element if none is providedondecodeframea function that's called after every frame that's decoded and rendered to the canvas
Examples
The best example is just checking the source code. Feel free to review stream-example.html.
Note that you have to include both WebSocketClient and jsmpeglive
var player = new jsmpeglive('ws://localhost:8084/', {canvas:canvas});Diferences between jsmpeglive and jsmpeg
The Transport layer was removed from the main jsmpeg decoding object. Also, as I didn't need recording, it was removed, as well as all the functions for playing local video files.
Limitations
- Only raw MPEG video streams are supported. The decoder hates Stream Packet Headers in between macroblocks.
You can use FFmpeg to encode videos in a suited format. Check start_ffmpeg_stream,sh, it has the parameters needed to crop the size to a multiple of 2, omit B-Frames and force a raw video stream.
Inspiration
It is based on the work of Dominic Szablewski's jsmpeg
jsmpeg is based on Java MPEG-1 Video Decoder and Player by Korandi Zoltan and inspired by MPEG Decoder in Java ME by Nokia.