自从视频监控系统的内核不断增加,从最初的vlc到ffmpeg然后到mpv,后面还陆续增加了海康sdk等,每次增加一个内核,整个视频监控系统就有三五个代码文件需要修改,而且大部分是重复的代码,通过define来区分不同的内核,所以重新整理了一个视频类,里面就define处理好了,提供了个公共接口,在需要的地方直接实例化一个类就行,而不需要在不同的地方实例化不同的类,大大减轻了后期的工作量,也复用了很多代码。
通用视频控件基本功能:
#ifndef COMMONVIDEOWIDGET_H
#define COMMONVIDEOWIDGET_H
#ifdef videovlc
#include "vlcwidget.h"
#elif videoffmpeg
#include "ffmpegwidget.h"
#elif videompv
#include "mpvwidget.h"
#elif haikang
#include "haikangwidget.h"
#else
#include "videowidget.h"
#endif
class CommonVideoWidget : public QWidget
{
Q_OBJECT
public:
//标签格式
enum OSDFormat {
OSDFormat_Text = 0, //文本
OSDFormat_Date = 1, //日期
OSDFormat_Time = 2, //时间
OSDFormat_DateTime = 3, //日期时间
OSDFormat_Image = 4 //图片
};
//标签位置
enum OSDPosition {
OSDPosition_Left_Top = 0, //左上角
OSDPosition_Left_Bottom = 1, //左下角
OSDPosition_Right_Top = 2, //右上角
OSDPosition_Right_Bottom = 3 //右下角
};
explicit CommonVideoWidget(QWidget *parent = 0);
~CommonVideoWidget();
private:
#ifdef videovlc
VlcWidget *widget;
#elif videoffmpeg
FFmpegWidget *widget;
#elif videompv
MpvWidget *widget;
#elif haikang
HaiKangWidget *widget;
#else
VideoWidget *widget;
#endif
public:
QImage getImage() const;
QPixmap getPixmap() const;
QString getUrl() const;
QDateTime getLastTime() const;
bool getCallback() const;
bool getIsPlaying() const;
bool getIsRtsp() const;
bool getIsUsbCamera() const;
bool getCopyImage() const;
bool getCheckLive() const;
bool getDrawImage() const;
bool getFillImage() const;
bool getFlowEnable() const;
QColor getFlowBgColor() const;
QColor getFlowPressColor() const;
int getTimeout() const;
int getBorderWidth() const;
QColor getBorderColor() const;
QColor getFocusColor() const;
QString getBgText() const;
QImage getBgImage() const;
bool getOSD1Visible() const;
int getOSD1FontSize() const;
QString getOSD1Text() const;
QColor getOSD1Color() const;
QImage getOSD1Image() const;
OSDFormat getOSD1Format() const;
OSDPosition getOSD1Position() const;
bool getOSD2Visible() const;
int getOSD2FontSize() const;
QString getOSD2Text() const;
QColor getOSD2Color() const;
QImage getOSD2Image() const;
OSDFormat getOSD2Format() const;
OSDPosition getOSD2Position() const;
int getFaceBorder() const;
QColor getFaceColor() const;
QList<QRect> getFaceRects() const;
signals:
//播放成功
void receivePlayStart();
//播放失败
void receivePlayError();
//播放结束
void receivePlayFinsh();
//截图信号
void snapImage(const QImage &image);
//收到图片信号
void receiveImage(const QImage &image);
//总时长
void fileLengthReceive(qint64 length);
//当前播放时长
void filePositionReceive(qint64 position);
//音量大小
void fileVolumeReceive(int volume, bool muted);
//接收到拖曳文件
void fileDrag(const QString &url);
//工具栏单击
void btnClicked(const QString &btnName);
public slots:
//设置焦点
void setFocus2();
//设置视频宽度
void setVideoWidth(int videoWidth);
//设置视频高度
void setVideoHeight(int videoHeight);
//设置缓存图片宽度
void setBufferWidth(int bufferWidth);
//设置缓存图片高度
void setBufferHeight(int bufferHeight);
//获取长度
qint64 getLength();
//获取当前播放位置
qint64 getPosition();
//设置播放位置
void setPosition(qint64 position);
//获取静音状态
bool getMuted();
//设置静音
void setMuted(bool muted);
//获取音量
int getVolume();
//设置音量
void setVolume(int volume);
//设置显示间隔
void setInterval(int interval);
//设置帧数,用于播放自身存储的视频流文件,控制播放速度
void setVideoFps(int videoFps);
//设置休眠时间
void setSleepTime(int sleepTime);
//设置检测连接超时
void setCheckTime(int checkTime);
//设置是否检测连接
void setCheckConn(bool checkConn);
//设置是否播放音频
void setPlayAudio(bool playAudio);
//设置视频流地址
void setUrl(const QString &url);
//设置是否采用回调
void setCallback(bool callback);
//设置硬件解码器名称
void setHardware(const QString &hardware);
//设置通信协议
void setTransport(const QString &transport);
//设置缓存时间
void setCaching(int caching);
//设置图片质量类型
void setImageFlag(int imageFlag);
#ifdef videoffmpeg
//设置参数
void setOption(const char *key, const char *value);
#elif videovlc
//设置参数
void setOption(const QString &option);
#elif videompv
//通用属性接口
QVariant getValue(const QString &name);
void setValue(const QString &name, const QVariant &value);
void setOption(const QString &name, const QVariant &value);
void command(const QVariant &args);
#endif
//设置是否保存文件
void setSaveFile(bool saveFile);
//设置保存间隔
void setSaveInterval(int saveInterval);
//设置保存文件夹
void setSavePath(const QString &savePath);
//设置定时保存文件唯一标识符
void setFileFlag(const QString &fileFlag);
//设置保存文件名称
void setFileName(const QString &fileName);
//设置只存储单个文件的保存时间
void setSaveTime(const QDateTime &saveTime);
//设置是否拷贝图片
void setCopyImage(bool copyImage);
//设置是否检测活着
void setCheckLive(bool checkLive);
//设置是否实时绘制图片
void setDrawImage(bool drawImage);
//设置是否拉伸填充
void setFillImage(bool fillImage);
//设置是否启用悬浮条
void setFlowEnable(bool flowEnable);
//设置悬浮条背景颜色
void setFlowBgColor(const QColor &flowBgColor);
//设置悬浮条按下颜色
void setFlowPressColor(const QColor &flowPressColor);
//设置超时时间
void setTimeout(int timeout);
//设置边框宽度
void setBorderWidth(int borderWidth);
//设置边框颜色
void setBorderColor(const QColor &borderColor);
//设置有焦点边框颜色
void setFocusColor(const QColor &focusColor);
//设置无图像文字
void setBgText(const QString &bgText);
//设置无图像背景图
void setBgImage(const QImage &bgImage);
//设置标签1是否可见
void setOSD1Visible(bool osdVisible);
//设置标签1文字字号
void setOSD1FontSize(int osdFontSize);
//设置标签1文本
void setOSD1Text(const QString &osdText);
//设置标签1文字颜色
void setOSD1Color(const QColor &osdColor);
//设置标签1图片
void setOSD1Image(const QImage &osdImage);
//设置标签1格式
void setOSD1Format(const OSDFormat &osdFormat);
//设置标签1位置
void setOSD1Position(const OSDPosition &osdPosition);
//设置标签2是否可见
void setOSD2Visible(bool osdVisible);
//设置标签2文字字号
void setOSD2FontSize(int osdFontSize);
//设置标签2文本
void setOSD2Text(const QString &osdText);
//设置标签2文字颜色
void setOSD2Color(const QColor &osdColor);
//设置标签2图片
void setOSD2Image(const QImage &osdImage);
//设置标签2格式
void setOSD2Format(const OSDFormat &osdFormat);
//设置标签2位置
void setOSD2Position(const OSDPosition &osdPosition);
//设置人脸框粗细
void setFaceBorder(int faceBorder);
//设置人脸框颜色
void setFaceColor(const QColor &faceColor);
//设置人脸框区域集合
void setFaceRects(const QList<QRect> &faceRects);
//打开设备
void open();
//暂停
void pause();
//继续
void next();
//关闭设备
void close();
//重新加载
void restart(int delayOpen = 20);
//清空
void clear();
//快照
void snap(const QString &fileName);
};
#endif // COMMONVIDEOWIDGET_H
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。