Go to file
Yohann D'ANELLO 7831238375 Don't split domain if we use standard HTTP ports 2020-10-04 18:10:11 +02:00
auth Test authentication 2020-10-01 20:11:43 +02:00
docs Add oneStreamPerDomain mode 2020-10-04 17:56:03 +02:00
internal/monitoring Do not read prometheus metrics 2020-09-29 18:17:55 +02:00
stream Limit SRT buffer to MTU 2020-10-04 14:27:16 +02:00
web Don't split domain if we use standard HTTP ports 2020-10-04 18:10:11 +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 Add MPV and OBS instructions in README 2020-10-04 11:20:25 +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 Add oneStreamPerDomain mode 2020-10-04 17:56:03 +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" -> "Output" -> "Recording" the select "Output to URL" and change the URL to srt://127.0.0.1:9710?streamid=demo:demo. For container, you may use MPEGTS for now (will change).

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

With MPV

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

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