linux设备上的Onvif 实现9:检查是否支持该设备

2024-06-23 08:38

本文主要是介绍linux设备上的Onvif 实现9:检查是否支持该设备,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前文获取了摄像头的2个通道的视频分辨率、帧率、码率、编码格式等信息,目的是为了判断我的linux设备能否支持该视频解码显示。 如果能够支持那么就大吉大利,一切OK!如果两个通道都不支持,那么就需要更麻烦的自动修改配置参数过程了,详细修改过程见后文说明。

2 我的判断函数

我的判断标准是:

#define  MAXWIDTH           640
#define  MAXHEIGHT          480
#define  MAXBITRATELIMIT   1536
#define  MAXFRAMERATE        25

/******************************************************************************
* Name:   MyIsSupportDevice
*
* Desc:   判断是否支持指定节点设备
* Param:
    int index, 指定节点序号
* Return: BOOL,  TRUE: support,  FALSE: not support
* Global:  
* Note:   如果两个通道都不满足要求才认定是不支持的设备 
* Author:   Tom-hongtao.gao
* -------------------------------------
* Log:   2013/07/24, Create this function by Tom-hongtao.gao
 ******************************************************************************/
BOOL MyIsSupportDevice(int index)
{
    BOOL bret=FALSE;
    int i;
    int support=0;   //支持的通道总数
   
    DEVICENODE * deviceode = DLFindbyIndex(index);
    if(!deviceode)
    {
        printf("--Error: DLFindbyIndex(%d) return NULL! \n", index);
        return FALSE;
    }

    for(i=0;i<2;i++)
    {
        /* 检查编码格式H264 */
        if(deviceode->profile[i].Encoding!=2)
        {
            printf("--Error: deviceode[%d]->profile[%d].Encoding is not H264! \n",index,i);
            continue;
        }

        /* 检查编码参数H264Profile */
        if(deviceode->profile[i].H264Profile<0)
        {
            printf("--Error: deviceode[%d]->profile[%d].H264Profile is not unkonwn! \n",index,i);
            continue;
        }

        /* 检查分辨率640x480 */
        if(deviceode->profile[i].Width > MAXWIDTH)
        {
            printf("--Error: deviceode[%d]->profile[%d].Width is more than %d! \n",index,i, MAXWIDTH);
            continue;
        }
        if(deviceode->profile[i].Height > MAXHEIGHT)
        {
            printf("--Error: deviceode[%d]->profile[%d].Height is more than %d! \n",index,i,MAXHEIGHT);
            continue;
        }

        /* 检查帧率25 */
        if(deviceode->profile[i].FrameRateLimit > MAXFRAMERATE)
        {
            printf("--Error: deviceode[%d]->profile[%d].FrameRateLimit is more than %d fps! \n",index,i, MAXFRAMERATE);
            continue;
        }

        /* 检查码率1.5M */       
        /* 发现各种摄像头分包数、分包大小不同。
           有的每包1422byte,分包数超过15包
           有的每包8000byte,分包数随码率而变,
              512K 下分为3包,解码正常
              1024K下分为4包,I帧偶尔超过30K 
              1280K下分为5包,I帧经常超过30K
              1536K下分为7包,I帧超过40K
        */
        if(deviceode->profile[i].BitrateLimit > MAXBITRATELIMIT)
        {
            printf("--Error: deviceode[%d]->profile[%d].BitrateLimit is more than %d Kbs! \n",index,i,MAXBITRATELIMIT);
            continue;
        }
        
        deviceode->profile[i].support=1;  //通过检查设置为支持
        printf("--Find support profile: deviceode[%d]->profile[%d]. \n",index,i);
        support++;
    }

    if(support > 0)
        bret=TRUE;
    else
        bret=FALSE;
    return bret;
}

这篇关于linux设备上的Onvif 实现9:检查是否支持该设备的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1086661

相关文章

linux生产者,消费者问题

pthread_cond_wait() :用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread

C++对象布局及多态实现探索之内存布局(整理的很多链接)

本文通过观察对象的内存布局,跟踪函数调用的汇编代码。分析了C++对象内存的布局情况,虚函数的执行方式,以及虚继承,等等 文章链接:http://dev.yesky.com/254/2191254.shtml      论C/C++函数间动态内存的传递 (2005-07-30)   当你涉及到C/C++的核心编程的时候,你会无止境地与内存管理打交道。 文章链接:http://dev.yesky

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /opt/tomcat-10

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

通过SSH隧道实现通过远程服务器上外网

搭建隧道 autossh -M 0 -f -D 1080 -C -N user1@remotehost##验证隧道是否生效,查看1080端口是否启动netstat -tuln | grep 1080## 测试ssh 隧道是否生效curl -x socks5h://127.0.0.1:1080 -I http://www.github.com 将autossh 设置为服务,隧道开机启动

JavaScript全屏,监听页面是否全屏

在JavaScript中,直接监听浏览器是否进入全屏模式并不直接支持,因为全屏API主要是关于请求和退出全屏模式的,而没有直接的监听器可以告知页面何时进入或退出全屏模式。但是,你可以通过在你的代码中跟踪全屏状态的改变来模拟这个功能。 以下是一个基本的示例,展示了如何使用全屏API来请求全屏模式,并在请求成功或失败时更新一个状态变量: javascriptlet isInFullscreen =

(超详细)YOLOV7改进-Soft-NMS(支持多种IoU变种选择)

1.在until/general.py文件最后加上下面代码 2.在general.py里面找到这代码,修改这两个地方 3.之后直接运行即可

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents