0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

DS小龙哥-嵌入式技术 ? 来源:DS小龙哥-嵌入式技术 ? 作者:DS小龙哥-嵌入式技 ? 2023-06-01 15:42 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

一、项目介绍

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

image-20230601113711114

image-20230601113645550

二、VLC介绍

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

libvlc是VLC media player使用的核心库之一。提供了一组应用程序接口(API),可以让开发人员轻松地将类似于VLC的媒体播放功能嵌入到他们自己的应用程序中。libvlc可以与多种编程语言和框架(如C、C++PythonJava、.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 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主循环。

五、完整的设计代码

【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 >

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5161

    文章

    19783

    浏览量

    319607
  • Linux
    +关注

    关注

    88

    文章

    11535

    浏览量

    214851
  • Ubuntu
    +关注

    关注

    5

    文章

    598

    浏览量

    31654
  • GUI
    GUI
    +关注

    关注

    3

    文章

    684

    浏览量

    41536
  • 视频播放器
    +关注

    关注

    0

    文章

    33

    浏览量

    12082
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Made with KiCad(135):Echo - 开源的音乐播放器

    “? Echo 是一个开源硬件平台,专为音乐播放器设计。该项目的目标是开发一款基于开源软件并采用开源设计的高品质音乐播放器。 ” ? Made with KiCad 系列将支持新的展示方式。直接将以
    的头像 发表于 07-16 11:17 ?2194次阅读
    Made with KiCad(135):Echo - 开源的音乐<b class='flag-5'>播放器</b>

    恒讯科技分析:Ubuntu云服务数据共享高效方案

    在当今云计算时代,企业对于数据共享的需求日益增长,尤其是使用Ubuntu云服务的场景,如何实现高效、安全的数据共享成为关键问题。本文将为您详细介绍几种主流的
    的头像 发表于 07-09 21:40 ?280次阅读

    Debian和Ubuntu哪个好一些?

    Linux发行版世界中,Debian与Ubuntu长期占据服务开发者生态的核心地位。前者以稳定性和纯粹开源理念著称,后者则凭借易用性与
    的头像 发表于 05-07 10:58 ?430次阅读

    Made with KiCad:Tangara 便携式音乐播放器

    、3D 及 BOM,查询设计中器件、走线、焊盘的属性详情。还可以原理图中与AI小助手互动,帮您更高效地学习设计细节: 概览 Tangara 是一款便携式音乐播放器。它通过3.5毫米耳机插孔或
    发表于 04-16 14:01

    BEM移动端开发中的应用案例

    实时视频播放器项目 移动端开发中,实时视频播放器是一个常见的功能组件。
    的头像 发表于 02-12 17:13 ?565次阅读

    蛇年焕新,数字标牌播放器点亮新春营销

    春节期间,商场成为人们欢聚、购物的热门场所。商场入口处,大型数字标牌展示着精心制作的新春广告,高清画质将喜庆氛围完美呈现,流畅的切换效果瞬间将顾客带入热闹的春节气氛中。 借助数字标牌播放器
    的头像 发表于 01-24 11:26 ?436次阅读
    蛇年焕新,数字标牌<b class='flag-5'>播放器</b>点亮新春营销

    毕业设计竞赛选题推荐 | 嵌入式Linux应用之音乐播放器项目实战(含文档及源码)

    提升了效率和心情。嵌入式Linux开发的音乐播放器,凭借其高效能与低能耗的特点,便携设备、智能家电以及车载系统等领域中展现出独特的优势。它不仅能够提供高品质的音乐
    的头像 发表于 12-23 16:50 ?1034次阅读
    毕业设计竞赛选题推荐 | 嵌入式<b class='flag-5'>Linux</b>应用之音乐<b class='flag-5'>播放器</b>项目实战(含文档及源码)

    海贝R1便携音乐播放器开箱

    作为一个爱听音乐打发时间的玩家,我已经习惯随身携带一款小巧轻便的音乐播放器,从早期的CD播放器到现在的数码播放器,它总能在不经意间中给我带来简单的快乐。不管是逛街等人的时候,还是工作压力大的时候
    的头像 发表于 12-09 09:40 ?1083次阅读
    海贝R1便携音乐<b class='flag-5'>播放器</b>开箱

    深妙科技 室内外LED电源、LED屏多媒体播放器和二合一视频处理器维修方法

    ?关于室内外LED电源、LED屏多媒体播放器和二合一视频处理器的维修,您可以考虑以下几个方面: 1. 常见问题排查 LED电源 检查电源是否正常供电,使用万用表测量输出电压是否稳定 检查接线是否松动
    的头像 发表于 12-05 11:33 ?846次阅读
    深妙科技 室内外LED电源、LED屏多媒体<b class='flag-5'>播放器</b>和二合一<b class='flag-5'>视频处理器</b>维修方法

    变速播放器1和2的区别

    的区别。 变速播放器通常允许用户调整播放速度,以适应不同的观看或学习需求。这类播放器可能具备以下功能: 变速播放 :用户可以根据需要加快或减慢播放
    的头像 发表于 10-14 09:48 ?740次阅读

    步步高AB915D DVD播放器维修图纸

    步步高AB915D DVD播放器采用ZIVA-4.1芯片方案
    发表于 09-29 10:18 ?1次下载

    为什么好的播放器还要配解码

    好的播放器之所以需要配备解码,是因为音频和视频文件的编码和解码是一个复杂的过程,涉及到多种技术和标准。解码的作用是将压缩的音频和视频数据
    的头像 发表于 09-23 18:02 ?3596次阅读

    数字播放器和解码

    数字播放器和解码的组合能够提供更优质的音频体验。数字播放器负责处理和传输音频数据,而解码则负责将这些数据转换为高质量的模拟信号。它们的配合可以确保你听到的音频既清晰又真实。
    的头像 发表于 09-06 17:35 ?2408次阅读
    数字<b class='flag-5'>播放器</b>和解码<b class='flag-5'>器</b>

    【北京迅为】《stm32mp157开发板嵌入式linux开发指南》第五章 Ubuntu使用apt-get下载

    【北京迅为】《stm32mp157开发板嵌入式linux开发指南》第五章 Ubuntu使用apt-get下载
    的头像 发表于 09-03 16:26 ?1255次阅读
    【北京迅为】《stm32mp157<b class='flag-5'>开发</b>板嵌入式<b class='flag-5'>linux</b><b class='flag-5'>开发</b>指南》第五章 <b class='flag-5'>Ubuntu</b>使用apt-get下载

    树莓派装ubuntu和raspbian哪个更好

    和背景 Ubuntu是一个基于Debian的Linux发行版,由Canonical公司开发和维护。Ubuntu以其易用性、稳定性和社区支持而闻名,是许多
    的头像 发表于 08-30 15:41 ?3045次阅读