This utility allows you to publish from any GStreamer source to LiveKit. It parses a gst-launch style pipeline and reads negotiates
- Go 1.22 or later
- GStreamer 1.20 or later
go install github.com/livekit/gstreamer-publisher@latest
To use this utility, you need to generate an access token that includes
the canPublish
permission.
When constructing pipelines, you would want to end the pipeline with elements that produce H264, VP8, VP9, or Opus. Do not mux the streams into a container format. GStreamer-publisher will inspect the pipeline and import the raw streams into LiveKit.
The examples below assume you have the following environment variables defined:
export LIVEKIT_URL=<wss://project.livekit.cloud>
export LIVEKIT_PUBLISH_TOKEN=<token>
To view the stream, you can create a second token and head over to our example app to connect as a viewer.
This creates a video and audio from test src, encoding it to H.264 and Opus.
gstreamer-publisher --token $LIVEKIT_PUBLISH_TOKEN \
-- \
videotestsrc is-live=true ! \
video/x-raw,width=1280,height=720 ! \
clockoverlay ! \
videoconvert ! \
x264enc tune=zerolatency key-int-max=60 bitrate=2000 \
audiotestsrc is-live=true ! \
audioresample ! \
audioconvert ! \
opusenc bitrate=64000
The following converts any video file into VP9 and Opus using decodebin3
gstreamer-publisher --token $LIVEKIT_PUBLISH_TOKEN \
-- \
filesrc location="/path/to/file" ! \
decodebin3 name=decoder \
decoder. ! queue ! \
videoconvert ! \
videoscale ! \
video/x-raw,width=1280,height=720 ! \
vp9enc deadline=1 cpu-used=-6 row-mt=1 tile-columns=3 tile-rows=1 target-bitrate=2000000 keyframe-max-dist=60 \
decoder. ! queue ! \
audioconvert ! \
audioresample ! \
opusenc bitrate=64000