You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
Yohann D'ANELLO f7cf187bac
Ignore stream name case
2 years ago
auth Ignore stream name case 2 years ago
docs Match aliases as groups 2 years ago
internal Match aliases as groups 2 years ago
messaging Fix typo in outputted 3 years ago
stream Ignore stream name case 2 years ago
transcoder Update package text with Quality structure 3 years ago
web Ignore stream name case 2 years ago
.gitignore viewerCounter and websocket JS modules 3 years ago
.gitlab-ci.yml Cache go modules in CI 3 years ago
Dockerfile 5 UDP ports are not enough 3 years ago
Dockerfile.bullseye Update exposed ports in Debian Docker image 3 years ago
LICENSE License work under MIT 3 years ago Add docker build badge to README 3 years ago
go.mod Upgrade pion 3 years ago
go.sum Upgrade pion 3 years ago
main.go Use config file for OME broadcasting 3 years ago
main_test.go Create config package and properly use Viper 3 years ago


License: MIT PkgGoDev Go Report Card pipeline status coverage report Docker Cloud Build Status

Boooo! A simple streaming server with authentication and open-source technologies.

This project was developped at Cr@ns to stream events.


  • WebRTC playback with a lightweight web interface.
  • SRT stream input, supported by FFMpeg, OBS and Gstreamer.
  • Low-latency streaming, sub-second with web player.
  • Authentication of incoming stream using LDAP server.
  • Possibility to forward stream to other streaming servers.

Installation on Debian/Ubuntu

On Ubuntu 20.10+ or Debian 11+, you can install directly ghostream,

sudo apt install git golang ffmpeg libsrt1-openssl
go get

On Ubuntu 20.04 or Debian Buster, you may manually install libsrt 1.4.1: install libsrt1-openssl 1.4.1 then libsrt-openssl-dev 1.4.1.

For development, you may clone this repository, then go run main.go.

Installation with Docker

An example is given in docs/docker-compose.yml. It uses Traefik reverse proxy.

You can also launch the Docker image using,

docker build . -t ghostream
docker run -it --rm -p 2112:2112 -p 9710:9710/udp -p 8080:8080 -p 10000-10005:10000-10005/udp ghostream


Ghostream can be configured by placing ghostream.yml in /etc/ghostream/. You can overwrite the configuration path with GHOSTREAM_CONFIG environnement variable. You can also overwride any value using environnement variables, e.g. GHOSTREAM_AUTH_BACKEND=ldap will change the authentification backend.


As stated by OBS wiki, when streaming you should adapt the latency to 2.5 * (the round-trip time with server, in μs).

With OBS

As OBS uses FFMpeg, you need to have FFMpeg compiled with SRT support. To check if SR is available, run ffmpeg -protocols | grep srt. On Windows and MacOS, OBS comes with his own FFMpeg that will work.

In OBS, go to "Settings" -> "Output" -> "Recording" the select "Output to URL" and change the URL to srt:// For container, you may use MPEGTS for now (will change).

With GStreamer

To stream your X11 screen,

gst-launch-1.0 ximagesrc startx=0 show-pointer=true use-damage=0 \
! videoconvert \
! x264enc bitrate=32000 tune=zerolatency speed-preset=veryfast byte-stream=true threads=1 key-int-max=15 intra-refresh=true ! video/x-h264, profile=baseline, framerate=30/1 \
! mpegtsmux \
! srtserversink uri=srt:// latency=1000000 streamid=demo:demo

This might not work at the moment.

Playing stream

With a web browser and WebRTC

Ghostream expose a web server on by default. By opening this in a browser, you will be able to get instructions on how to stream, and if you append /streamname to the URL, then you will be able to watch the stream named streamname.

The web player also integrates a side widget that is configurable.

Integrate the player in an iframe

To integrate the player without the side widget, you can append ?nowidget to the URL.

<iframe src="" scrolling="no" allowfullscreen="true" width="1280" height="750.4" frameborder="0"></iframe>

The iframe size should be a 16/9 ratio, with additionnal 30.4px for the control bar.

With ffplay

You may directly open the SRT stream with ffplay:

ffplay -fflags nobuffer srt://

With MPV

As MPV uses ffmpeg libav, support for SRT streams can be easily added. See current pull request.


ld returns an error when launching ghostream

When missing libsrt-openssl-dev on Debian/Ubuntu, then srtgo package is unable to build.

~/ghostream$ go run main.go
/usr/bin/ld: cannot find -lsrt
/usr/bin/ld: cannot find -lsrt
/usr/bin/ld: cannot find -lsrt
collect2: error: ld returned 1 exit status