VLC — это проигрыватель, о котором практически все (если речь идет о разработке программного обеспечения) слышали и использовали. Я не буду вдаваться в подробности о его мощных функциях. Веб-сайт медиаплеера VLC: https://www.videolan.org/
Исходный код libvlc и адрес загрузки файла библиотеки: http://ftp.heanet.ie/pub/videolan/vlc/
Вот сводка адресов загрузки для всех версий libvlc.
Если вы хотите разработать собственный видеоплеер, первая библиотека, которая приходит на ум, — это ffmpeg. Если вы хотите сразу начать работу, не разбираясь в нижнем уровне аудио и видео, и быстро разработать плеер, то прямой вызов libvlc — это очень хорошо. выбор.
Если вы примете метод встраивания окон, вы сможете разработать обычный видеоплеер с небольшим количеством кода. И libvlc также поддерживает кросс-платформенность. Основные платформы официально предоставляют файлы библиотек и исходный код. Встроенные платформы могут кросс-компилировать себя.
Далее будет представлено использование QT в качестве интерфейса пользовательского интерфейса и вызов libvlc для завершения разработки простого видеоплеера с использованием встроенного метода окна. Используемая версия VLC является последней на момент публикации.
#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);
}
#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_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
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
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += 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.0
INCLUDEPATH += $$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.cpp
HEADERS += \
widget.h
FORMS += \
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