写点什么

在 (Linux)ubuntu 下通过 GTK 调用 libvlc 开发视频播放器

作者:DS小龙哥
  • 2024-07-03
    重庆
  • 本文字数:2785 字

    阅读完需:约 9 分钟

一、项目介绍

本项目实现了一个基于 GTK 和 libvlc 的视频播放器。使用 GTK 创建 GUI 界面,使用 libvlc 播放视频。用户可以通过选择视频文件,然后启动播放器来观看视频。



二、VLC 介绍

VLC 是一款自由、开放源代码的跨平台媒体播放器,支持播放几乎所有常见的音频和视频格式。最初于 2001 年由法国学生开发,现在已经成为了一个非常受欢迎的媒体播放器,在 Windows、macOS、Linux 等多个操作系统上都可用。


libvlc 是 VLC media player 使用的核心库之一。提供了一组应用程序接口(API),可以让开发人员轻松地将类似于 VLC 的媒体播放功能嵌入到他们自己的应用程序中。libvlc 可以与多种编程语言和框架(如 C、C++、Python、Java、.NET 等)集成,因此被广泛应用于各种媒体相关的项目中。


VLC 是一个独立的媒体播放器软件,而 libvlc 是 VLC media player 使用的核心库之一,可以方便地嵌入到其他应用程序中,以实现类似于 VLC 的媒体播放功能。


VLC 软件下载(3.X)https://www.videolan.org/vlc/


libVLC 最新 4.0 官网: https://nightlies.videolan.org/

三、GTK 介绍

文档学习地址:https://www.gtk.org/docs/


官网地址:https://www.gtk.org/


GTK 是一种开源的跨平台图形用户界面(GUI)工具包。最初是为 GNU 计划设计的,现在被广泛地用于 Linux 和其他 Unix-like 操作系统的各种应用程序中。GTK 提供了一组用于创建图形用户界面的功能库,包括窗口、按钮、标签、文本输入框等控件,以及用于渲染这些控件的绘图引擎。GTK 还支持国际化和主题定制,可以让开发者创建符合用户期望和风格的应用程序界面。


在 Ubuntu 中安装最新的 GTK 依赖库的命令:


sudo apt-get updatesudo apt-get install libgtk-3-dev
复制代码


这个命令将会安装 GTK3 库的开发文件和依赖库。如果需要在程序中使用 GTK2 库,则需要安装 libgtk2.0-dev 包。除此之外,还可以安装一些其他的 GTK 扩展包,如 GStreamer、WebKit 等。


如果要编译一个基于 GTK 的程序,可以使用 gcc 或 g++ 来进行编译,同时需要链接 GTK 库。假设源代码文件为 example.c,编译命令可以如下:


gcc -o example example.c `pkg-config --cflags --libs gtk+-3.0`
复制代码


