多路h265监控录放开发-(4)完成摄像机管理的数据的增删改模型层代码(单例模式)

xcamera_config.h

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_;
};

xcamera_config.cpp

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_;
};

测试主函数:

cpp 复制代码
#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();
}
相关推荐
顾道长生'1 小时前
(Arxiv-2024)VideoMaker:零样本定制化视频生成,依托于视频扩散模型的内在力量
音视频
顾道长生'8 小时前
(CVPR-2025)视频生成中的多主体开放集个性化
音视频·视频生成
CrystalShaw9 小时前
WebRTC音频QoS方法一.1(NetEQ之音频网络延时DelayManager计算补充)
音视频·webrtc
iphone10816 小时前
视频创作者如何用高级数据分析功能精准优化视频策略
大数据·数据挖掘·数据分析·音视频·视频功能·视频创作者
yuanpan18 小时前
OpenCV打开视频函数VideoCapture使用详解
人工智能·opencv·音视频
花开莫与流年错_2 天前
音频相关数学支持
数学·音视频·音频·软件
嘀咕博客3 天前
Krea Video:Krea AI推出的AI视频生成工具
人工智能·音视频·ai工具
计算机视觉-Archer3 天前
联想win11笔记本音频失效,显示差号(x)
音视频
瑶光守护者3 天前
【卫星通信】超低码率语音编码ULBC:EnCodec神经音频编解码器架构深度解析
深度学习·音视频·卫星通信·语音编解码·ulbc
枫叶梨花3 天前
从 M4S 到 MP4:用 FFmpeg 轻松合并音视频文件
ffmpeg·音视频