I am using splitmuxsink to MKV, and then playing that using uridecodebin3 using splitmux:// uri. I’m muxing 8 stereo channels along with one video.
If I only use one video and one of the audio channels, things seem to work ok. However, when I play all tracks, the playback always fails at some point. A surefire way for it to fail is attempting to seek forward. Usually, parts that have already played can be seeked.
I am using an audiomixer to mix each stereo track into a 16-channel output for a Decklink card.
Using Debian Trixie using Gstreamer 1.24.10, but I’ve seen it on at least 1.24.8 and .9.
Here’s what I’m doing:
# This will work and play the entire splitmux ok
gst-launch-1.0 uridecodebin3 uri="splitmux://video/video*.ts" name="dbin" ! queue ! videoconvert ! videoscale ! videorate ! video/x-raw,width=1920,height=1080,framerate=60000/1001 ! multiqueue name="sinkmq" max-size-time=3000000000 sinkmq. ! decklinkvideosink name="dl-vsink0" device-number=0 mode=1080p5994 mapping-format=default sync=true dbin. ! multiqueue name="audiomq" audiomq. ! audioconvert mix-matrix="<<(float)1,(float)0>,<(float)0,(float)1>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>>" ! audiomixer name=m ! level interval=200000000 ! sinkmq. sinkmq. ! decklinkaudiosink name="dl-asink0" buffer-time=50000 device-number=0 sync=true
# Other audio channels will start playing ok, but will eventually fail
# (of course, this won't play from cli due to stream selection, which I am doing in code -- note that a non-splitmux file works fine with the same exact pipeline, minux the splitmux, obviously)
gst-launch-1.0 uridecodebin3 uri="splitmux://video/video*.mkv" name="dbin" ! queue ! videoconvert ! videoscale ! videorate ! video/x-raw,width=1920,height=1080,framerate=60000/1001 ! multiqueue name="sinkmq" max-size-time=3000000000 sinkmq. ! decklinkvideosink name="dl-vsink0" device-number=0 mode=1080p5994 mapping-format=default sync=true dbin. ! multiqueue name="audiomq" audiomq. ! audioconvert mix-matrix="<<(float)1,(float)0>,<(float)0,(float)1>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>>" ! audiomixer name=m ! sinkmq. sinkmq. ! decklinkaudiosink name="dl-asink0" buffer-time=50000 device-number=0 sync=true dbin. ! audiomq. audiomq. ! audioconvert mix-matrix="<<(float)0,(float)0>,<(float)0,(float)0>,<(float)1,(float)0>,<(float)0,(float)1>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>>" ! m. dbin. ! audiomq. audiomq. ! audioconvert mix-matrix="<<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)1,(float)0>,<(float)0,(float)1>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>>" ! m. dbin. ! audiomq. audiomq. ! audioconvert mix-matrix="<<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)1,(float)0>,<(float)0,(float)1>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>>" ! m. dbin. ! audiomq. audiomq. ! audioconvert mix-matrix="<<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)1,(float)0>,<(float)0,(float)1>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>>" ! m. dbin. ! audiomq. audiomq. ! audioconvert mix-matrix="<<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)1,(float)0>,<(float)0,(float)1>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>>" ! m. dbin. ! audiomq. audiomq. ! audioconvert mix-matrix="<<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)1,(float)0>,<(float)0,(float)1>,<(float)0,(float)0>,<(float)0,(float)0>>" ! m. dbin. ! audiomq. audiomq. ! audioconvert mix-matrix="<<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)0,(float)0>,<(float)1,(float)0>,<(float)0,(float)1>>" ! m.
Any light anyone can shed on how I can fix this or even alternate methods to do the same thing (split file recording) that might work, I’d love to know.