本文主要介绍windows下vlc使用:
1、vlc下载
通过https://download.videolan.org/pub/videolan/vlc/链接进行下载dll库
主要使用以下文件
2、测试代码
- 头文件
#ifndef MYPLAYER_H
#define MYPLAYER_H
#include <QObject>
#include"vlc/vlc.h"
class MyPlayer:public QObject
{
Q_OBJECT
public:
explicit MyPlayer(QObject *parent = 0);
int play(const QString fileName, void* hwnd = nullptr);
int play();
void pause();
void stop();
void setVolume(int nVol);
int getVolume();
void seekTo(float nPos);
bool isPlaying();
bool isPause();
int getPos();
int64_t getTime();
int64_t getPlayTime();
void setPlayTime(int64_t time);
int getPlayState();
void release();
private:
libvlc_instance_t *m_pInst; // VLC实例
libvlc_media_player_t *m_pPlayer; // VLC播放器
libvlc_event_manager_t *m_pEventMg; //VLC事件
};
#endif // MYPLAYER_H
- cpp文件
#include "VLCPlayer.h"
#include <QFile>
#include <QDebug>
static void handleEvents(const libvlc_event_t *event, void *userData)
{
//获取player句柄
MyPlayer* obj = (MyPlayer*)userData;
switch (event->type) {
//播放中
case libvlc_MediaPlayerPlaying:{
break;
}
// media player 位置改变
case libvlc_MediaPlayerPositionChanged: {
qDebug() << "player position is: " << event->u.media_player_position_changed.new_position ;
break;
}
// media player 时间改变
case libvlc_MediaPlayerTimeChanged: {
qDebug() << "New Time is: " << event->u.media_player_time_changed.new_time ;
break;
}
default:
break;
}
}
MyPlayer::MyPlayer(QObject *parent) : QObject(parent)
{
m_pPlayer = nullptr;
m_pInst = libvlc_new(0, nullptr);
}
int MyPlayer::play(const QString fileName, void* hwnd)
{
int nRet = -1;
if (!QFile::exists(fileName)) {
qDebug()<<"file is not exist:"<<fileName;
return nRet ;
}
if (this->isPlaying())
{
this->stop();
}
libvlc_media_t *media;
media = libvlc_media_new_path(m_pInst, fileName.toStdString().data());
if (!media)
{
return nRet;
}
m_pPlayer = libvlc_media_player_new_from_media(media);
if (!m_pPlayer)
{
return nRet;
}
libvlc_media_release(media);
m_pEventMg = libvlc_media_player_event_manager(m_pPlayer);
libvlc_event_attach(m_pEventMg,libvlc_MediaPlayerPositionChanged,handleEvents,this);
libvlc_event_attach(m_pEventMg, libvlc_MediaPlayerTimeChanged, handleEvents, this);
libvlc_event_attach(m_pEventMg, libvlc_MediaPlayerPlaying, handleEvents, this);
if(hwnd != nullptr)
{
libvlc_media_player_set_hwnd(m_pPlayer, hwnd);
}
nRet = 0;
this->play();
return nRet;
}
int MyPlayer::play()
{
int nRet = -1;
if (m_pPlayer)
{
nRet = libvlc_media_player_play(m_pPlayer);
}
return nRet;
}
void MyPlayer::pause()
{
if (m_pPlayer)
{
libvlc_media_player_pause(m_pPlayer);
}
}
void MyPlayer::stop()
{
if (m_pPlayer)
{
if(getPlayState() != libvlc_Ended){
libvlc_media_player_pause(m_pPlayer);
libvlc_media_player_stop(m_pPlayer);
}
libvlc_media_player_release(m_pPlayer);
m_pPlayer = nullptr;
}
}
void MyPlayer::setVolume(int nVol)
{
if (m_pPlayer)
{
libvlc_audio_set_volume(m_pPlayer, nVol);
}
}
int MyPlayer::getVolume()
{
int nRet = 0;
if (m_pPlayer)
{
nRet = libvlc_audio_get_volume(m_pPlayer);
}
return nRet;
}
void MyPlayer::seekTo(float nPos)
{
if (m_pPlayer)
{
libvlc_media_player_set_position(m_pPlayer, nPos);
}
}
bool MyPlayer::isPlaying()
{
bool bRet = false;
if (m_pPlayer)
{
bRet = libvlc_media_player_is_playing(m_pPlayer);
}
return bRet;
}
bool MyPlayer::isPause()
{
bool bRet = false;
if (!m_pPlayer)
{
return bRet;
}
int state = libvlc_media_player_get_state(m_pPlayer);
switch (state)
{
case libvlc_Paused:
case libvlc_Stopped:
bRet = true;
break;
default:
break;
}
return bRet;
}
int MyPlayer::getPos()
{
int nRet = 0;
if (m_pPlayer)
{
nRet = (int)(100 * libvlc_media_player_get_position(m_pPlayer));
}
return nRet;
}
int64_t MyPlayer::getTime()
{
int nRet = 0;
if (m_pPlayer)
{
nRet = libvlc_media_player_get_length(m_pPlayer);
}
return nRet;
}
int64_t MyPlayer::getPlayTime()
{
int nRet = 0;
if (m_pPlayer)
{
nRet = libvlc_media_player_get_time(m_pPlayer);
}
return nRet;
}
void MyPlayer::setPlayTime(int64_t time)
{
if (m_pPlayer)
{
libvlc_media_player_set_time(m_pPlayer, time);
}
}
int MyPlayer:: getPlayState()
{
int nRet = 0;
if (m_pPlayer) {
nRet = libvlc_media_player_get_state(m_pPlayer);
}
return nRet;
}
void MyPlayer::release()
{
if (m_pPlayer)
{
libvlc_media_player_stop(m_pPlayer);
libvlc_media_player_release(m_pPlayer);
m_pPlayer = nullptr;
}
if (m_pInst)
{
libvlc_release(m_pInst);
m_pInst = nullptr;
}
}