我正在使用gstreamer-1.0
编写一个简单的应用程序,我希望将流经管道的缓冲区接收回应用程序。为此,我在管道末尾使用appsink
插件。
到目前为止,一切正常,但是当我想收到缓冲区时,我会收到这些错误
(app:31759):GLib-GObject-CRITICAL **:g_signal_emit_by_name:断言' G_TYPE_CHECK_INSTANCE(实例)'失败
和
(app:31759):GLib-GObject-WARNING **:带有无效(NULL)类指针的实例
这是我写的代码
typedef struct _AllElements
{
GstElement *pipeline;
...
GstElement *appsink;
} AllElements;
static void new_sample (AllElements *element)
{
GstSample *sample = NULL;
/* Retrieve the buffer */
g_signal_emit_by_name (element->appsink, "pull-sample", &sample,NULL);
if (sample)
{
g_print ("*");
gst_sample_unref (sample);
}
}
int main(int argc, char *argv[])
{
Allelemets element;
... // making and linking all the elements
g_object_set (G_OBJECT (element.appsink), "sync", TRUE, NULL);
g_object_set (element.appsink, "emit-signals", TRUE, NULL);
g_signal_connect (element.appsink, "new-sample", G_CALLBACK (new_sample), &element);
...
gst_element_set_state (element.pipeline, GST_STATE_PLAYING);
...
return 0;
}
有人可以帮我解决这个问题吗?谢谢大家!
答案 0 :(得分:2)
我找到了解决问题的方法。
我的功能错误签名
static GstFlowReturn new_sample (GstElement *appsink, AllElements *element)
现在我使用gst_base_sink_get_last_sample(GST_BASE_SINK(appsink));
来获取示例。