2 sources and one of them has a wrong path

Please provide complete information as applicable to your setup.

• Hardware Platform (Jetson / GPU) GPU 3080
• DeepStream Version 6.3
• JetPack Version (valid for Jetson only)
• TensorRT Version
• NVIDIA GPU Driver Version (valid for GPU only) 535.113.01
• Issue Type( questions, new requirements, bugs)
• How to reproduce the issue ? (This is for bugs. Including which sample app is using, the configuration files content, the command line used and other details for reproducing)
• Requirement details( This is for new requirement. Including the module name-for which plugin or for which sample application, the function description)

Hello! I’m new to deepstream and I’m stucked in some problems. I work with 2 sources, and stream0 has a wrong path. If I release the channel 0 for error message(“Resource not found”) in bus_call function, the pipeline doesn’t continue to work for second source. I have suceed it to run the pipeline with multiple sources when one of them (execpt first one) has a wrong path in config.
My question is the next one: If the first source from config cannot start, this may lead to issuses that prevent the pipeline to run?

Did you meet this problem using your own app or sample ?

For example, in the deepstream-app program, you can view the processing of GST_MESSAGE_ERROR in bus_callback

I’ve met this error in sample runtime_source_add_delete, when i use stop_release_source(channel_id) for sources when they are crated and one of theam has a wrong path.
In bus call, for error message I have this code changed:

  elif t == Gst.MessageType.ERROR:
    err, debug = message.parse_error()
    struct = message.get_structure()
    parsed, channel_id = struct.get_uint("stream-id")

    source_name = (
        str(message.parse_error()).split("/GstURIDecodeBin:")[1].split("/")[0]
    )
    channel_id = int(source_name.split("-")[2])
    sys.stderr.write("Error: %s: %s\n" % (err, debug))
    if " Resource not found" in str(err):
        stop_release_source(channel_id)
        print("source was released")
    else:
        print(" Another error except not found")

I get the next error: ‘NoneType’ object has no attribute ‘send_event’, because sinkpad has value None.

if state_return == Gst.StateChangeReturn.SUCCESS:
    print("STATE CHANGE SUCCESS\n")
    pad_name = "sink_%u" % source_id
    print(pad_name)
    #Retrieve sink pad to be released
    sinkpad = streammux.get_static_pad(pad_name)
    #Send flush stop event to the sink pad, then release from the streammux
    sinkpad.send_event(Gst.Event.new_flush_stop(False))
    streammux.release_request_pad(sinkpad)
    print("STATE CHANGE SUCCESS\n")
    #Remove the source bin from the pipeline
    pipeline.remove(g_source_bin_list[source_id])
    source_id -= 1
    g_num_sources -= 1

So, the problem is when i give as arguments 2 sources, one with wrong path, it doesn’t released the channel for that source and the pipeline doesn’t run with the source that has a good path. How can i release a channel when the runtime starts in order to run just sources that are good. if they exist, else will quit the loop.

I understand that stop_release_source function is used in this sample for deleting the source and releasing the channel in runtime. I’ve used it at the beginning and i don’t undersatnd exactly why it isn’t working. How is the channel created if the source path isn’t found and similar questions.

I try to modify deepstream_rt_src_add_del.py according to your description. If there is a wrong path in it, it will not work.

This is due to the wrong path, and the uridecodebin and sink pad of streammux cannot be linked.
so
sinkpad = streammux.get_static_pad(pad_name) is None

If this error is ignored, the entire pipeline will fail because it cannot enter the start state.

The pipeline is as the following.

uridecodebin ---|
                |-------nvstreammux
uridecodebin ---|
 (wrong path)

You will meet this error.

Error: gst-core-error-quark: GStreamer error: state change failed and some element failed to post a proper error message with the reason for the failure. (4):gstbasesrc.c(3468): gst_base_src_start (): /GstPipeline:pipeline0/GstURIDecodeBin:source-bin-01/GstFileSrc:source:

There is no way to continue the runtime if one of the sorces has a wrong path?

There is no update from you for a period, assuming this is not an issue anymore. Hence we are closing this topic. If need further support, please open a new one. Thanks

When you meet Resource not found error, remove the wrong path branch then restart the pipeline. I don’t think other methods can start successfully.

uridecodebin ---|
                |-------nvstreammux
uridecodebin ---|
 (meet error then delete wrong path branch)

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.