Not negotiated error sometimes happens

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Not negotiated error sometimes happens

Tran Tu
Hi,

I am trying to captured from camera to 2 video files with different resolution using tee plugins.
The pipeline can work but sometimes it record to 0 bytes video files with ERROR: Internal data flow error.

I also enabled log to see what happen with the pipeline.
Not negotiated happen makes the pipeline cannot change from READY to PLAYING state. It change from READY->PAUSED->NULL instead.

Can someone show me what wrong with it because it is sometimes happened. Not always?
Reply | Threaded
Open this post in threaded view
|

Re: Not negotiated error sometimes happens

Sebastian Dröge-3
On Sun, 2016-09-25 at 23:16 -0700, Tran Tu wrote:

> Hi,
>
> I am trying to captured from camera to 2 video files with different
> resolution using tee plugins.
> The pipeline can work but sometimes it record to 0 bytes video files with
> ERROR: Internal data flow error.
>
> I also enabled log to see what happen with the pipeline.
> Not negotiated happen makes the pipeline cannot change from READY to PLAYING
> state. It change from READY->PAUSED->NULL instead.
>
> Can someone show me what wrong with it because it is sometimes happened. Not
> always?
What is your exact pipeline that you're using, what are the 2 input
video files (container, codec, ...)?

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (949 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Not negotiated error sometimes happens

Tran Tu
Hi Sebastian,

   /* Capture plugin */
   Camerasrc = gst_element_factory_make("imxv4l2src", "camerasource");

   /* Video1 queue for HD resolution */
    Queue1 = gst_element_factory_make("queue", "queue1");
    EncodePlugin1 = gst_element_factory_make("vpuenc", "EncodePlugin1");
    Parsing1 = gst_element_factory_make("h264parse", "Parsing1");
    MuxPlugin1 = gst_element_factory_make("matroskamux", "MuxPlugin1");
    Filesink1 = gst_element_factory_make("filesink", "filesink1");

    /* Video2 queue for WVGA resolution */
    Queue2 = gst_element_factory_make("queue", "Queue2");
    VideoResize = gst_element_factory_make("imxvideoconvert_ipu", NULL);
    EncodePlugin2 = gst_element_factory_make("imxvpuenc_h264", "encode2");
    Parsing2 = gst_element_factory_make("h264parse", "Parsing2");
    MuxPlugin2 = gst_element_factory_make("matroskamux", "mux2");
    Filesink2 = gst_element_factory_make("filesink", "filesink2");

    /* Link all elements that can be automatically linked because they have "Always" pads */
    gst_bin_add_many(GST_BIN(RecordPipeline), Camerasrc, Filter, tee, Queue1, EncodePlugin1,
                     Parsing1, MuxPlugin1, Filesink1, Queue2, VideoResize, Filter2, EncodePlugin2, Parsing2,
                     MuxPlugin2, Filesink2, NULL);

    if (gst_element_link_many(Camerasrc, Filter, tee, NULL) != TRUE)
    {
        g_printerr("Elements could not be linked1.\n");
    }

    if (gst_element_link_many(Queue2, VideoResize, Filter2, EncodePlugin2, Parsing2, MuxPlugin2, Filesink2,
                              NULL) != TRUE)
    {
        g_printerr("Elements could not be linked3.\n");
        gst_object_unref(RecordPipeline);
    }

    if (gst_element_link_many(Queue1, EncodePlugin1, Parsing1, MuxPlugin1, Filesink1, NULL) != TRUE)
    {
        g_printerr("Elements could not be linked2.\n");
        gst_object_unref(RecordPipeline);
    }

    /* Manually link the Tee, which has "Request" pads */
    tee_src_pad_template = gst_element_class_get_pad_template(GST_ELEMENT_GET_CLASS(tee),  "src_%u");

    tee_queue1_pad = gst_element_request_pad(tee, tee_src_pad_template, NULL, NULL);
    queue_video1_pad = gst_element_get_static_pad(Queue1, "sink");

    tee_queue2_pad = gst_element_request_pad(tee, tee_src_pad_template, NULL, NULL);
    queue_video2_pad = gst_element_get_static_pad(Queue2, "sink");

    if ((gst_pad_link(tee_queue2_pad, queue_video2_pad) != GST_PAD_LINK_OK)
            || (gst_pad_link(tee_queue1_pad, queue_video1_pad) != GST_PAD_LINK_OK))
    {
        g_printerr("Tee could not be linked.\n");
        gst_object_unref(RecordPipeline);
    }
    gst_object_unref(queue_video2_pad);
    gst_object_unref(queue_video1_pad);

    /* Start playing the pipeline */
        gst_element_set_state(RecordPipeline, GST_STATE_PLAYING);
    /* Get bus for gstreamer pipeline */
    RecordBus = gst_pipeline_get_bus(GST_PIPELINE(RecordPipeline));

    /* Callback function for bus messages */
    gst_bus_add_watch(RecordBus, RecordBusCall, RecordLoop);
    gst_object_unref(RecordBus);

   This is the message log if I got 0 bytes recorded:

reamer-1.4.1/gst/gstelement.c:2233:_priv_gst_element_state_changed:<imxvideoconvert_ipu5> [00m notifying about state-changed NULL to READY (VOID_PENDING pending)
reamer-1.4.1/gst/gstbin.c:2673:gst_bin_change_state_func:<avcrecord-pipeline> [00m child 'imxvideoconvert_ipu5' changed state to 2(READY) successfully
reamer-1.4.1/gst/gstbin.c:2230:gst_bin_element_set_state:<imxvideoconvert_ipu5> [00m current READY pending VOID_PENDING, desired next PAUSED
reamer-1.4.1/gst/gstelement.c:2328:gst_element_continue_state:<imxvideoconvert_ipu5> [00m completed state change to PAUSED
reamer-1.4.1/gst/gstelement.c:2233:_priv_gst_element_state_changed:<imxvideoconvert_ipu5> [00m notifying about state-changed READY to PAUSED (VOID_PENDING pending)
reamer-1.4.1/gst/gstbin.c:2673:gst_bin_change_state_func:<avcrecord-pipeline> [00m child 'imxvideoconvert_ipu5' changed state to 3(PAUSED) successfully
mer-1.4.1/libs/gst/base/gstbasetransform.c:2138:gst_base_transform_handle_buffer:<imxvideoconvert_ipu5> [00m warning: not negotiated
mer-1.4.1/libs/gst/base/gstbasetransform.c:2138:gst_base_transform_handle_buffer:<imxvideoconvert_ipu5> [00m warning: not negotiated
gstreamer-1.4.1/gst/gstelement.c:1835:gst_element_message_full:<imxvideoconvert_ipu5> [00m posting message: not negotiated
gstreamer-1.4.1/gst/gstelement.c:1858:gst_element_message_full:<imxvideoconvert_ipu5> [00m posted warning message: not negotiated
reamer-1.4.1/gst/gstbin.c:2230:gst_bin_element_set_state:<imxvideoconvert_ipu5> [00m current PAUSED pending VOID_PENDING, desired next NULL
reamer-1.4.1/gst/gstelement.c:2303:gst_element_continue_state:<imxvideoconvert_ipu5> [00m committing state from PAUSED to READY, pending NULL, next NULL
reamer-1.4.1/gst/gstelement.c:2233:_priv_gst_element_state_changed:<imxvideoconvert_ipu5> [00m notifying about state-changed PAUSED to READY (NULL pending)
reamer-1.4.1/gst/gstelement.c:2310:gst_element_continue_state:<imxvideoconvert_ipu5> [00m continue state change READY to NULL, final NULL
Sebastian Dröge-3 wrote
On Sun, 2016-09-25 at 23:16 -0700, Tran Tu wrote:
> Hi,
>
> I am trying to captured from camera to 2 video files with different
> resolution using tee plugins.
> The pipeline can work but sometimes it record to 0 bytes video files with
> ERROR: Internal data flow error.
>
> I also enabled log to see what happen with the pipeline.
> Not negotiated happen makes the pipeline cannot change from READY to PLAYING
> state. It change from READY->PAUSED->NULL instead.
>
> Can someone show me what wrong with it because it is sometimes happened. Not
> always?

What is your exact pipeline that you're using, what are the 2 input
video files (container, codec, ...)?

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


signature.asc (949 bytes) <http://gstreamer-devel.966125.n4.nabble.com/attachment/4679777/0/signature.asc>
Sebastian Dröge-3 wrote
On Sun, 2016-09-25 at 23:16 -0700, Tran Tu wrote:
> Hi,
>
> I am trying to captured from camera to 2 video files with different
> resolution using tee plugins.
> The pipeline can work but sometimes it record to 0 bytes video files with
> ERROR: Internal data flow error.
>
> I also enabled log to see what happen with the pipeline.
> Not negotiated happen makes the pipeline cannot change from READY to PLAYING
> state. It change from READY->PAUSED->NULL instead.
>
> Can someone show me what wrong with it because it is sometimes happened. Not
> always?

What is your exact pipeline that you're using, what are the 2 input
video files (container, codec, ...)?

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


signature.asc (949 bytes) <http://gstreamer-devel.966125.n4.nabble.com/attachment/4679777/0/signature.asc>
Sebastian Dröge-3 wrote
On Sun, 2016-09-25 at 23:16 -0700, Tran Tu wrote:
> Hi,
>
> I am trying to captured from camera to 2 video files with different
> resolution using tee plugins.
> The pipeline can work but sometimes it record to 0 bytes video files with
> ERROR: Internal data flow error.
>
> I also enabled log to see what happen with the pipeline.
> Not negotiated happen makes the pipeline cannot change from READY to PLAYING
> state. It change from READY->PAUSED->NULL instead.
>
> Can someone show me what wrong with it because it is sometimes happened. Not
> always?

What is your exact pipeline that you're using, what are the 2 input
video files (container, codec, ...)?

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


signature.asc (949 bytes) <http://gstreamer-devel.966125.n4.nabble.com/attachment/4679777/0/signature.asc>
Sebastian Dröge-3 wrote
On Sun, 2016-09-25 at 23:16 -0700, Tran Tu wrote:
> Hi,
>
> I am trying to captured from camera to 2 video files with different
> resolution using tee plugins.
> The pipeline can work but sometimes it record to 0 bytes video files with
> ERROR: Internal data flow error.
>
> I also enabled log to see what happen with the pipeline.
> Not negotiated happen makes the pipeline cannot change from READY to PLAYING
> state. It change from READY->PAUSED->NULL instead.
>
> Can someone show me what wrong with it because it is sometimes happened. Not
> always?

What is your exact pipeline that you're using, what are the 2 input
video files (container, codec, ...)?

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


signature.asc (949 bytes) <http://gstreamer-devel.966125.n4.nabble.com/attachment/4679777/0/signature.asc>
Reply | Threaded
Open this post in threaded view
|

Re: Not negotiated error sometimes happens

Sebastian Dröge-3
On Mon, 2016-09-26 at 00:24 -0700, Tran Tu wrote:
> [...]
>
>    *This is the message log if I got 0 bytes recorded:*

Can you try with a more recent GStreamer version, e.g. 1.8? Also please
get a full debug log.

The problem is most likely that the source outputs sometimes something
that can be handled by both branches of the tee, sometimes only
something that can be handled by one of them. You probably want to add
another converter into the branch that does not have one yet.

--
Sebastian Dröge, Centricular Ltd · http://www.centricular.com
_______________________________________________
gstreamer-devel mailing list
[hidden email]
https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel

signature.asc (949 bytes) Download Attachment