Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt gstreamer-1.0通过GUI停止和启动记录管道_Qt_Gstreamer 1.0 - Fatal编程技术网

Qt gstreamer-1.0通过GUI停止和启动记录管道

Qt gstreamer-1.0通过GUI停止和启动记录管道,qt,gstreamer-1.0,Qt,Gstreamer 1.0,我正在尝试基于gstreamer框架为我自己的定制板编写简单的录像机,该定制板使用ARM处理器和Wayland+Qt作为窗口子系统。 我已经用rec_start slot和rec_stop public方法创建了类RecordBin: void RecordBin::rec_start () { /* Set pipeline to the PLAYING state */ gst_element_set_state (record_pipeline, GST_STATE_PLAYING

我正在尝试基于gstreamer框架为我自己的定制板编写简单的录像机,该定制板使用ARM处理器和Wayland+Qt作为窗口子系统。 我已经用rec_start slot和rec_stop public方法创建了类RecordBin:

void RecordBin::rec_start ()
{
  /* Set pipeline to the PLAYING state */
  gst_element_set_state (record_pipeline, GST_STATE_PLAYING);
  g_print ("setting playing state\n");

  /* Start main loop context */
  g_main_loop_run (rec_loop);
}

void RecordBin::rec_stop ()
{
  /* Set pipeline to the NULL state */
  change_ret = gst_element_set_state (record_pipeline, GST_STATE_NULL);

  /* Quit from main loop context */
  g_main_loop_quit (rec_loop);
}
这是我在主窗口中单击播放/停止按钮的位置:

void MainWindow::on_recordButton_clicked ()
{
  if (!is_recording) {
    if (window_is_opened == false) {
      cout << "start recording" << endl;

      /* Start recording */
      window_is_opened = true;
      emit start_recording ();
    } else {
      cout << "playing window already opened" << endl;
    }
  } else {
    cout << "recording reset" << endl;

    /* Stop recording */
    record_bin->rec_stop ();
    window_is_opened = false;
  }
}
void主窗口::在记录按钮上单击()
{
如果(!正在录制){
如果(窗口已打开==false){

cout
gst\u element\u set\u state()(必须使用EOS并捕获另一个事件,该事件确认
filesink
已获得该EOS)。但是NULL对玩家来说可以正常工作

总的来说,我会去掉glib主循环。您可以使用
gst\u bus\u set\u sync\u handler()
设置回调。在回调中,向
RecordBin
发出一个Qt信号。
RecordBin
将是一个
QObject
对象,它位于主Qt线程中。处理到达的
GstMessage*