Skip to content

Command-line app that publishes any GStreamer pipeline to LiveKit

License

Notifications You must be signed in to change notification settings

livekit/gstreamer-publisher

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LiveKit GStreamer Publisher

This utility allows you to publish from any GStreamer source to LiveKit. It parses a gst-launch style pipeline and reads negotiates

Prerequisites

  • Go 1.22 or later
  • GStreamer 1.20 or later

Install

go install github.com/livekit/gstreamer-publisher@latest

Usage

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.

Examples

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.

Test stream as H.264

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

Publish from file

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

About

Command-line app that publishes any GStreamer pipeline to LiveKit

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages