多路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();
}
相关推荐
美狐美颜SDK开放平台5 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
2601_955662465 天前
短剧多人对白怎么配?2026年多角色配音工具对比
大数据·人工智能·音视频·语音识别
开发笔记-阿牛5 天前
蓝牙音乐灯拆解,又一次拆到蓝牙音乐灯芯片CK6865L
人工智能·单片机·嵌入式硬件·音视频·音频
旺仔小馒头wang5 天前
AI 智能手机发布会:赋予人类的五种新能力
人工智能·学习·音视频
纳祥科技5 天前
拆机拆到芯片级:ARC功放机里的NX7026、NX8420、NX6805
单片机·音视频·智能音箱
youandyouyou5 天前
律所内部培训共享的内网部署方案:架构、参数与三步落地
音视频
爱吃提升5 天前
文生视频核心
人工智能·音视频
2601_955662465 天前
抖音视频怎么做多语言配音?2026年AI配音工具与制作流程详解
人工智能·音视频·语音识别·视频
音视频牛哥5 天前
Android与HarmonyOS NEXT如何接入GB28181:从SIP到PS/RTP的完整链路
音视频·gb28181-2022对接·鸿蒙next gb28181·gb/t 28181-2022·gb/t 28181-2016·gb28181-2022平台
美狐美颜SDK开放平台5 天前
直播APP源码与视频美颜sdk如何配合?一套完整开发思路
android·人工智能·计算机视觉·音视频·直播美颜sdk