Please provide complete information as applicable to your setup.
• Hardware Platform (Jetson / GPU)
Jestson
• DeepStream Version
6.0.1
• JetPack Version (valid for Jetson only)
4.6.3
• TensorRT Version
8.2.1-1+cuda10.2
• NVIDIA GPU Driver Version (valid for GPU only)
• Issue Type( questions, new requirements, bugs)
Questions
Looking at the RTSP Source bin implementation in deepstream_source_bin.c
I see the following.
First, in the create_rtsp_src_bin
function we have pre-decode tee
linked to the decode queue
which is linked to the decoder
. The tee
is also optionally linked to the recordbin
link_element_to_tee_src_pad(bin->tee_rtsp_pre_decode, bin->dec_que);
NVGSTDS_LINK_ELEMENT (bin->dec_que, bin->decodebin);
if (ctx)
link_element_to_tee_src_pad(bin->tee_rtsp_pre_decode, ctx->recordbin);
In the select-stream callback, the depay
is linked to the parser
which is linked to the pre-decode tee
NVGSTDS_LINK_ELEMENT (bin->depay, bin->parser);
NVGSTDS_LINK_ELEMENT (bin->parser, bin->tee_rtsp_pre_decode);
And in the pad-added callback the rtspsrc
element is linked to the depay
GstPad *sinkpad = gst_element_get_static_pad (bin->depay, "sink");
if (gst_pad_link (pad, sinkpad) != GST_PAD_LINK_OK) {
This gives us
|->queue->decoder->
rtcpsrc->depay->parser->tee
|->recordbin
This is exactly what is show in the diagram here
Looking at the Smart Recording example, in the main function we have the depay
linked to the pre-decode tee
which is linked to the queue
which is linked to the decoder
Surprisingly, there is no parser
between the depay
and the decoder
!
/* Link the elements together till decoder */
if (!gst_element_link_many (depay_pre_decode, tee_pre_decode,
queue_pre_decode, decoder, NULL)) {
Then in the pad-added callback, the rtspsrc
is linked to the depay
and then the pre-decode tee
is linked to the parser
which is linked to the recordbin
GstPad *sinkpad = gst_element_get_static_pad (depay_elem, "sink");
if (gst_pad_link (element_src_pad, sinkpad) != GST_PAD_LINK_OK) {
...
GstElement *parser_pre_recordbin =
gst_element_factory_make ("h264parse", "parser-pre-recordbin");
if (!gst_element_link_many (tee_pre_decode, parser_pre_recordbin,
nvdssrCtx->recordbin, NULL)) {
This gives us
|->queue->decoder->
rtcpsrc->depay->tee
|->parser->recordbin
The approach used in the common RTSP source bin in deepstream_source_bin.c
seems correct to me, and used to work… however, I’m only able to get the recordbin
to link if I follow the approach in the Smart-Recording example. This seems to have change when audio support was added??
Can anyone explain why?
Thanks,
Robert.