用VLC开发视频播放器/组件(两种方式:libVLC / VLC-Qt)

article/2025/10/1 19:31:13

测试环境

  • MSVC-2015
  • Qt 5.14.2
  • QCreator

1. libVLC(关键步骤)

参考:心流剑

libVLC 各版本 下载链接

我的下载版本为:3.0.11
在这里插入图片描述

  • sdk/lib文件夹目录
    sdk/lib文件夹
  • qmake vlc 部分的配置(路径根据自己的修改)
  • 只需要: libvlc.lib、libvlccore.lib
#####################  VLC 库 ############################
INCLUDEPATH += $$PWD/../vlc/sdk/include
LIBS += -L$$PWD/../vlc/sdk/lib
LIBS += -llibvlccore
LIBS += -llibvlc############ 设置输出路径、文件名、加载的链接库 ###############
CONFIG(debug, debug|release){DESTDIR =$$PWD/../bin_Debug # 输出目录TARGET = XVLCDemod  # 输出文件名
}
else{DESTDIR =$$PWD/../bin_ReleaseTARGET = XVLCDemo
}
  • 把 plugins 文件夹、libvlc.dll、libvlccore.dll 复制到 bin_Debug / bin_Release
#include <QCoreApplication>#ifdef _WIN32
#include <basetsd.h>
typedef SSIZE_T ssize_t;
#endif#include <QDebug>#include "vlc/vlc.h"int main(int argc, char *argv[])
{
//    QCoreApplication a(argc, argv);libvlc_instance_t     * pInstance = nullptr;libvlc_media_player_t * pPlayer = nullptr;libvlc_media_t        * pMedia = nullptr;libvlc_time_t length;int width;int height;int wait_time = 5000;//libvlc_time_t length;/* Load the VLC engine */pInstance = libvlc_new(0, NULL);//Create a new item//Method 1://m = libvlc_media_new_location (inst, "file:///F:\\movie\\cuc_ieschool.flv");//Screen Capture//m = libvlc_media_new_location (inst, "screen://");//Method 2:// 创建一个流媒体(视频/音频对象)pMedia = libvlc_media_new_path(pInstance, "C:\\Users\\YuLei\\Desktop\\ch4.mp4");if (!pMedia){qDebug() << "libvlc_media_new_path  fail!!!";return -1;}// 创建一个播放窗口(环境),加载流pPlayer = libvlc_media_player_new_from_media(pMedia);/* No need to keep the media now */libvlc_media_release(pMedia);// play the media_playerlibvlc_media_player_play(pPlayer);//wait until the tracks are created_sleep(wait_time);length  = libvlc_media_player_get_length(pPlayer);width   = libvlc_video_get_width(pPlayer);height  = libvlc_video_get_height(pPlayer);printf("Stream Duration: %ds\n", length / 1000);printf("Resolution: %d x %d\n", width, height);//Let it play_sleep(length - wait_time);// Stop playinglibvlc_media_player_stop(pPlayer);// Free the media_playerlibvlc_media_player_release(pPlayer);libvlc_release(pInstance);return  0;
//    return a.exec();
}

2. VLC-Qt(关键步骤)

VLC-Qt 下载地址
参考链接1:链接
参考链接2:链接
在这里插入图片描述

  • v1.1.1版本仅提供源码
    在这里插入图片描述
  • 采用 v1.1.0 版本 链接

在这里插入图片描述

  • qmake 配置
#####################  VLC 库 ############################
INCLUDEPATH += $$PWD/../vlc_qt/include
LIBS += -L$$PWD/../vlc_qt/lib
CONFIG(debug, debug|release){LIBS += -lVLCQtCoredLIBS += -lVLCQtWidgetsd
}
else{LIBS += -lVLCQtCoreLIBS += -lVLCQtWidgets
}############ 设置输出路径、文件名、加载的链接库 ###############
CONFIG(debug, debug|release){DESTDIR =$$PWD/../bin_Debug # 输出目录TARGET = QVLCDemod  # 输出文件名
}
else{DESTDIR =$$PWD/../bin_ReleaseTARGET = QVLCDemo
}

抽帧

libVLC

参考链接1
参考链接2

