采用libvlc做一个视频播放器

2024-02-20 12:12
文章标签 视频 采用 播放器 libvlc

本文主要是介绍采用libvlc做一个视频播放器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、libvlc介绍

VLC这个播放器(只要涉及到软件开发)基本应该都听过用过,其功能的强大就不多说了。
VLC媒体播放器官网: https://www.videolan.org/

image.png

libvlc源码和库文件下载地址: http://ftp.heanet.ie/pub/videolan/vlc/

image.png
这里面汇总了所有libvlc版本的下载地址。

要自己开发视频播放器,首先想到的库就是ffmpeg,如果想立即上手,不想理解音视频底层,快速开发一个播放器,那么直接调用libvlc是一个非常好的选择。

如果采用窗口嵌入方式,只需要很少的代码就可以开发一个能正常使用的视频播放器了。并且libvlc也支持跨平台,主流的平台官方都提供了库文件,也提供了源码,嵌入式平台可以自己交叉编译。

下面就介绍使用QT作为UI界面,调用libvlc完成一个简单的视频播放器开发,采用窗口嵌入式方式。使用的VLC版本是截止发文时的最新版本。

二、实现代码

image.png

2.1 widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//创建并初始化libvlc实例vlc_base=libvlc_new(0,nullptr);this->setWindowTitle("libvlc设计的视频播放器");
}Widget::~Widget()
{delete ui;
}//选择视频
void Widget::on_pushButton_open_clicked()
{/*选择文件*/QString filename=QFileDialog::getOpenFileName(this,"选择打开的文件","D:/",tr("*.*"));std::replace(filename.begin(), filename.end(), QChar('/'), QChar('\\'));qDebug()<<"播放的媒体:"<<filename;/*为特定文件路径创建媒体*/if(vlc_media)libvlc_media_release(vlc_media);vlc_media=libvlc_media_new_path(vlc_base,filename.toUtf8().data());if(vlc_media==nullptr){qDebug()<<"libvlc_media_new_path 执行错误.";return;}/*根据给定的媒体对象创建一个播放器对象*/if(vlc_mediaPlayer)libvlc_media_player_release(vlc_mediaPlayer);vlc_mediaPlayer=libvlc_media_player_new_from_media(vlc_media);/*设置给予媒体播放器媒体输出的win32/win64窗口句柄*/libvlc_media_player_set_hwnd(vlc_mediaPlayer, (void *)ui->widget->winId());/*播放媒体文件*/if(vlc_mediaPlayer)libvlc_media_player_play(vlc_mediaPlayer);
}//暂停与继续
void Widget::on_pushButton_pause_clicked()
{if(vlc_mediaPlayer)libvlc_media_player_pause(vlc_mediaPlayer);
}//停止
void Widget::on_pushButton_stop_clicked()
{if(vlc_mediaPlayer)libvlc_media_player_stop(vlc_mediaPlayer);
}

2.2 widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <vlc/vlc.h>
#include <QDebug>
#include <QFileDialog>
#include <QMoveEvent>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_pushButton_open_clicked();void on_pushButton_pause_clicked();void on_pushButton_stop_clicked();
private:Ui::Widget *ui;libvlc_instance_t *vlc_base=nullptr;libvlc_media_t *vlc_media=nullptr;libvlc_media_player_t *vlc_mediaPlayer=nullptr;Form *form;
};
#endif // WIDGET_H

2.3 pro工程文件

QT       += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0INCLUDEPATH += $$PWD\VLC\sdk\include   #VLC头文件包含目录
INCLUDEPATH += $$PWD\VLC\sdk\include\vlc\plugins   #VLC头文件包含目录可选
INCLUDEPATH += $$PWD\VLC\sdk\include\vlc   #VLC头文件包含目录 可选
LIBS +=$$PWD\VLC\sdk\lib\libvlc.lib    #VLC库文件路径
LIBS +=$$PWD\VLC\sdk\lib\libvlccore.lib  #可选SOURCES += \main.cpp \widget.cppHEADERS += \widget.hFORMS += \widget.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

这篇关于采用libvlc做一个视频播放器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/728175

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Java如何获取视频文件的视频时长

《Java如何获取视频文件的视频时长》文章介绍了如何使用Java获取视频文件的视频时长,包括导入maven依赖和代码案例,同时,也讨论了在运行过程中遇到的SLF4J加载问题,并给出了解决方案... 目录Java获取视频文件的视频时长1、导入maven依赖2、代码案例3、SLF4J: Failed to lo

Python实现多路视频多窗口播放功能

《Python实现多路视频多窗口播放功能》这篇文章主要为大家详细介绍了Python实现多路视频多窗口播放功能的相关知识,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下... 目录一、python实现多路视频播放功能二、代码实现三、打包代码实现总结一、python实现多路视频播放功能服务端开

Python实现视频转换为音频的方法详解

《Python实现视频转换为音频的方法详解》这篇文章主要为大家详细Python如何将视频转换为音频并将音频文件保存到特定文件夹下,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5. 注意事项

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

EasyPlayer.js网页H5 Web js播放器能力合集

最近遇到一个需求,要求做一款播放器,发现能力上跟EasyPlayer.js基本一致,满足要求: 需求 功性能 分类 需求描述 功能 预览 分屏模式 单分屏(单屏/全屏) 多分屏(2*2) 多分屏(3*3) 多分屏(4*4) 播放控制 播放(单个或全部) 暂停(暂停时展示最后一帧画面) 停止(单个或全部) 声音控制(开关/音量调节) 主辅码流切换 辅助功能 屏

《x86汇编语言:从实模式到保护模式》视频来了

《x86汇编语言:从实模式到保护模式》视频来了 很多朋友留言,说我的专栏《x86汇编语言:从实模式到保护模式》写得很详细,还有的朋友希望我能写得更细,最好是覆盖全书的所有章节。 毕竟我不是作者,只有作者的解读才是最权威的。 当初我学习这本书的时候,只能靠自己摸索,网上搜不到什么好资源。 如果你正在学这本书或者汇编语言,那你有福气了。 本书作者李忠老师,以此书为蓝本,录制了全套视频。 试