libVLC windows开发环境搭建

libVLC windows开发环境搭建本文介绍了如何搭建 LibVLC 的 Windows 开发环境 包括下载库文件 配置 VS 工程 并列举了一些常用接口 如创建播放器 管理媒体 设置音量等

大家好,欢迎来到IT知识分享网。

1.简介

LibVLC是一个强大的开源库,它构成了VLC媒体播放器的核心部分。

LibVLC提供了一系列的功能接口,使得VLC能够处理流媒体的接入、音频和视频输出、插件管理以及线程系统等核心任务。

  • 跨平台性:VLC作为一个跨平台的多媒体播放器,可以运行在多种操作系统和计算机体系结构上。
  • 协议支持:LibVLC不仅支持播放本地视频文件,还支持播放基于各种流媒体协议(如RTMP、RTSP)的视频。
  • API一致性:在不同操作系统下,如Linux和Windows,LibVLC提供的API基本一致,这为开发者跨平台开发提供了便利。
  • 扩展性:VLC作为一个流媒体服务器和多媒体框架,是可扩展的,能够通过LibVLC提供的API接口添加新组件和功能。

2.环境搭建

下载地址Index of /pub/videolan/vlc/last/

我这里使用的是64位的库。

libVLC windows开发环境搭建

libVLC windows开发环境搭建

下载完成解压文件。

主要需要plugins文件和sdk路径下的lib和include目录。

libVLC windows开发环境搭建

 新建vs工程,新建目录3rd,将sdk路径下的lib和include目录复制到3rd目录下。

libVLC windows开发环境搭建

 配置包含目录和库目录,如下图所示。

libVLC windows开发环境搭建

libVLC windows开发环境搭建

libVLC windows开发环境搭建

 至此,开发环境已经搭建好了。

3.常用接口 

LibVLC提供了一系列接口,用于实现多媒体播放和管理功能。以下是一些常用的接口及其作用: 

  • libvlc_new – 创建一个新的libVLC实例。
  • libvlc_release – 释放libVLC实例。
  • libvlc_media_player_new – 创建一个新的媒体播放器对象。
  • libvlc_media_player_release – 释放媒体播放器对象。
  • libvlc_media_new_path / libvlc_media_new_location – 从本地文件路径或网络位置创建媒体对象。
  • libvlc_media_release – 释放媒体对象。
  • libvlc_media_player_set_media – 将媒体对象与播放器关联。
  • libvlc_media_player_play – 开始播放媒体。
  • libvlc_media_player_pause – 暂停播放。
  • libvlc_media_player_stop – 停止播放。
  • libvlc_media_player_set_hwnd – 设置视频输出窗口(适用于Windows)。
  • libvlc_media_player_get_time – 获取当前播放时间。
  • libvlc_media_player_set_time – 设置播放位置(时间)。
  • libvlc_media_player_get_length – 获取媒体的长度。
  • libvlc_media_player_get_state – 获取当前播放器状态。
  • libvlc_audio_set_volume – 设置音量。
  • libvlc_audio_get_volume – 获取音量。
  • libvlc_media_player_is_playing – 检查媒体是否正在播放。
  • libvlc_media_parse – 解析媒体以获取更多信息(如元数据、跟踪信息等)。

4.示例

libVLC windows开发环境搭建

