Using GStreamer 1.24.2.
Some back story… I’ve been recording from an rtsp stream using splitmuxsink. I was trying to concatenate those videos using the concat element. Seems to work fine for generating a new concatenated file, but if I’m trying to use it for viewing with autovideosink or streaming with webrtcbin it seems to get stuck after the first few files. I’ve filed a bug report here, but have no response.
I eventually found there is a splitmuxsrc. Unsure why that’s needed when there is a concat element. Nevertheless, testing splitmuxsrc from the command line resulted in success with autovideosink. So, since I wasn’t getting a response on my bug report, I figured I’d go in this direction.
Next step was to test it in my application with webrtcbin. Unfortunately I’m stuck on how to provide the input files. There is a format-location signal which is exactly what I want. Here is my signal handler:
private void HandleFormatLocation(
object o,
SignalArgs args)
{
if (!RecordingFiles.Any())
{
return;
}
var files = RecordingFiles.OrderBy(p => p.StartDate)
.ToList()
.Select(p => p.Filename)
.Select(p => p.Replace("\\", "\\\\"))
.ToArray();
Logger.LogWarning("Getting files: {files}", files.JoinString(", "));
var value = new GLib.Value(files);
args.RetVal = value;
}
I’ve tried various things, but I think this is the correct code. Unfortunately, something seems to be messing it up. Here is the output:
[15:21:08 WRN] Getting files: D:/VideoRecording/Ubiquiti/video0000041.mp4, D:/VideoRecording/Ubiquiti/video0000042.mp4, D:/VideoRecording/Ubiquiti/video0000043.mp4, D:/VideoRecording/Ubiquiti/video0000044.mp4, D:/VideoRecording/Ubiquiti/video0000045.mp4, D:/VideoRecording/Ubiquiti/video0000046.mp4, D:/VideoRecording/Ubiquiti/video0000047.mp4, D:/VideoRecording/Ubiquiti/video0000048.mp4, D:/VideoRecording/Ubiquiti/video0000049.mp4, D:/VideoRecording/Ubiquiti/video0000050.mp4, D:/VideoRecording/Ubiquiti/video0000051.mp4, D:/VideoRecording/Ubiquiti/video0000052.mp4, D:/VideoRecording/Ubiquiti/video0000053.mp4, D:/VideoRecording/Ubiquiti/video0000054.mp4
[15:21:08 ERR] MESSAGE: Pipeline error for view recording files:
Could not open resource for reading.
../gst/multifile/gstsplitmuxsrc.c(506): gst_splitmux_part_bus_handler (): /GstPipeline:pipeline0/GstSplitMuxSrc:concat:
Failed to prepare first file part ☺ for playback
Looking at the code in gstsplitmuxsrc.c, it appears the smiley face in the last line of output is supposed to be a filename. Most likely it should say D:/VideoRecording/Ubiquiti/video0000041.mp4.
I’ve tried a few different ways of returning a string array and nothing works. I run into things like marshalling errors, or unknown type gstrv. All the GStreamer-Sharp examples I could find just set boolean values to RetVal.
I asked in the gstreamer general discussion of element.io, but also got no help. Hoping someone here has run into this problem and has a workaround?