前几天写了个ffmpeg版本,今天特意抽空改写个vlc版本,之前vlc播放视频后,被接管了不能识别到鼠标,需要重新编译vlc源码得到支持鼠标消息的版本。
/**
* vlc视频播放类 作者:feiyangqingyun(QQ:517216493) 2018-5-2
* 1:多线程实时播放rtsp视频流
* 2:支持windows+linux+mac
* 3:多线程显示图像,不卡主界面
* 4:自动重连网络摄像头
* 5:可设置边框大小即偏移量和边框颜色
* 6:可设置是否绘制OSD标签即标签文本或图片和标签位置
* 7:可设置两种OSD位置和风格
* 8:可设置是否保存到文件以及文件名
* 9:可播放本地视频文件,支持设置帧率
* 10:支持h265视频流+rtmp等常见视频流
* 11:可暂停播放和继续播放
*/
头文件代码
#ifndef VLC_H
#define VLC_H
#include
#include
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
#include
#endif
#include "libvlc_head.h"
class VlcWidget;
class VlcObject : public QObject
{
Q_OBJECT
public:
enum VlcState {
VlcState_NothingSpecial = 0,
VlcState_Opening = 1,
VlcState_Buffering = 2,
VlcState_Playing = 3,
VlcState_Paused = 4,
VlcState_Stopped = 5,
VlcState_Ended = 6,
VlcState_Error = 7
};
explicit VlcObject(QObject *parent = 0);
private:
QMutex mutex; //锁对象
QDateTime lastTime; //最后的消息时间
bool isRtsp; //是否是视频流
libvlc_instance_t *vlcInst; //载体对象
libvlc_media_t *vlcMedia; //媒体对象
libvlc_media_player_t *vlcPlayer; //播放对象
int videoWidth; //视频宽度
int videoHeight; //视频高度
int checkTime; //检测超时时间
bool checkConn; //检测视频流连接
bool saveFile; //是否保存文件
QString fileName; //保存文件名称
QString url; //视频流地址
QString suffix; //拓展名
public:
//获取最后的活动时间
QDateTime getLastTime();
//获取url地址
QString getUrl();
//快照
void snap(const QString &fileName, int width = 640, int height = 480);
//设置参数
void setOption(const QString &args);
//设置视频宽高