Go to file
Yohann D'ANELLO 83da3cc392 Docker production image must download libsrt from the edge repository 2020-10-04 01:34:09 +02:00
auth Test authentication 2020-10-01 20:11:43 +02:00
docs ID is better than Id according to Golang 2020-10-02 21:13:50 +02:00
internal/monitoring Do not read prometheus metrics 2020-09-29 18:17:55 +02:00
stream Remove globals in SRT server 2020-10-03 17:50:34 +02:00
web Add empty configuration in Web Handler test 2020-10-03 13:28:54 +02:00
.gitignore Use pkger to pack templates 2020-09-28 17:36:40 +02:00
.gitlab-ci.yml 🎉 libsrt got packaged in community's Alpine Linux repo, FFMPEG is compiled with libsrt, so we use Alpine Linux 2020-10-01 09:29:25 +02:00
Dockerfile Docker production image must download libsrt from the edge repository 2020-10-04 01:34:09 +02:00
Dockerfile.bullseye 🎉 libsrt got packaged in community's Alpine Linux repo, FFMPEG is compiled with libsrt, so we use Alpine Linux 2020-10-01 09:29:25 +02:00
LICENSE License work under MIT 2020-09-25 15:26:33 +02:00
README.md Translate ld error 2020-10-03 21:19:57 +02:00
go.mod Do not read prometheus metrics 2020-09-29 18:17:55 +02:00
go.sum Store connected viewers in Prometheus and serve this amount 2020-09-29 18:03:28 +02:00
main.go Enlarge forwarding channel to avoid blockings from the forwarding package 2020-10-03 00:08:32 +02:00
main_test.go Rename multicast to stream forwarding 2020-09-30 15:07:36 +02:00

README.md

Ghostream

License: MIT PkgGoDev Go Report Card pipeline status coverage report

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.
  • Authentication of incoming stream using LDAP server.
  • Possibility to forward stream to other streaming servers.

Installation on Debian/Ubuntu

You need at least libsrt 1.4.1. On Ubuntu 20.04 or Debian Buster, you may manually install libsrt-openssl-dev 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?streamid=demo:demo.

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 streamid=demo:demo

Playing stream

With a web browser and WebRTC

Ghostream expose a web server on 0.0.0.0:8080 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.

With ffplay

You may directly open the SRT stream with ffplay:

ffplay -fflags nobuffer srt://127.0.0.1:9710?streamid=demo

Troubleshooting

ld returns an error when launching ghostream

When using libsrt-gnutls-dev rather than libsrt-openssl-dev on Debian/Ubuntu, then srtgo package is unable to build.

~/ghostream$ go run main.go
# github.com/haivision/srtgo
/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

The solution is to switch to libsrt-openssl-dev.

References