我可以流式传输视频,但是我也想从控制台(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运行时,如何获取和处理用户输入的文本?
最佳答案
为GIOChannel
创建stdin
并将其附加到您的GMainLoop
。它将添加到程序的主轮询循环中,并且每次stdin
上的输入可用时,都会调用一个回调(由您提供)。只要GStreamer使用相同的GMainLoop
,它们就应该一起运行而不会互相阻塞,也不需要您在单独的线程中显式运行GStreamer代码。
有关使用GIOChannel
接收和处理命令行命令的示例,请参见以下要点:https://gist.github.com/bert/260094/c099d4535694d91992a87e04864a3c05134afa3e