gstreamer为videotestsrc的“内部数据流错误”。

时间:2022-12-14 12:37:58

I am working on an app using gstreamer svgoverlay plugin. My hardware platform is AM335x starter kit and OS is Arago linux (ti provided). The gstreamer which is part of the root-fs does not have the svgoverlay plugin. So I replaced the gstreamer with packages from this repo.

我正在使用gstreamer svgoverlay插件开发一个应用程序。我的硬件平台是AM335x初学者工具包,操作系统是Arago linux (ti提供)。gstreamer是root-fs的一部分,它没有svgoverlay插件。所以我用这个repo的包替换了gstreamer。

A test pipline ("gst-launch-0.10 -v videotestsrc ! fbdevsink") worked without any issue in the original gstreamer. But with the new gstreamer, it fails with "Internal data flow error". This is the relevant section of the gstreamer debug output :

一个测试pipline(“gst-launch-0.10 -v videotestsrc !”在最初的gstreamer中没有任何问题。但是在新的gstreamer中,它失败于“内部数据流错误”。这是gstreamer调试输出的相关部分:

    0 [36mDEBUG  [00m [00;04m             default gstsegment.c:455:gst_segment_set_newsegment_full:[00m old segment was: 0xdcc00
    0:00:01.737060548 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00m            basesink gstbasesink.c:1455:gst_base_sink_configure_segment:<fbdevsink0>[00m configured NEWSEGMENT update 0, rate 1.000000, applied rate 1.000000, format GST_FORMAT_TIME, 0:00:00.000000000 -- 99:99:99.999999999, time 0:00:00.000000000, accum 0:00:00.000000000
    0:00:01.737182618 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00m            basesink gstbasesink.c:3120:gst_base_sink_queue_object_unlocked:<fbdevsink0>[00m now 0 prerolled items
    0:00:01.737243653 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00m            basesink gstbasesink.c:3173:gst_base_sink_queue_object_unlocked:<fbdevsink0>[00m need more preroll data 0 <= 0
    0:00:01.737335206 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00;01;31;41m            GST_PADS gstpad.c:5370:gst_pad_send_event:<fbdevsink0:sink>[00m sent event, result 1
    0:00:01.737396241 [336m 1751[00m    0xadf30 [37mLOG    [00m [00;01;31;41m            GST_PADS gstpad.c:5221:gst_pad_push_event:<videotestsrc0:src>[00m sent event to peerpad 0xd30d8, result 1
    0:00:01.737548829 [336m 1751[00m    0xadf30 [37mLOG    [00m [00;01;31;41m            GST_PADS gstpad.c:4683:gst_pad_push:<videotestsrc0:src>[00m Taking slow path
    0:00:01.737640382 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00;01;31;41m            GST_PADS gstpad.c:4207:gst_pad_chain_data_unchecked:<fbdevsink0:sink>[00m caps changed to 0xcd360 0xcd360
    0:00:01.737762452 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00;01;34m            GST_CAPS gstpad.c:2761:gst_pad_configure_sink:<fbdevsink0:sink>[00m caps 0xcd360 not accepted
    0:00:01.737854005 [336m 1751[00m    0xadf30 [37mLOG    [00m [00;01;42m          GST_BUFFER gstbuffer.c:195:gst_buffer_finalize:[00m finalize 0xdd270
    0:00:01.738067628 [336m 1751[00m    0xadf30 [37mLOG    [00m [00;01;35m      GST_SCHEDULING gstpad.c:4313:gst_pad_chain_data_unchecked:<fbdevsink0:sink>[00m pushing data but pad did not accept
    0:00:01.738159181 [336m 1751[00m    0xadf30 [32;01mINFO   [00m [00m             basesrc gstbasesrc.c:2511:gst_base_src_loop:<videotestsrc0>[00m pausing after gst_pad_push() = not-negotiated
    0:00:01.738220216 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00m             basesrc gstbasesrc.c:2537:gst_base_src_loop:<videotestsrc0>[00m pausing task, reason not-negotiated
    0:00:01.738281251 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00;01;31;41m            GST_PADS gstpad.c:5586:gst_pad_pause_task:<videotestsrc0:src>[00m pause task
    0:00:01.738342286 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00m                task gsttask.c:683:gst_task_set_state:<videotestsrc0:src>[00m Changing task 0xe1830 to state 2
    0:00:01.738464357 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00;01;34m           GST_EVENT gstevent.c:270:gst_event_new:[00m creating new event 0xe0600 eos 86
    0:00:01.738586427 [336m 1751[00m    0xadf30 [33;01mWARN   [00m [00m             basesrc gstbasesrc.c:2574:gst_base_src_loop:<videotestsrc0>[00m error: Internal data flow error.
    0:00:01.738647462 [336m 1751[00m    0xadf30 [33;01mWARN   [00m [00m             basesrc gstbasesrc.c:2574:gst_base_src_loop:<videotestsrc0>[00m error: streaming task paused, reason not-negotiated (-4)
    0:00:01.738739015 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00;01;37;41m         GST_MESSAGE gstelement.c:1834:gst_element_message_full:<videotestsrc0>[00m start
    0:00:01.738891603 [336m 1751[00m    0xadf30 [32;01mINFO   [00m [00;01;31;47m    GST_ERROR_SYSTEM gstelement.c:1865:gst_element_message_full:<videotestsrc0>[00m posting message: Internal data flow error.
    0:00:01.739044190 [336m 1751[00m    0xadf30 [37mLOG    [00m [00;01;37;41m         GST_MESSAGE gstmessage.c:184:gst_message_init:[00m new message 0x99588
    0:00:01.739105226 [336m 1751[00m    0xadf30 [37mLOG    [00m [00;01;37;41m         GST_MESSAGE gstmessage.c:270:gst_message_new_custom:[00m source videotestsrc0: creating new message 0x99588 error
    0:00:01.739196778 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00;43m             GST_BUS gstbus.c:307:gst_bus_post:<bus0>[00m [msg 0x99588] posting on bus, type error, 0xc8848 from source 0xda140
    0:00:01.739288331 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00;01m                 bin gstbin.c:3091:gst_bin_handle_message_func:<pipeline0>[00m [msg 0x99588] handling child videotestsrc0 message of type error
    0:00:01.739349366 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00;01m                 bin gstbin.c:3098:gst_bin_handle_message_func:<pipeline0>[00m got ERROR message, unlocking state change
    0:00:01.739440919 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00;01m                 bin gstbin.c:3381:gst_bin_handle_message_func:<pipeline0>[00m posting message upward
    0:00:01.739501954 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00;43m             GST_BUS gstbus.c:307:gst_bus_post:<bus1>[00m [msg 0x99588] posting on bus, type error, 0xc8848 from source 0xda140
    0:00:01.739562989 [336m 1751[00m    0xadf30 [36mDEBUG  [00m [00;43m             GST_BUS gstbus.c:337:gst_bus_post:<bus1>[00m [msg 0x99588] pushing on async queue
    0:00:01.739898683 [336m 1751[00m    0x16050 [37mLOG    [00m [00;43m             GST_BUS gstbus.c:494:gst_bus_timed_pop_filtered:<bus1>[00m have 2 messages
    0:00:01.740051270 [336m 1751[00m    0x16050 [36mDEBUG  [00m [00;43m             GST_BUS gstbus.c:498:gst_bus_timed_pop_filtered:<bus1>[00m got message 0x99340, state-changed, type mask is 4294967295
    0:00:01.740142823 [336m 1751[00m    0x16050 [36mDEBUG  [00m [00;43m             GST_BUS gstbus.c:759:gst_bus_source_dispatch:<bus1>[00m source 0xadef0 calling dispatch with 0x99340
    0:00:01.740264894 [336m 1751[00m    0x16050 [36mDEBUG  [00m [00;43m             GST_BUS gstbus.c:951:poll_func:[00m mainloop 0x85538 quit

I am new to gstreamer, so I am not sure what this error means. Can someone help me out.

我是gstreamer的新手,所以我不知道这个错误是什么意思。有人能帮我吗?

NB: I need to use "fbdevsink" because of this.

NB:我需要使用“fbdevsink”。

1 个解决方案

#1


3  

If you see a "streaming task paused, reason not-negotiated (-4)" then you've tried to link incompatible elements or some of the involved elements is not handling the caps correctly.

如果您看到一个“流任务暂停,原因不协商(-4)”,那么您尝试链接不兼容的元素,或者一些相关的元素没有正确地处理大写。

When using gst-launch, I would just do:

在使用gst-launch时,我只需要:

GST_DEBUG_DUMP_DOT_DIR=$PWD gst-launch-1.0 ...

and when it failed take the last generated *.dot file and render it

当它失败后,最后生成*。点文件并渲染它。

dot -Tsvg xxx.dot -o graph.svg

Open the svg and look at the connections and check where the caps are not negotiated. In your case I would get it is "fbdevsink".

打开svg并查看连接,并检查在哪些地方没有进行限制。在你的情况下,我会得到它是“fbdevsink”。

Finally when posting logs, use GST_DEBUG_NO_COLOR=1 to have logs without color codes.

最后,在发布日志时,使用GST_DEBUG_NO_COLOR=1来获得没有颜色代码的日志。

#1


3  

If you see a "streaming task paused, reason not-negotiated (-4)" then you've tried to link incompatible elements or some of the involved elements is not handling the caps correctly.

如果您看到一个“流任务暂停,原因不协商(-4)”,那么您尝试链接不兼容的元素,或者一些相关的元素没有正确地处理大写。

When using gst-launch, I would just do:

在使用gst-launch时,我只需要:

GST_DEBUG_DUMP_DOT_DIR=$PWD gst-launch-1.0 ...

and when it failed take the last generated *.dot file and render it

当它失败后,最后生成*。点文件并渲染它。

dot -Tsvg xxx.dot -o graph.svg

Open the svg and look at the connections and check where the caps are not negotiated. In your case I would get it is "fbdevsink".

打开svg并查看连接,并检查在哪些地方没有进行限制。在你的情况下,我会得到它是“fbdevsink”。

Finally when posting logs, use GST_DEBUG_NO_COLOR=1 to have logs without color codes.

最后,在发布日志时,使用GST_DEBUG_NO_COLOR=1来获得没有颜色代码的日志。