其中,pkg-config 是一个用来管理编译时的依赖库的工具。--cflags 和 --libs 分别是输出 GTK 库的头文件路径和链接库路径, 包含了命令行返回的路径。pkg-config --cflags --libs gtk+-3.0` 就是获取编译 GTK 程序时需要的参数。

四、设计思路

通过 GTK 调用 libvlc 来实现视频播放器,需要执行以下步骤:


(1)下载和安装 libvlc 和相关依赖库,可以使用 apt-get 或者源码编译的方式安装。


sudo apt-get updatesudo apt-get install libvlc-dev libgtk-3-dev
复制代码


libvlc-dev 是 libvlc 的开发库,包括头文件和链接库;libgtk-3-dev 是 GTK 库的开发库,也包括头文件和链接库。通过安装这两个开发库,就可以在 Ubuntu 下进行开发基于 GTK 和 libvlc 的视频播放器了。


(2)在 GTK 程序中引入 libvlc 的头文件和库文件,以及 GTK 的头文件和库文件:


#include <gtk/gtk.h>#include <vlc/vlc.h>
复制代码


(3)创建 GTK 窗口和控件:


GtkWidget *window;GtkWidget *video_widget;GtkBuilder *builder;
复制代码


GtkBuilder 用于动态加载 UI 文件,可以通过 glade 工具创建 UI 文件,然后在程序中使用 GtkBuilder 加载 UI 文件。video_widget 是用于显示视频的 GTK 控件。


(4)初始化 libvlc,并创建 libvlc_media_player 对象和 libvlc_media 对象:


libvlc_instance_t *vlc_instance;libvlc_media_t *media;libvlc_media_player_t *media_player;// ...vlc_instance = libvlc_new(0, NULL);media = libvlc_media_new_path(vlc_instance, "/path/to/video.mp4");media_player = libvlc_media_player_new_from_media(media);libvlc_media_player_set_xwindow(media_player, GDK_WINDOW_XID(gtk_widget_get_window(video_widget)));libvlc_media_player_play(media_player);// ...
复制代码


第三行代码使用 libvlc_media_new_path()函数创建一个 libvlc_media 对象,用于表示要播放的视频文件。第四行代码使用 libvlc_media_player_new_from_media()函数创建一个 libvlc_media_player 对象,用于播放视频。第五行代码使用 libvlc_media_player_set_xwindow()函数将 video_widget 的 XID 绑定到 libvlc_media_player 对象中,从而能够将视频显示在 video_widget 中。第六行代码使用 libvlc_media_player_play()函数开始播放视频。


(5)在 GTK 窗口中添加视频控件,并启动 GTK 主循环:


builder = gtk_builder_new_from_file("ui.glade");window = GTK_WIDGET(gtk_builder_get_object(builder, "main_window"));video_widget = GTK_WIDGET(gtk_builder_get_object(builder, "video_widget"));// ...gtk_container_add(GTK_CONTAINER(window), video_widget);gtk_widget_show_all(window);gtk_main();
复制代码


第一行代码通过 GtkBuilder 加载 UI 文件,并获取 main_window 和 video_widget 对象。第三行代码将 video_widget 添加到 window 中,第四行代码显示窗口和控件,最后一行代码启动 GTK 主循环。

五、完整的设计代码

【1】main.c 代码

#include <gtk/gtk.h>#include <vlc/vlc.h>
int main(int argc, char *argv[]){ GtkWidget *window; GtkWidget *video_widget; GtkBuilder *builder; libvlc_instance_t *vlc_instance; libvlc_media_t *media; libvlc_media_player_t *media_player;
gtk_init(&argc, &argv);
builder = gtk_builder_new_from_file("ui.glade"); window = GTK_WIDGET(gtk_builder_get_object(builder, "main_window")); video_widget = GTK_WIDGET(gtk_builder_get_object(builder, "video_widget"));
vlc_instance = libvlc_new(0, NULL); media = libvlc_media_new_path(vlc_instance, "/path/to/video.mp4"); media_player = libvlc_media_player_new_from_media(media); libvlc_media_player_set_xwindow(media_player, GDK_WINDOW_XID(gtk_widget_get_window(video_widget))); libvlc_media_player_play(media_player);
gtk_container_add(GTK_CONTAINER(window), video_widget); gtk_widget_show_all(window); gtk_main();
libvlc_media_player_stop(media_player); libvlc_media_player_release(media_player); libvlc_release(vlc_instance);
return 0;}
复制代码

【2】ui.glade 代码

使用 glade 工具创建 UI 文件:


<?xml version="1.0" encoding="UTF-8"?><!-- Generated with glade 3.22.1 --><interface>  <requires lib="gtk+" version="3.20"/>  <object class="GtkWindow" id="main_window">    <property name="can_focus">False</property>    <child>      <object class="GtkDrawingArea" id="video_widget">        <property name="can_focus">False</property>      </object>    </child>  </object></interface>
复制代码


发布于: 刚刚阅读数: 4
用户头像

DS小龙哥

关注

微信公众号:DS小龙哥嵌入式技术资讯 2022-01-06 加入

所有项目文章对应的工程源码,都可以在我的微信公众号:《DS小龙哥嵌入式技术资讯》 里下载。

评论

发布
暂无评论
在(Linux)ubuntu下通过GTK调用libvlc开发视频播放器_7月月更_DS小龙哥_InfoQ写作社区