I changed caps to video/x-h264,stream-format=byte-stream,alignment=nal
Also removed h264parse from pipeline and changed emit-signals
property on appsink to true.
And finally changed FrameReceived
event handler to
rtspClient.FrameReceived += async (sender, frame) =>
{
if (frame.Type != FrameType.Video) return;
var bufferSize = frame.FrameSegment.Count;
var iFrame = frame as RawH264IFrame;
if (iFrame is not null)
{
bufferSize += iFrame.SpsPpsSegment.Count;
}
var buf = new byte[bufferSize];
if (iFrame is not null)
{
iFrame.SpsPpsSegment.CopyTo(buf);
iFrame.FrameSegment.CopyTo(buf, iFrame.SpsPpsSegment.Count);
}
else
{
frame.FrameSegment.CopyTo(buf);
}
using var gstBuffer = new Gst.Buffer(buf);
using var caps = Caps.FromString("video/x-h264,stream-format=byte-stream,alignment=nal");
var segment = new Segment();
using var structure = new Structure("frame");
structure.SetValue("width", new GLib.Value(1280));
structure.SetValue("height", new GLib.Value(720));
using var gstSample = new Sample(gstBuffer, caps, segment, structure);
source.Emit("push-sample", gstSample);
};
Now it works and I receive jpeg images. Thanks!