auth | ||
docs | ||
internal/monitoring | ||
stream | ||
web | ||
.gitignore | ||
.gitlab-ci.yml | ||
Dockerfile | ||
go.mod | ||
go.sum | ||
LICENSE | ||
main_test.go | ||
main.go | ||
README.md |
Ghostream
Boooo! A simple streaming server with authentication and open-source technologies.
This project was developped at Cr@ns to stream events.
Features:
- WebRTC playback with a lightweight web interface.
- SRT stream input, supported by FFMpeg, OBS and Gstreamer.
- Low-latency streaming, sub-second with web player.
- Authentification of incoming stream using LDAP server.
Installation on Debian/Ubuntu
You need at least libsrt 1.4.1. On Ubuntu 20.04 or Debian Buster, you may manually install libsrt1-openssl then libsrt-openssl-dev.
You may clone this repository, then go run main.go
for debugging, or go get gitlab.crans.org/nounous/ghostream
.
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
Streaming
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" -> "Stream" and change "Service" to "Custom..." and "Server" to srt://127.0.0.1:9710
.
With GStreamer
To stream 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://127.0.0.1:9710/ latency=1000000
References
- Phil Cluff (2019), Streaming video on the internet without MPEG.
- MDN web docs, Signaling and video calling.
- WebRTC For The Curious
- OBS Wiki, Streaming With SRT Protocol.