赞
踩
LibVLC是一个强大的开源库,它构成了VLC媒体播放器的核心部分。
LibVLC提供了一系列的功能接口,使得VLC能够处理流媒体的接入、音频和视频输出、插件管理以及线程系统等核心任务。
下载地址Index of /pub/videolan/vlc/last/
我这里使用的是64位的库。
下载完成解压文件。
主要需要plugins文件和sdk路径下的lib和include目录。
新建vs工程,新建目录3rd,将sdk路径下的lib和include目录复制到3rd目录下。
配置包含目录和库目录,如下图所示。
至此,开发环境已经搭建好了。
LibVLC提供了一系列接口,用于实现多媒体播放和管理功能。以下是一些常用的接口及其作用:
- #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目录和动态库拷贝到运行目录,才能够运行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。