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

时间:2016-01-12 07:27:20

标签: c io gstreamer glib

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

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

...
userInput = gst_parse_launch("fdsrc ! fakesink dump=true", error);
gst_element_set_state (userInput, GST_STATE_PLAYING);
/* start streaming. the default port for RTSP streaming is 8554. */
g_print ("stream is ready at rtsp://127.0.0.1:8554/test1\n");
g_main_loop_run (loop);
gst_object_unref (userInput);
return 0;
...

但我不知道如何将用户输入的文本输入到函数中。我觉得我需要使用回调函数,但fdsrc或fakesink没有回调函数。

如何在g_main_loop运行时获取并处理用户输入的文本?

1 个答案:

答案 0 :(得分:1)

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

有关使用GIOChannel接收和处理命令行命令的示例,请参见以下要点:https://gist.github.com/bert/260094/c099d4535694d91992a87e04864a3c05134afa3e