/***  mp:媒体播放器*  lock:回调以锁定视频内存(不能为 NULL)*  unlock:回调以解锁视频内存(如果不需要,则为 NULL)*  display:回调以显示视频(如果不需要,则为 NULL)*  opaque:这三个回调的私有指针(作为第一个参数)*/
void libvlc_video_set_callbacks( libvlc_media_player_t *mp,libvlc_video_lock_cb lock,libvlc_video_unlock_cb unlock,libvlc_video_display_cb display,void *opaque );// 当需要解码新的视频帧时,就会调用 lock 回调。
typedef void *(*libvlc_video_lock_cb)(void *opaque, void **planes);// 当视频帧解码完成后,将调用 unlock 回调。
typedef void (*libvlc_video_unlock_cb)(void *opaque, void *picture,void *const *planes);// 当视频帧需要显示时,将调用 display 回调。
typedef void (*libvlc_video_display_cb)(void *opaque, void *picture);
#include 
#include 
#include 
#include 
#include // 定义输出视频的分辨率
#define VIDEO_WIDTH   640
#define VIDEO_HEIGHT  480struct Context {QMutex mutex;uchar *pixels;
};static void *lock(void *opaque, void **planes)
{struct Context *ctx = static_cast(opaque);ctx->mutex.lock();// 告诉 VLC 将解码的数据放到缓冲区中*planes = ctx->pixels;return nullptr;
}// 获取 argb 图片并保存到文件中
static void unlock(void *opaque, void *picture, void *const *planes)
{Q_UNUSED(picture);struct Context *ctx = static_cast(opaque);unsigned char *data = static_cast<unsigned char *>(*planes);static int frameCount = 1;QImage image(data, VIDEO_WIDTH, VIDEO_HEIGHT, QImage::Format_ARGB32);image.save(QString("frame_%1.png").arg(frameCount++));ctx->mutex.unlock();
}static void display(void *opaque, void *picture)
{Q_UNUSED(picture);(void)opaque;
}int main()
{const char *localMrl = "Sample.mkv";struct Context ctx;ctx.pixels = new uchar[VIDEO_WIDTH * VIDEO_HEIGHT * 4];memset(ctx.pixels, 0, VIDEO_WIDTH * VIDEO_HEIGHT * 4);libvlc_instance_t *instance;libvlc_media_player_t *player;libvlc_media_t *media;instance = libvlc_new(0, nullptr);media = libvlc_media_new_path(instance, localMrl);player = libvlc_media_player_new_from_media(media);// 设置回调,用于提取帧或者在界面上显示。libvlc_video_set_callbacks(player, lock, unlock, display, &ctx);libvlc_video_set_format(player, "RGBA", VIDEO_WIDTH, VIDEO_HEIGHT, VIDEO_WIDTH * 4);libvlc_media_player_play(player);QThread::sleep(10);libvlc_media_release(media);libvlc_media_player_release(player);libvlc_release(instance);return 0;
}

http://chatgpt.dhexx.cn/article/DLCl50Ry.shtml

相关文章

idea如何取消debug所有断点

1、debug模式下&#xff0c;在idea左下方找到【View Breakpoints】按钮或者直接按【CtrlShiftF8】快捷键&#xff0c;如下图&#xff1a; 2、在左侧窗口中&#xff0c;点击【Java Line Breakpoints】前方的全选框&#xff0c;如下图&#xff1a; 3、取消 【Java Line Breakp…

Idea断点for循环调试

前言 作为一个开发&#xff0c;最高兴和痛苦的事情就是排查问题&#xff0c;调试代码解决问题&#xff0c;掌握一些技巧可以提升效率&#xff0c;今天就讲讲for循环断点调试的技巧for循环断点调试 操作步骤&#xff1a; 1.在断点调试处加断点 2.点击断点处&#xff0c;鼠标右击…

IntelliJ IDEA-Debug断点调试 看这篇文章就够了

详解IntelliJ IDEA-Debug断点调试 如今&#xff0c;IntelliJ IDEA 目前深受广大开发者喜爱&#xff0c;我们在实际开发工作中&#xff0c;不管是用来阅读源码还是在开发过程中都需要进行代码调试。 以下为大家准备了一篇关于IntelliJ IDEA-Debug断点调试的文章&#xff0c;如…

IDEA 的基本介绍使用及断点调试

文章目录 1、IDE&#xff08;集成开发环境&#xff09;- IDEA2、IDE&#xff08;集成开发环境&#xff09;- Eclipse3、IDEA 的基本介绍和使用3.1、设置字体 和 颜色主题3.2、编译文件和源代码3.3、IDEA 常用快捷键3.4、模板/自定义模板 4、断点调试(debug)4.1、实际需求4.2、定…

idea debug调式进不了断点

问题&#xff1a; 在启动debug断点调试时&#xff0c;代码无法进入断点。 解决方案&#xff1a; 在网上搜索解决方案&#xff0c;看到说在settings——>Debugger下勾选如下位置即可。本人并未亲自测试&#xff0c;所以就做了一波搜集党。 我的解决方法&#xff1a;去掉如下…

idea断点调试jar包

本文以springbootdemo-0.0.1-SNAPSHOT.jar 为例&#xff0c;jar内容需与idea保持一致。 1、启动命令 常规jar启动&#xff1a;java -jar springbootdemo-0.0.1-SNAPSHOT.jar jar包断点调试启动&#xff1a;java -Xdebug -agentlib:jdwptransportdt_socket,servery,suspendn,ad…

如何在idea中打debug断点

在调试代码的时候&#xff0c;你的项目得debug模式启动&#xff0c;也就是点那个绿色的甲虫启动服务器&#xff0c;然后&#xff0c;就可以在代码里面断点调试啦。 下面不要在意&#xff0c;这个快捷键具体是啥&#xff0c;因为&#xff0c;这个keymap是可以自己配置的&#xf…

【IDEA 断点调试】

