Packing arbitrary audio and video into a container (non-synced)

colmekik iank at colmek.com
Fri Aug 21 18:02:06 UTC 2020


I’m working on a live streaming (audio & video) project and am exploring what
is possible with gstreamer.  For this application low latency is important
but tight synchronization of the streams is not.  The video stream is coming
from a web cam that encodes directly to h264 so all I have to do is parse
and payload the video.  The audio performs best with pcm encoding and
payloading.  I have separate working pipelines that perform well. I have a
working rtsp server that combines the streams and delivers them quite
nicely. However, when I try to mux the two streams together I quickly get
dropped packets and wretched performance.  Is there a way to arm bar the two
streams into a container and ignore or turn off the syncing?  For a variety
of reasons using a single container vs an sdp file is preferable in this
case.  As far as I can tell this isn’t very wise, is antithetical to the
purpose of most plugins, but is it possible? 
  
Video pipeline:
gst-launch-1.0 v4l2src device=/dev/videoh264 ! "video/x-h264" ! queue !
h264parse ! rtph264pay ! udpsink host=IP_ADD port=PRT

Audio pipeline:
gst-launch-1.0 alsasrc device="hw:2,0" provide-clock=true
actual-buffer-time=20000 do-timestamp=true buffer-time=20000 ! alawenc !
rtppcmapay max-ptime=20000000 ! udpsink host=IP_ADD port=PRT

A valid but ugly, horrible pipeline:
gst-launch-1.0 alsasrc device="hw:2,0" provide-clock=true
actual-buffer-time=20000 do-timestamp=true buffer-time=20000 ! queue  !
alawenc ! mux. v4l2src device=/dev/videoh264 ! "video/x-h264" ! queue !
h264parse ! matroskamux name=mux ! udpsink host=IP_ADD port=PRT



--
Sent from: http://gstreamer-devel.966125.n4.nabble.com/


More information about the gstreamer-devel mailing list