Gstreamer::g_信号的用法

Gstreamer::g_信号的用法,gstreamer,Gstreamer,我正在开发一个使用gstreamer播放H264转储的应用程序 管道是:appsrc-h264parse-ffdec_h264-ffmpegcolorspace-deinterlace-autovideosink 数据流是:从appsrc{使用signals:needdata}的拉模式 我想从应用程序中使用推送模式验证同一个应用程序:在文档中提到:我们需要调用“推送缓冲区”信号并发送缓冲区 我的代码片段是: gst_app_src_set_emit_signals(source, TRUE);

我正在开发一个使用gstreamer播放H264转储的应用程序

管道是:appsrc-h264parse-ffdec_h264-ffmpegcolorspace-deinterlace-autovideosink

数据流是:从appsrc{使用signals:needdata}的拉模式

我想从应用程序中使用推送模式验证同一个应用程序:在文档中提到:我们需要调用“推送缓冲区”信号并发送缓冲区

我的代码片段是:

gst_app_src_set_emit_signals(source, TRUE);
g_signal_connect (source, "push-buffer", G_CALLBACK (start_feed), source);
虽然创建了管道,但我没有得到任何回调:
start\u feed()

有谁能帮助我,appsrc的“推送”模式操作具体需要做什么。

根据:

使appsrc发出“新预滚”和“新缓冲区”信号。默认情况下,此选项处于禁用状态,因为当应用程序倾向于在拉模式下运行时,信号发射非常昂贵且不需要

因此,您可以尝试添加“新缓冲区”信号。“push buffer”是一个动作,所以附加一个信号处理程序不会做任何事情,因为它是当您有数据时应该调用的东西,而不是调用回调的东西


根据您的
start\u feed
所做的工作,您可能也在寻找“需要数据”信号(可能是管道需要更多数据时发出的信号)。

如文件所示:启用信号gst\u app\u src\u set\u emit\u signals(source,TRUE);并添加信号:新缓冲区为:g_信号_连接(源,“新缓冲区”,g_回调(启动_馈送),源);但这会导致一个错误:没有名为:new buffer的信号。如果我使用的是“需要数据”,那么它与gstreamer提取数据一样好。我的应用程序在直播环境中工作,数据将更好地推送,而不是压缩pull@Kranti如果你只是在推送数据,为什么还要等待信号呢?你能不能只要有数据就给它?是的,没错。但我有一个疑问——我是否可以创建一些线程并继续调用appsrc_push_buffer()?因为,从文档中可以看出,pppsrc需要很少的信号来推送数据——我不知道是否直接推送数据而不等待来自管道的任何CBs。。对不起,我是新手。。我不知道gstreamer的很多方面。。谢谢你的帮助。。