首页 > 解决方案 > 使用 Gstreamer1.0 GTK+3.0 显示视频

问题描述

我无法在 GtkWidget 中正确插入视频。告诉我我做错了什么?视频在一个新窗口中打开,而不是在我发送的那个窗口中。视频应在该窗口的背景中打开。

Libvlc 库的显示方式相同,可能问题出在操作系统上,我在 Ubuntu 17.10 上编写

应用结果图片

#include <iostream>

#include <gtk/gtk.h>

#include <gst/gst.h>
#include <gdk/gdkx.h>

using namespace std;


GstElement *pipeline, *src, *sink, *b;

int main(int argc, char *argv[]) {
cout << "!!!Hello World!!!" << endl; // prints !!!Hello World!!!

GtkWidget *window;
 gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

  //gtk_container_border_width (GTK_CONTAINER (window), 10);
  GdkColor color;

  gdk_color_parse ("black", &color);

  gtk_widget_modify_bg ( window, GTK_STATE_NORMAL, &color);
  gtk_window_fullscreen((GtkWindow*)window);
  std::string path = std::string("file:///home/stas/eclipse-workspace/TestGTK/0.mp4");


  gst_init (&argc, &argv);




      src = gst_element_factory_make ("videotestsrc", NULL);
      sink = gst_element_factory_make ("gtksink", NULL);
      b = gst_element_factory_make("playbin", "playbin");

      g_object_set(b, "uri", path.c_str());


      gst_bin_add_many (GST_BIN (b), src, sink, NULL);
      gst_element_link (src, sink);

      GtkWidget *area;
      g_object_get (sink, "widget", &area, NULL);
      gtk_container_add (GTK_CONTAINER (window), area);

      gtk_widget_realize(area);

      gtk_widget_show_all (window);
      gst_element_set_state (b, GST_STATE_PLAYING);

      gtk_widget_show (window);

      gtk_main ();
return 0;
}

标签: c++gtkgstreamer

解决方案


推荐阅读