xcamera_config.h
#pragma once
#include <vector>
#include <mutex>
struct XCameraData
{
char name[1024] = { 0 };
char url[4096] = { 0 }; //摄像机主码流
char sub_url[4096] = { 0 }; //摄像机辅码流
char save_path[4096] = { 0 }; //视频录制存放目录
};
class XCameraConfig
{
public:
//唯一对象实例 单件模式,客户仅有从该函数得到一个实例化对象
static XCameraConfig* Instance()//静态成员函数可以直接通过类名来访问 如 XCameraConfig::Instance()而不需要通过对象访问
{
//使用 static 关键字表示该变量的生命周期将扩展到整个程序运行期间,而不仅仅是函数调用期间
static XCameraConfig xc;
return &xc;
}
//插入摄像机 线程安全
void Push(const XCameraData& data);
/// <summary>
/// 获取摄像头
/// </summary>
/// <param name="index">摄像头索引 从0开始</param>
/// <returns>返回空对象,可以判断name为空字符串</returns>
XCameraData GetCam(int index);//117
/// <summary>
/// 修改摄像机数据
/// </summary>
/// <param name="index"></param>
/// <param name="data"></param>
/// <returns></returns>
bool SetCam(int index, const XCameraData& data);//117
bool DelCam(int index);//117
/// <summary>
/// 获取相机数量
/// </summary>
/// <returns>失败返回0</returns>
int GetCamCount();//117
private:
XCameraConfig() {}//构造私有 单件模式,只能用成员函数进行对象的创建
std::vector<XCameraData> cams_;
std::mutex mux_;
};
xcamera_config.cpp
#pragma once
#include <vector>
#include <mutex>
struct XCameraData
{
char name[1024] = { 0 };
char url[4096] = { 0 }; //摄像机主码流
char sub_url[4096] = { 0 }; //摄像机辅码流
char save_path[4096] = { 0 }; //视频录制存放目录
};
class XCameraConfig
{
public:
//唯一对象实例 单件模式,客户仅有从该函数得到一个实例化对象
static XCameraConfig* Instance()//静态成员函数可以直接通过类名来访问 如 XCameraConfig::Instance()而不需要通过对象访问
{
//使用 static 关键字表示该变量的生命周期将扩展到整个程序运行期间,而不仅仅是函数调用期间
static XCameraConfig xc;
return &xc;
}
//插入摄像机 线程安全
void Push(const XCameraData& data);
/// <summary>
/// 获取摄像头
/// </summary>
/// <param name="index">摄像头索引 从0开始</param>
/// <returns>返回空对象,可以判断name为空字符串</returns>
XCameraData GetCam(int index);//117
/// <summary>
/// 修改摄像机数据
/// </summary>
/// <param name="index"></param>
/// <param name="data"></param>
/// <returns></returns>
bool SetCam(int index, const XCameraData& data);//117
bool DelCam(int index);//117
/// <summary>
/// 获取相机数量
/// </summary>
/// <returns>失败返回0</returns>
int GetCamCount();//117
private:
XCameraConfig() {}//构造私有 单件模式,只能用成员函数进行对象的创建
std::vector<XCameraData> cams_;
std::mutex mux_;
};
测试主函数:
#include "xviewer.h"
#include <QtWidgets/QApplication>
#include"xcamera_config.h"
#include<qdebug.h>
int main(int argc, char *argv[])
{
//“XCameraConfig c;”这一句不可访问 因为构造函数为私有只可以通过成员函数访问
//xc为相机配置类 用于操作XCameraData类,也就是相机的一些数据
auto* xc = XCameraConfig::Instance();//117
{
XCameraData cd;
strcpy(cd.name, "camera1");
strcpy(cd.save_path, ".\\camera1\\");
strcpy(cd.url,
"v1080.mp4");
strcpy(cd.sub_url,
"v1080.mp4");
xc->Push(cd);
}//117
{
XCameraData cd;
strcpy(cd.name, "camera2");
strcpy(cd.save_path, ".\\camera2\\");
strcpy(cd.url,
"v1080.mp4");
strcpy(cd.sub_url,
"v1080.mp4");
xc->Push(cd);
}//117
int cam_count = xc->GetCamCount();
for (int i = 0; i < cam_count; i++)
{
auto cam = xc->GetCam(i);
qDebug() << cam.name;//打印所有相机(从0~i-1个 共有i个)的相机名字
}//117
qDebug() << "=================Set=====================";
XCameraData d1 = xc->GetCam(0);
strcpy(d1.name, "camera_001");
xc->SetCam(0, d1);//将下标为0的相机数据修改为d1所指定的相机名字
cam_count = xc->GetCamCount();
for (int i = 0; i < cam_count; i++)
{
auto cam = xc->GetCam(i);
qDebug() << cam.name;
}//117
qDebug() << "=================Del=====================";
xc->DelCam(1);
cam_count = xc->GetCamCount();
for (int i = 0; i < cam_count; i++)
{
auto cam = xc->GetCam(i);
qDebug() << cam.name;
}//117
xc->DelCam(0);
QApplication a(argc, argv);
XViewer w;
w.show();
return a.exec();
}