C 当主循环在Gstreamer中运行时,如何从控制台(stdin)读取并执行用户命令?

C 当主循环在Gstreamer中运行时,如何从控制台(stdin)读取并执行用户命令?,c,io,gstreamer,glib,C,Io,Gstreamer,Glib,我可以流式传输视频,但我也想从控制台(stdin)获取用户命令,并在流式传输视频时执行命令。例如,如果用户在命令行中输入文本“exit”,我希望它退出循环。我可以通过创建自己的线程来实现这一点,但在Gstreamer中必须有更聪明的方法 我使用fdsrc从stdin和fakesink读取命令,如下所示: 。。。 userInput=gst\u parse\u launch(“fdsrc!fakesink dump=true”,错误); gst元素设置状态(用户输入、gst状态播放); /*开始流

我可以流式传输视频,但我也想从控制台(stdin)获取用户命令,并在流式传输视频时执行命令。例如,如果用户在命令行中输入文本“exit”,我希望它退出循环。我可以通过创建自己的线程来实现这一点,但在Gstreamer中必须有更聪明的方法

我使用fdsrc从stdin和fakesink读取命令,如下所示:

。。。
userInput=gst\u parse\u launch(“fdsrc!fakesink dump=true”,错误);
gst元素设置状态(用户输入、gst状态播放);
/*开始流媒体。RTSP流的默认端口为8554*/
g_print(“流在rtsp://127.0.0.1:8554/test1\n”);
g_主循环运行(循环);
gst_object_unref(用户输入);
返回0;
...
但我不知道如何将用户输入的文本输入到函数中。我觉得我需要使用回调函数,但fdsrc或fakesink没有回调函数

当g_main_循环运行时,如何获取和处理用户输入的文本?

stdin
创建一个,并将其附加到您的
GMainLoop
。它将被添加到程序的主轮询循环中,并且每次在
stdin
上有输入时都会调用回调(由您提供)。只要GStreamer使用的是相同的
GMainLoop
,它们就应该一起运行,而不会相互阻塞,也不需要在单独的线程中显式运行GStreamer代码


有关使用
GIOChannel
接收和处理命令行命令的示例,请参见本要点:

您应该检查。请参阅设置
io\u stdin
部分。建议在线程中运行gstreamer功能。然后main可以从用户那里寻找输入,并设置线程可以检查的一些公共变量。