Glimesh / broadcast-box

A broadcast, in a box.
MIT License
689 stars 58 forks source link

Example AV1 Gstreamer pipeline for Broadcast Box #39

Closed erikherz closed 11 months ago

erikherz commented 11 months ago

May I have an example Gstreamer pipeline for my Broadcast Box server?

Something like:

/Library/Frameworks/GStreamer.framework/Versions/1.0/bin/gst-launch-1.0 videotestsrc ! "video/x-raw,size=1920x1080,rate=30" \
! videoconvert ! queue ! rav1enc ! rtpav1pay pt=96 ssrc=2 \
! queue ! "application/x-rtp,media=video,encoding-name=AV1,payload=96,clock-rate=90000" \
! whip.sink_0 audiotestsrc ! audioconvert ! opusenc ! rtpopuspay ! \
'application/x-rtp,media=audio,encoding-name=OPUS,payload=96,clock-rate=48000,encoding-params=(string)2' ! \
whip.sink_1 whipsink name=whip whip-endpoint="https://BB_ENDPOINT"
Sean-Der commented 11 months ago

The following works for me!

gst-launch-1.0 videotestsrc ! rav1enc low-latency=1 max-key-frame-interval=30 min-force-key-unit-interval=1000 speed-preset=10 ! av1parse ! rtpav1pay ! 'application/x-rtp,media=video,encoding-name=AV1,payload=97,clock-rate=90000' ! whip.sink_0 \
               audiotestsrc ! opusenc ! rtpopuspay ! 'application/x-rtp,media=audio,encoding-name=OPUS,payload=96,clock-rate=48000,encoding-params=(string)2' ! whip.sink_1 \
               whipsink name=whip auth-token=av1Test whip-endpoint=https://b.siobud.com/api/whip
Screenshot 2023-10-02 at 12 08 35 AM
Sean-Der commented 11 months ago

You can then watch on https://b.siobud.com/av1Test

erikherz commented 10 months ago

image

Perhaps I need to update my browser to support dav1d decoding?

Version 116.0.5845.187 (Official Build) (x86_64)

erikherz commented 10 months ago

Working! Refresh the client, then start the gstreamer encoder.

gst-launch-1.0 v4l2src ! "video/x-raw,format=YUY2,width=1920,height=1080,pixel-aspect-ratio=1/1,framerate=60/1" ! videoconvert ! "video/x-raw,width=1920,height=1080,framerate=60/1,format=I420" ! svtav1enc target-bitrate=5000000 crf=63 preset=8 ! av1parse ! rtpav1pay ! 'application/x-rtp,media=video,encoding-name=AV1,payload=97,clock-rate=90000' ! whip.sink_0 audiotestsrc ! opusenc ! rtpopuspay ! 'application/x-rtp,media=audio,encoding-name=OPUS,payload=96,clock-rate=48000,encoding-params=(string)2' ! whip.sink_1 whipsink name=whip auth-token=test whip-endpoint=https://YOUR_DOMAIN/api/whip
zapf2000 commented 8 months ago

When the client is started BEFORE encoding starts it works. If encoding is started first it doesn't. It seems that gstreamer sends a keyframe at stream start and then no keyframes anymore. Then the WHEP player doesn't know the codec. I only see this issue on AV1. VP9,VP8 working fine.