Virtual machine GStreamer演示deosn';t在虚拟机中工作(寻找简单示例)

Virtual machine GStreamer演示deosn';t在虚拟机中工作(寻找简单示例),virtual-machine,gstreamer,Virtual Machine,Gstreamer,我试图编写一个极其简单的GStreamer应用程序。不管它做什么,只要GStreamer做点什么。即使只是显示一些文本或简单的JPEG也可以 下面是我可以通过谷歌搜索找到的最好的例子(我添加了一些错误检查)。当我在Windows下运行的Linux虚拟机中运行它时,我看到以下控制台消息: libEGL警告:fd 4的pci id:80ee:beef,驱动程序(null) libEGL警告:DRI2:无法打开vboxvideo(搜索路径 /usr/lib/i386 linux gnu/dri:${O

我试图编写一个极其简单的GStreamer应用程序。不管它做什么,只要GStreamer做点什么。即使只是显示一些文本或简单的JPEG也可以

下面是我可以通过谷歌搜索找到的最好的例子(我添加了一些错误检查)。当我在Windows下运行的Linux虚拟机中运行它时,我看到以下控制台消息:

libEGL警告:fd 4的pci id:80ee:beef,驱动程序(null)

libEGL警告:DRI2:无法打开vboxvideo(搜索路径 /usr/lib/i386 linux gnu/dri:${ORIGIN}/dri:/usr/lib/dri)

谷歌搜索表明这是虚拟机内部3D渲染的错误。我找不到解决办法

那么,有人可以修复下面的代码,使其在VM中运行吗?我假设这意味着避免3D渲染,所以可能显示一个图像或一些文本?不需要播放视频,这只是在其他内容(必须在VM中运行)中使用GStreamer概念的简单证明

这是密码

void GstreamerPlayVideo()
{
      GstElement *pipeline;
      GstBus *bus;
      GstMessage *msg;
      int argc;
      GError *error = NULL;

      /* Initialize GStreamer */
      if (gst_init_check(&argc, NULL, &error) == TRUE)
      {

          /* Build the pipeline */
          // Change URL to test failure
          pipeline = gst_parse_launch ("bin uri=http://docs.gstreamer.com/media/sintel_trailer-480p.webm", &error);
////          pipeline = gst_parse_launch ("bin uri=http://tecfa.unige.ch/guides/x3d/www.web3d.org/x3d/content/examples/HelloWorld.gif", &error);

          if (pipeline != NULL)
          {
              /* Start playing */
              gst_element_set_state (pipeline, GST_STATE_PLAYING);

              /* wait until it's up and running or failed */
              if (gst_element_get_state (pipeline, NULL, NULL, -1) == GST_STATE_CHANGE_FAILURE)
              {
                 g_error ("GST failed to go into PLAYING state");
                 exit(1);
              }

              /* Wait until error or EOS */
              bus = gst_element_get_bus (pipeline);
              if (bus != NULL)
              {
                  msg = gst_bus_timed_pop_filtered (bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);

                  /* Parse message */
                  if (msg != NULL)
                  {
                    gchar *debug_info;

                    switch (GST_MESSAGE_TYPE (msg))
                    {
                      case GST_MESSAGE_ERROR:
                        gst_message_parse_error (msg, &error, &debug_info);
                        g_printerr ("Error received from element %s: %s\n", GST_OBJECT_NAME (msg->src), error->message);
                        g_printerr ("Debugging information: %s\n", debug_info ? debug_info : "none");
                        g_clear_error (&error);
                        g_free (debug_info);
                        break;

                      case GST_MESSAGE_EOS:
                        g_print ("End-Of-Stream reached.\n");
                        break;

                      default:
                        /* We should not reach here because we only asked for ERRORs and EOS */
                        g_printerr ("Unexpected message received.\n");
                        break;
                    }

                    gst_message_unref (msg);
                  }

                  /* Free resources */
                  gst_object_unref (bus);
                  gst_element_set_state (pipeline, GST_STATE_NULL);
                  gst_object_unref (pipeline);
              }
              else
              {
                    g_print ("GST get bus error: %s\n", error->message);
                    exit(1);
              }
          }
          else
          {
                g_print ("GST parse error: %s\n", error->message);
                exit(1);
          }
      }
      else
      {
            g_print ("GST init error: %s\n", error->message);
            exit(1);
      }
}   // GstreamerPlayVideo()

尝试在管道中手动指定视频接收器

videotestsrc!ximagesink

您的系统可能安装了一个EGL视频接收器插件作为主要视频插件。ximagesink似乎更有可能发挥作用

像这样:

//this line is where you're creating your pipeline
pipeline = gst_parse_launch ("videotestsrc ! ximagesink", &error);
我建议您先试用gst launch命令,以便了解管道语法、接收器和源是什么等。您可以运行的最简单测试如下(如果您安装了gstreamer 1.0,您可能有0.10),从命令行:

gst-launch-1.0 videotestsrc ! autovideosink

你能试着运行gst-launch-1.0吗?至少gst-launch-1.0——版本只是为了知道您使用的是哪个gstreamer。。什么是?对不起,我是Gstreamer n00b。你能详细说明一下吗?帮我编写代码?我的意思是,只要转到shell并键入:gst-launch-1.0 videotestsrc!ximagesking对于代码,为什么不尝试一些类似于它们也被移植(到较新的gstreamer)的东西呢?请接受我的道歉,因为我没有尽快回复。我病了。你能告诉我如何在上面的代码中实现你的解决方案吗?我想我们永远不会知道:-(