Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Erlang RTMP server
Erlang JavaScript ActionScript
tree: 83c2c8617f

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
deps
doc
include
src
wwwroot
.gitignore
Emakefile
Makefile
README

README

erlyvideo is a flash streaming server, written in erlang.

currently it can:

  * stream, seek, pause and resume mp4 and flv files 
  * fast starting of flv playback with building index in background
  * record flv from camera
  * have possibility to auth users
  * broadcast flv between people
  * provide push channel to flash, just like juggernaut, just like AMQP (look doc/push.edoc)

currently in development:
  * good recording from flash camera. Currently there are problems.
  * improve handling of background vlc/ffmpeg for them to recode uploaded videos
  * reading of MPEG TS. It may be required for streaming and recording from video cameras

  
future plans:
  * try to change quality on fly
  * RTSP/RTP to read from QuickTime Broadcaster


What you can do right now?

  * use it for streaming flv and mp4 files
  * use it as a replacement for long-poll push channels
  * use it as a recorder of video camera


How can You help?
  
  * Launch it and test on your content;
  * make fork on github, add your improvements and push them to me.

How to launch:

  * git clone git://github.com/maxlapshin/erlyvideo.git
  * cd erlyvideo
  * cp src/erlmedia.app ebin/erlmedia.app
  * $EDITOR ebin/erlmedia.app
  * change /tmp to /Users/username/Movies
  * make
  * make run
  * open http://localhost:8082
  * click on any flv/mp4 file and then press Play
  * change any erlang code
  * type ems:rebuild() in console
  * profit!

How to hack and add features:

  * read doc/hacking.edoc
  * add plugin

Plugin structure:

  * Look at src/apps_streaming.erl
  * You should define and export functions, that will be available to flash. Format is  FunctionName(AMF, State). Reply is State.
  * To handle events to client runloop, add 'WAIT_FOR_DATA'(Message, State) function, which should respond in the same way as OTP handler.
Something went wrong with that request. Please try again.