I'm trying to save encoded h265 data to file using next pilelines:
to send:
appsrc name=vsrc ! videoconvert ! video/x-raw,format=I420,width=1920,height=1080,framerate=60/1 "
"! omxh265enc bitrate=20000000 control-rate=2 "
"! rtph265pay name=pay0 pt=96
to receive:
gst-launch-1.0 --gst-debug-level=2 rtspsrc location=rtsp://
10.20.55.68:4510/vd latency=0 protocols=GST_RTSP_LOWER_TRANS_TCP ! application/x-rtp,encoding-name=H265,payload=96 ! rtph265depay ! h265parse ! queue ! matroskamux ! filesink location=/home/nvidia/testcompress/video_20mbit_enc.mkv -e sync=false async=false
and it gives me next warnings:
0:00:13.408891548 8716 0x635370 WARN matroskamux matroska-mux.c:3558:gst_matroska_mux_write_data:<matroskamux0:video_0> Invalid buffer timestamp; dropping buffer
0:00:14.371792889 8716 0x635370 WARN matroskamux matroska-mux.c:3558:gst_matroska_mux_write_data:<matroskamux0:video_0> Invalid buffer timestamp; dropping buffer
0:00:15.345857558 8716 0x635370 WARN matroskamux matroska-mux.c:3558:gst_matroska_mux_write_data:<matroskamux0:video_0> Invalid buffer timestamp; dropping buffer
and i got corrupted video in result
i tried to set my own timestamp:
if (startTime == -1)
{
startTime = it->time;
}
qint64 ts = (it->time - startTime) * 1e2;
GST_BUFFER_PTS (buffer) = ts;
GST_BUFFER_DTS (buffer) = ts;
i also tried to set do-timestamp option in appsrc:
g_object_set (appsrc, "do-timestamp", true, NULL);
g_object_set(appsrc, "is-live", true, NULL);
g_object_set(appsrc, "min-latency", 0, NULL);
but i get corrupted video anyway.
what is wrong?
example of corrupted video:
https://drive.google.com/open?id=1GsLW9WEWi619YRDZw7ndmd43Nlyq4QSm