当前位置:   article > 正文

libVLC windows开发环境搭建

libVLC windows开发环境搭建

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位的库。

下载完成解压文件。

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

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

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

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

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.示例

  1. #pragma once
  2. #include <QtWidgets/QWidget>
  3. #include "ui_showWidget.h"
  4. #include <QMenu>
  5. #include <QActionGroup>
  6. #include <vlc/vlc.h>
  7. #include <QDebug>
  8. #include <QFileDialog>
  9. #include <QThread>
  10. class showWidget : public QWidget
  11. {
  12. Q_OBJECT
  13. public:
  14. showWidget(QWidget *parent = nullptr);
  15. ~showWidget();
  16. private slots:
  17. void slotOpenFile();
  18. void slotPlay();
  19. private:
  20. static void vlcEvents(const libvlc_event_t *ev, void *param);
  21. private:
  22. Ui::showWidgetClass ui;
  23. private:
  24. libvlc_instance_t *vlc_base = nullptr;
  25. libvlc_media_t *vlc_media = nullptr;
  26. libvlc_media_player_t *vlc_mediaPlayer = nullptr;
  27. QActionGroup *m_TimeSpeedGrp = nullptr;
  28. QMenu m_SpeedMenu;
  29. static showWidget *pThis;
  30. };
  31. #include "showWidget.h"
  32. #include <QTimer>
  33. #pragma execution_character_set("utf-8")
  34. showWidget* showWidget::pThis = nullptr;
  35. showWidget::showWidget(QWidget *parent)
  36. : QWidget(parent)
  37. {
  38. ui.setupUi(this);
  39. this->setWindowTitle("视频播放器");
  40. connect(ui.btnOpen, &QPushButton::clicked, this, &showWidget::slotOpenFile);
  41. connect(ui.btnPlay, &QPushButton::clicked, this, &showWidget::slotPlay);
  42. }
  43. showWidget::~showWidget()
  44. {
  45. libvlc_release(vlc_base); //减少libvlc实例的引用计数,并销毁
  46. }
  47. void showWidget::slotOpenFile()
  48. {
  49. /*选择文件*/
  50. QString filename = QFileDialog::getOpenFileName(this, "选择打开的文件", "D:/", tr("*.*"));
  51. std::replace(filename.begin(), filename.end(), QChar('/'), QChar('\\'));
  52. vlc_base = libvlc_new(0, NULL);
  53. vlc_media = libvlc_media_new_path(vlc_base, filename.toUtf8().data());
  54. if (!vlc_media) {
  55. return;
  56. }
  57. vlc_mediaPlayer = libvlc_media_player_new_from_media(vlc_media);
  58. if (!vlc_mediaPlayer) {
  59. return;
  60. }
  61. libvlc_media_parse(vlc_media);
  62. libvlc_event_manager_t *em = libvlc_media_player_event_manager(vlc_mediaPlayer);
  63. libvlc_event_attach(em, libvlc_MediaPlayerTimeChanged, vlcEvents, this);
  64. libvlc_event_attach(em, libvlc_MediaPlayerEndReached, vlcEvents, this);
  65. libvlc_event_attach(em, libvlc_MediaPlayerStopped, vlcEvents, this);
  66. libvlc_event_attach(em, libvlc_MediaPlayerPlaying, vlcEvents, this);
  67. libvlc_event_attach(em, libvlc_MediaPlayerPaused, vlcEvents, this);
  68. libvlc_media_player_set_hwnd(vlc_mediaPlayer, (void *)ui.widgetShow->winId());
  69. QTimer::singleShot(1000, this, &showWidget::slotPlay);
  70. }
  71. void showWidget::slotPlay()
  72. {
  73. libvlc_media_player_play(vlc_mediaPlayer);
  74. }
  75. void showWidget::vlcEvents(const libvlc_event_t *ev, void *param)
  76. {
  77. qint64 pos;
  78. switch (ev->type) {
  79. case libvlc_MediaPlayerTimeChanged:
  80. qDebug() << "VLC媒体播放器时间已更改";
  81. break;
  82. case libvlc_MediaPlayerEndReached:
  83. qDebug() << "VLC播放完毕.";
  84. break;
  85. case libvlc_MediaPlayerStopped:
  86. qDebug() << "VLC停止播放";
  87. break;
  88. case libvlc_MediaPlayerPlaying:
  89. qDebug() << "VLC开始播放";
  90. break;
  91. case libvlc_MediaPlayerPaused:
  92. qDebug() << "VLC暂停播放";
  93. break;
  94. }
  95. }

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/272127
推荐阅读
相关标签
  

闽ICP备14008679号