本项目实现了一个基于GTK和libvlc的视频播放器。使用GTK创建GUI界面,使用libvlc播放视频。用户可以通过选择视频文件,然后启动播放器来观看视频。
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/
文档学习地址:https://www.gtk.org/docs/
官网地址:https://www.gtk.org/
GTK是一种开源的跨平台图形用户界面(GUI)工具包。最初是为GNU计划设计的,现在被广泛地用于Linux和其他Unix-like操作系统的各种应用程序中。GTK提供了一组用于创建图形用户界面的功能库,包括窗口、按钮、标签、文本输入框等控件,以及用于渲染这些控件的绘图引擎。GTK还支持国际化和主题定制,可以让开发者创建符合用户期望和风格的应用程序界面。
在 Ubuntu 中安装最新的 GTK 依赖库的命令:
sudo apt-get update sudo 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 update sudo 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主循环。
#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; }
使用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 >
审核编辑:汤梓红
上一篇:【世界速看料】国芯科技:累计回购约177万股 占比0.74%
下一篇:最后一页
本项目实现了一个基于GTK和libvlc的视频播放器。使用GTK创建GUI界面,使用libvlc播放视频。用户可以通过选
国芯科技(SH688262,收盘价:57 47元)6月1日晚间发布公告称,截至2023年5月31日,公司通过上海证券交易所
相信目前很多小伙伴对于北京燕莎奥特莱斯都比较感兴趣,那么小搜今天在网上也是收集了一些与北京燕莎奥特莱
股价突破长期盘整:前30日在上下30%的幅度内整理,今日有效突破。资金流向数据:主力资金净流入183 89万元
早盘收盘,国内期货主力合约多数上涨。铁矿石涨近4%,棉花、纯碱涨超3%,甲醇、棉纱、花生、热卷、焦煤、沪
“海宁发布”微信公众号消息,6月1日0时01分接到群众报警,海宁市黄湾镇闸口村一临时工棚发生一起爆燃事故
近期,全国发热门诊就诊患者数量有所增加,检测显示部分为“二阳”患者。当前全国发热门诊诊疗情况如何...
原标题:【寻味中华丨名楼】大明湖畔超然楼半城湖色一楼璀璨中新社济南6月1日电 中新社记者赵晓李欣“...
曲阜市防山镇2023年城乡公益性岗位人员招聘公告(第一批)按照《曲阜市人民政府办公室〈关于印发曲阜市城乡
6月1日,我国南方地区进入主汛期。记者从水利部了解到,5月31日到6月4日,我国西南西北等地有一次强降雨过
你们好,最近小活发现有诸多的小伙伴们对于什么是职业价值观的特点,什么是职业价值观这个问题都颇为感兴趣
原标题:制止餐饮浪费非小事吃不完就倒掉,不好吃就不吃,多点些只为尝尝鲜……无论是居家生活中对剩余...
1、音乐会上,优美的歌声和动人的钢琴声可谓相得益彰。2、桂林的自然景观和人文景观相得益彰,相得益彰。3
导读1、规格:厚度为0 2-4mm,宽度为600-2000mm,钢板长度为1200-6000mm。2、牌号:Q195A
来为大家解答以上问题,金领冠价格汇总,金领冠价格很多人还不知道,现在让我们一起来看看吧!JD。COM目前
周三,美联储公布的最新褐皮书显示,最近几周美国经济出现降温迹象,就业和通胀略有放缓。尽管如此,美国经
1、你现在主要解决原材料和环保的问题,很麻烦,原材料涉及原产地。2、生产,加工,运输。3、环保现在抓得
1、《最新大学英语六级考试备考指南》是北京大学出版社出版的图书。2、作者是张清。文章到此就分享结束,希
随着惠州惠东环稔平半岛高速开启招标工作,总造价预算125 3亿元,全长约49 37km,每公里造价达到2 54亿元。
5月29日,打卡中国·读懂中国式现代化(辽宁篇)网络国际传播活动在沈阳启动。当天,活动采访团走进华晨宝...
公司土地开发业务具有单笔收入金额大、收入集中的特点。
宝宝吃什么鱼好,从食用安全的角度,无肌间刺的鱼类比较适合孩子食用,比如大黄鱼、三文鱼、带鱼等。从受污
近日,贵州省“人民满意的公务员”和“人民满意的公务员集体”表彰大会在贵阳举行,大会表彰了全省50名...
特斯拉、英伟达,离不开中国
突发!南京落户政策再放宽!住房公积金还商贷、支付房租细则出炉 ,商贷,南京,贷款额度,落户政策,住房公积
X 关闭
X 关闭