我已阅读了大部分关于Gstreamer以及如何使用它的文档,但很少有关于将Gstreamer和其他非gstreamer相关的线程组合在一起的解释。使用带有线程的Gstreamer
所以我试图创建一个简单的应用程序,其中一个线程我有一个简单的管道,源元素直接连接到接收器元素。我正在使用“pthread”库来管理线程。然后,我创建另一个pthread来处理程序的其他部分。
为此,我使用此示例(http://www.thegeekstuff.com/2012/04/create-threads-in-linux/?utm_source=feedburner)。
下面是程序:
#include<gst/gst.h>
#include<stdio.h>
#include<string.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
pthread_t tid[2];
void* doSomeThing(void *arg)
{
GMainLoop *loop;
printf("\n Completed. \n");
GstElement *pipeline;
loop = g_main_loop_new (NULL, FALSE);
pipeline = gst_parse_launch ("gst-launch v4l2src ! xvimagesink", NULL);
gst_element_set_state (pipeline, GST_STATE_PLAYING);
g_main_loop_run (loop);
gst_element_set_state (pipeline, GST_STATE_NULL);
gst_object_unref (GST_OBJECT (pipeline));
g_main_loop_unref (loop);
return NULL;
}
int main(int argc, char *argv[])
{
gst_init (&argc, &argv);
pthread_create(&(tid[0]), NULL, &doSomeThing, NULL);
return 0;
}
所以我编译。没有错误。当我运行它时,它不会打开任何窗口,也不会开始流式传输或任何其他内容。我有这种感觉,这是我创建我的管道线程的方式。所以最重要的是我对Gstreamer没有很好的了解,任何帮助都非常感谢。
(请注意,在前面的代码中,我省略了第二个线程的创建,因为问题是,流水线没有流。)
我没有pthreads或gstreamer的经验,或者线程在unix盒子上的工作方式,但我会指出你的应用程序直接通过主要方法并退出。我会下注pthreads是后台线程,并在主线程终止后立即终止。您必须阻止该主要方法并等待一切完成。 – Will
也没有理由为您的GStreamer管道添加额外的线程。 GStreamer在内部产生自己的线程,其API大部分都是非阻塞的。 –
@Florian Zwoch ..是的,我已经尝试在同一个线程上运行管道,但它不会从那里继续。据我所知,这是封锁。我看到我没有得到任何答案,所以我的问题真的很愚蠢,第一次没有人知道答案。至少有人能指出我将Gstreamer与其他非Gstreamer相关的线程结合起来的良好文档的方向吗? – user3521388