IDEA 断点调试 断点类型 行断点 【红色圆点】 点击左侧空白区域 、或 在行上ctrlF8 详细断点 【黄色圆点】 shift单击左侧空白区域&#xff0c;同时弹窗选择断点详细设置 方法断点 【红色菱形】 点击方法名所在左侧空白区域 。 进入方法后每一行都是挂起&#xff0c;打在接口…

IDEA debug 断点调试技巧

1、首先看下IDEA中Debug模式下的界面&#xff1a; ① 以Debug模式启动服务&#xff0c;左边的一个按钮则是以Run模式启动。在开发中&#xff0c;我一般会直接启动Debug模式&#xff0c;方便随时调试代码。 ② 断点&#xff1a;在左边行号栏单击左键&#xff0c;或者快捷键Ctrl…

IDEA 加断点debug时阻塞问题

今天有朋友提到一个问题&#xff0c;“我在springBoot项目中建一个Controller&#xff0c;然后写两个方法&#xff0c;方法1中加个断点&#xff0c;然后请求方法1&#xff0c;进入断点之后再请求方法二&#xff0c;此时方法二会一直等待&#xff0c;等方法一执行完才能再执行方…

Idea 进行断点调试的 快捷键

快捷键 功能描述 F8 单步调试&#xff0c;不进入函数内部 F7 单步调试&#xff0c;进入函数内部 ShiftF7 选择要进入的函数 ShiftF8 跳出函数 AltF9 运行到断点 AltF8 执行表达式查看结果 F9 继续执行&#xff0c;进入下一个断点或执行完程序 CtrlF8 设置/取消当前行断…

IDEA中断点调试

调试在开发中大量应用&#xff1a; 【1】Debug的优化设置&#xff1a;更加节省内存空间&#xff1a; 设置Debug连接方式&#xff0c;默认是Socket。 Shared memory是Windows 特有的一个属性&#xff0c;一般在Windows系统下建议使用此设置&#xff0c; 内存占用相对较少。 【…

idea debug无法打断点 以及解决办法

idea debug无法打断点 以及解决办法 今天工作中调试代码时候遇见一个问题 一行很普通的 map.put()代码 无法 进行断点调试 效果如图 出现这种情况大概有两种可能&#xff0c;一种是断点打在了错误的地方&#xff0c;程序进不到这里&#xff1b;第二种是有可能需要重新编译。…

IDEA的Debug断点调试

首先说一下我的IDEA的版本是windows Intelli IDEA2021.1.2 Debug 先打开IDEA中的Debug&#xff0c; 任意点击一个Debug的图标就可以打开下方的窗口 1.Debug模式启动服务&#xff0c;左边的一个按钮则是以Run模式启动。 2.断点&#xff1a;在左边行号栏单击左键即可建立一个断…

Intellij IDEA debug断点调试技巧总结

版本 IDEA 2019.3 主题&#xff1a;material dark。 操作系统&#xff1a;Mac OS command 对应 ctrloption 对于 alt 为项目配置了运行配置后&#xff0c;可以通过按 ShiftF9 在调试模式下启动它。 在 “调试工具” 窗口中&#xff0c;您可以看到框架和线程的状态、变量和表…

关于idea的八种断点调试

背景&#xff1a;在日常开发中&#xff0c;我们经常会使用到idea&#xff0c;那么debug就更不用说了&#xff0c;但是你真的会打断点么&#xff0c;看完这篇文章再下结论吧 &#xff08;ps&#xff0c;部分图片因为公司做过内部分享&#xff0c;所以打码&#xff09; 一&#…

idea 断点调试,点击Run to Cursor后,不进入断点

idea 断点调试,点击Run to Cursor后,不进入断点 解决方法: 点击run to cursor 后,第二次不进入断点了,此时点击右侧窗口的 pause ,暂停程序 点击 Resume Program,恢复程序,即可重新进断点

Java断点调试 idea断点调试 debug教程

IDEA断点调试 Java程序断点调试 文章目录 IDEA断点调试 Java程序断点调试前言一、什么情况下需要debug二、使用idea如何进行debug三、假设案例分别进行debug教程1.案例一&#xff1a;查看运行时对象的值2.案例二&#xff1a;程序异常查看原因 总结解释 前言 前面写过一篇关于如…

初学者必备:IDEA中的debug断点调试技巧大全与断点常用技巧

IDEA中的debug断点调试技巧 1.如何打断点与取消断点 点击红箭头的位置一下打断点 两下取消 2.运行断点 3.进入断点 1.横排按钮 1.回到当前断点所在界面 2.根据当前断点逐行向下执行–不会进入方法 3.根据当前断点逐行向下执行会进入方法里面 --但是只能进入我们自己写的方法…

IDEA debug 断点无效

1.检查是否以debug模式启动项目&#xff0c;就是图中的那个有小虫的按钮 2.查看是否禁用了断点&#xff0c;禁用断点此处会显示灰色 3.在断点处后面加上一条输出语句&#xff0c;判断是否进入到了断点处&#xff08;对于web项目你需要有访问请求&#xff0c;才能到达一些断点处…