#pragma once #include <QtWidgets/QWidget> #include "ui_showWidget.h" #include <QMenu> #include <QActionGroup> #include <vlc/vlc.h> #include <QDebug> #include <QFileDialog> #include <QThread> class showWidget : public QWidget { Q_OBJECT public: showWidget(QWidget *parent = nullptr); ~showWidget(); private slots: void slotOpenFile(); void slotPlay(); private: static void vlcEvents(const libvlc_event_t *ev, void *param); private: Ui::showWidgetClass ui; private: libvlc_instance_t *vlc_base = nullptr; libvlc_media_t *vlc_media = nullptr; libvlc_media_player_t *vlc_mediaPlayer = nullptr; QActionGroup *m_TimeSpeedGrp = nullptr; QMenu m_SpeedMenu; static showWidget *pThis; }; #include "showWidget.h" #include <QTimer> #pragma execution_character_set("utf-8") showWidget* showWidget::pThis = nullptr; showWidget::showWidget(QWidget *parent) : QWidget(parent) { ui.setupUi(this); this->setWindowTitle("视频播放器"); connect(ui.btnOpen, &QPushButton::clicked, this, &showWidget::slotOpenFile); connect(ui.btnPlay, &QPushButton::clicked, this, &showWidget::slotPlay); } showWidget::~showWidget() { libvlc_release(vlc_base); //减少libvlc实例的引用计数,并销毁 } void showWidget::slotOpenFile() { /*选择文件*/ QString filename = QFileDialog::getOpenFileName(this, "选择打开的文件", "D:/", tr("*.*")); std::replace(filename.begin(), filename.end(), QChar('/'), QChar('\\')); vlc_base = libvlc_new(0, NULL); vlc_media = libvlc_media_new_path(vlc_base, filename.toUtf8().data()); if (!vlc_media) { return; } vlc_mediaPlayer = libvlc_media_player_new_from_media(vlc_media); if (!vlc_mediaPlayer) { return; } libvlc_media_parse(vlc_media); libvlc_event_manager_t *em = libvlc_media_player_event_manager(vlc_mediaPlayer); libvlc_event_attach(em, libvlc_MediaPlayerTimeChanged, vlcEvents, this); libvlc_event_attach(em, libvlc_MediaPlayerEndReached, vlcEvents, this); libvlc_event_attach(em, libvlc_MediaPlayerStopped, vlcEvents, this); libvlc_event_attach(em, libvlc_MediaPlayerPlaying, vlcEvents, this); libvlc_event_attach(em, libvlc_MediaPlayerPaused, vlcEvents, this); libvlc_media_player_set_hwnd(vlc_mediaPlayer, (void *)ui.widgetShow->winId()); QTimer::singleShot(1000, this, &showWidget::slotPlay); } void showWidget::slotPlay() { libvlc_media_player_play(vlc_mediaPlayer); } void showWidget::vlcEvents(const libvlc_event_t *ev, void *param) { qint64 pos; switch (ev->type) { case libvlc_MediaPlayerTimeChanged: qDebug() << "VLC媒体播放器时间已更改"; break; case libvlc_MediaPlayerEndReached: qDebug() << "VLC播放完毕."; break; case libvlc_MediaPlayerStopped: qDebug() << "VLC停止播放"; break; case libvlc_MediaPlayerPlaying: qDebug() << "VLC开始播放"; break; case libvlc_MediaPlayerPaused: qDebug() << "VLC暂停播放"; break; } } 

编译好的程序,需要把plugins目录和动态库拷贝到运行目录,才能够运行。

编译错误解决:

\VLC\sdk\include\vlc/libvlc_media.h(368): error C2065: “libvlc_media_read_cb”: 未声明的标识符 \VLC\sdk\include\vlc/libvlc_media.h(368): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int \VLC\sdk\include\vlc/libvlc_media.h(368): error C2513: “int”: 在“=”前没有声明变量 \VLC\sdk\include\vlc/libvlc_media.h(368): error C2143: 语法错误: 缺少“;”(在“(”的前面) \VLC\sdk\include\vlc/libvlc_media.h(368): error C2062: 意外的类型“void” \VLC\sdk\include\vlc/libvlc_media.h(478): error C2061: 语法错误: 标识符“libvlc_media_read_cb” \VLC\sdk\include\vlc/libvlc_media.h(368): error C2065: “libvlc_media_read_cb”: 未声明的标识符 \VLC\sdk\include\vlc/libvlc_media.h(368): error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int \VLC\sdk\include\vlc/libvlc_media.h(368): error C2513: “int”: 在“=”前没有声明变量 \VLC\sdk\include\vlc/libvlc_media.h(368): error C2143: 语法错误: 缺少“;”(在“(”的前面) \VLC\sdk\include\vlc/libvlc_media.h(368): error C2062: 意外的类型“void” \VLC\sdk\include\vlc/libvlc_media.h(478): error C2061: 语法错误: 标识符“libvlc_media_read_cb”

打开vlc.h加上: typedef __int64 ssize_t;

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/131312.html

(0)
上一篇 2025-08-08 19:26
下一篇 2025-08-08 19:33

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信