先装好QT SDK,然后把环境变量设置一下(不会去G!)
然后把vlc库加入到mingw里面
先复制vlc-include.rar解压出来的头文件到Qt\2009.04\mingw\include里面
在把vlc-lib.rar解压出来的文件放到C:\vlc-lib
我们在 Qt Creator 里面建立一个空的QT项目
新建一个Player类 ,会多出player.cpp,player.h 修改成如下
player.cpp
- /*
- * Flie Name player.cpp
- */
- #include "player.h"
- #include <QVBoxLayout>
- #include <QPushButton>
- #include <QSlider>
- #include <QTimer>
- #include <QFrame>
- Player::Player()
- : QWidget()
- {
- //preparation of the vlc command
- const char * const vlc_args[] = {
- "-I", "dummy", /* Don't use any interface */
- "--ignore-config", /* Don't use VLC's config */
- "--extraintf=logger", //log anything
- "--verbose=2", //be much more verbose then normal for debugging purpose
- "--plugin-path=C:\\vlc-0.9.9-win32\\plugins\\" };
- _videoWidget=new QFrame(this);
- _volumeSlider=new QSlider(Qt::Horizontal,this);
- _volumeSlider->setMaximum(100); //the volume is between 0 and 100
- _volumeSlider->setToolTip("Audio slider");
- // Note: if you use streaming, there is no ability to use the position slider
- _positionSlider=new QSlider(Qt::Horizontal,this);
- _positionSlider->setMaximum(POSITION_RESOLUTION);
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(_videoWidget);
- layout->addWidget(_positionSlider);
- layout->addWidget(_volumeSlider);
- setLayout(layout);
- _isPlaying=false;
- poller=new QTimer(this);
- //Initialize an instance of vlc
- //a structure for the exception is neede for this initalization
- libvlc_exception_init(&_vlcexcep);
- //create a new libvlc instance
- _vlcinstance=libvlc_new(sizeof(vlc_args) / sizeof(vlc_args[0]), vlc_args,&_vlcexcep); //tricky calculation of the char space used
- raise (&_vlcexcep);
- // Create a media player playing environement
- _mp = libvlc_media_player_new (_vlcinstance, &_vlcexcep);
- raise (&_vlcexcep);
- //connect the two sliders to the corresponding slots (uses Qt's signal / slots technology)
- connect(poller, SIGNAL(timeout()), this, SLOT(updateInterface()));
- connect(_positionSlider, SIGNAL(sliderMoved(int)), this, SLOT(changePosition(int)));
- connect(_volumeSlider, SIGNAL(sliderMoved(int)), this, SLOT(changeVolume(int)));
- poller->start(100); //start timer to trigger every 100 ms the updateInterface slot
- }
- //desctructor
- Player::~Player()
- {
- /* Stop playing */
- libvlc_media_player_stop (_mp, &_vlcexcep);
- /* Free the media_player */
- libvlc_media_player_release (_mp);
- libvlc_release (_vlcinstance);
- raise (&_vlcexcep);
- }
- void Player::playFile(QString file)
- {
- //the file has to be in one of the following formats /perhaps a little bit outdated)
- /*
- [file://]filename Plain media file
- http://ip:port/file HTTP URL
- ftp://ip:port/file FTP URL
- mms://ip:port/file MMS URL
- screen:// Screen capture
- [dvd://][device][@raw_device] DVD device
- [vcd://][device] VCD device
- [cdda://][device] Audio CD device
- udp:[[<source address>]@[<bind address>][:<bind port>]]
- */
- /* Create a new LibVLC media descriptor */
- _m = libvlc_media_new (_vlcinstance, file.toAscii(), &_vlcexcep);
- raise(&_vlcexcep);
- libvlc_media_player_set_media (_mp, _m, &_vlcexcep);
- raise(&_vlcexcep);
- // /!\ Please note /!\
- //
- // passing the widget to the lib shows vlc at which position it should show up
- // vlc automatically resizes the video to the ´given size of the widget
- // and it even resizes it, if the size changes at the playing
- /* Get our media instance to use our window */
- #if defined(Q_OS_WIN)
- libvlc_media_player_set_drawable(_mp, reinterpret_cast<unsigned int>(_videoWidget->winId()), &_vlcexcep );
- //libvlc_media_player_set_hwnd(_mp, _videoWidget->winId(), &_vlcexcep ); // for vlc 1.0
- #elif defined(Q_OS_MAC)
- libvlc_media_player_set_drawable(_mp, _videoWidget->winId(), &_vlcexcep );
- //libvlc_media_player_set_agl (_mp, _videoWidget->winId(), &_vlcexcep); // for vlc 1.0
- #else //Linux
- libvlc_media_player_set_drawable(_mp, _videoWidget->winId(), &_vlcexcep );
- //libvlc_media_player_set_xwindow(_mp, _videoWidget->winId(), &_vlcexcep ); // for vlc 1.0
- #endif
- raise(&_vlcexcep);
- /* Play */
- libvlc_media_player_play (_mp, &_vlcexcep );
- raise(&_vlcexcep);
- _isPlaying=true;
- }
- void Player::changeVolume(int newVolume)
- {
- libvlc_exception_clear(&_vlcexcep);
- libvlc_audio_set_volume (_vlcinstance,newVolume , &_vlcexcep);
- raise(&_vlcexcep);
- }
- void Player::changePosition(int newPosition)
- {
- libvlc_exception_clear(&_vlcexcep);
- // It's possible that the vlc doesn't play anything
- // so check before
- libvlc_media_t *curMedia = libvlc_media_player_get_media (_mp, &_vlcexcep);
- libvlc_exception_clear(&_vlcexcep);
- if (curMedia == NULL)
- return;
- float pos=(float)(newPosition)/(float)POSITION_RESOLUTION;
- libvlc_media_player_set_position (_mp, pos, &_vlcexcep);
- raise(&_vlcexcep);
- }
- void Player::updateInterface()
- {
- if(!_isPlaying)
- return;
- // It's possible that the vlc doesn't play anything
- // so check before
- libvlc_media_t *curMedia = libvlc_media_player_get_media (_mp, &_vlcexcep);
- libvlc_exception_clear(&_vlcexcep);
- if (curMedia == NULL)
- return;
- float pos=libvlc_media_player_get_position (_mp, &_vlcexcep);
- int siderPos=(int)(pos*(float)(POSITION_RESOLUTION));
- _positionSlider->setValue(siderPos);
- int volume=libvlc_audio_get_volume (_vlcinstance,&_vlcexcep);
- _volumeSlider->setValue(volume);
- }
- void Player::raise(libvlc_exception_t * ex)
- {
- if (libvlc_exception_raised (ex))
- {
- fprintf (stderr, "error: %s\n", libvlc_exception_get_message(ex));
- exit (-1);
- }
- }
player.h
- /* libVLC and Qt sample code
- * Copyright © 2009 Alexander Maringer <maringer@maringer-it.de>
- */
- #ifndef VLC_ON_QT_H
- #define VLC_ON_QT_H
- #include <vlc/vlc.h>
- #include <QWidget>
- class QVBoxLayout;
- class QPushButton;
- class QTimer;
- class QFrame;
- class QSlider;
- #define POSITION_RESOLUTION 10000
- class Player : public QWidget
- {
- Q_OBJECT
- QSlider *_positionSlider;
- QSlider *_volumeSlider;
- QFrame *_videoWidget;
- QTimer *poller;
- bool _isPlaying;
- libvlc_exception_t _vlcexcep;
- libvlc_instance_t *_vlcinstance;
- libvlc_media_player_t *_mp;
- libvlc_media_t *_m;
- public:
- Player();
- ~Player();
- void raise(libvlc_exception_t * ex);
- public slots:
- void playFile(QString file);
- void updateInterface();
- void changeVolume(int newVolume);
- void changePosition(int newPosition);
- };
- #endif
在新建立一个main.cpp 修改成如下
- #include <QtGui/QApplication>
- #include "player.h"
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- Player p;
- p.resize(640,480);
- p.playFile("#填写你要播的文件路径#");
- p.show();
- return a.exec();
- }
然后我们修改 .pro文件 成如下
- TARGET = test1
- TEMPLATE = app
- LIBS += -L'C:\vlc-lib'
- LIBS += -lvlc
- SOURCES += player.cpp \
- main.cpp
- HEADERS += player.h
然后运行qmake
然后就可以编译了
编译成功以后想要运行,还必须把C:\vlc-lib里面的libvlc.dll,和libvlccore.dll拷贝到生成exe的目录里面才能运行
现在在qt creator里面就可以运行了(单独运行还需要其它dll)