c++ - 使用 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;
}
解决方案
推荐阅读
- apache-spark - 访问 spark keyvaluegroupeddataset 中的每个组
- css - Flask,CSS文件未在路线上注册
- python - 按相关字段值分组查询集
- javascript - NPM:找不到模块'../lib/utils/unsupported.js'
- python - 为什么我无法使用 NumPy 获得任何 3D 绘图输出?
- java - 从 C# 执行一个 .jar 文件,但它在错误的位置生成文件
- php - symfony assetic:dump - 警告:“继续”目标开关等同于“中断”。您的意思是使用“继续 2”吗?(UnitOfWork.php)
- javascript - 在 HTML 代码中处理传递 ISO 日期的最佳方法是什么?
- javascript - 查找和更改 Google 文件所有者
- javascript - 保留@typescript-eslint/require-await,但豁免个别实例?