C++|海康摄像头实时预览时设置音量大小

使用海康API设置音量的函数是:NET_DVR_OpenSound。

在实际代码中我遇到了以下问题:

1:调用NET_DVR_OpenSound接口一直返回失败,错误是调用顺序出错。

2:音量设置不成功。

对于以上两种问题,我相信很多人都遇到了,前段时间尝试了各种方式,终于解决了!

下面我来讲述下我的解决方法把,希望对有需要的人有用!

在海康的设备网络SDK使用手册中,有这样一个调用流程,如图所示:

根据调用流程可以知道,先要调用NET_DVR_RealPlay_V30后才能调用NET_DVR_OpenSound接口。

但实际会发现,直接调用会有问题,一直返回错误说是调用顺序出错。那究竟是哪里出错了呢?看调用流程也没有问题呀?

经过测试发现,直接调用出错是因为相机的画面没有显示出来!!这是非常重要的。

此时,在调用NET_DVR_RealPlay_V30时,需要添加回调函数,要把NET_DVR_OpenSound放到回调函数中进行调用,实现方法如下:

NET_DVR_CLIENTINFO ClientInfo;//播放
memset(&ClientInfo, 0, sizeof(NET_DVR_CLIENTINFO));
ClientInfo.hPlayWnd = hwnd;//播放用控件
ClientInfo.lChannel = 1;
ClientInfo.lLinkMode = 0; //主流码
ClientInfo.sMultiCastIP = NULL;
LONG playHandle = NET_DVR_RealPlay_V30(loginID,&ClientInfo,g_ExceptionCallBack_RealPlay, nullptr);
if(playHandle==-1)
{DWORD dwErrorCode = NET_DVR_GetLastError();return false;
}

回调函数实现,如下:

//实时预览回调数据
void CALLBACK g_ExceptionCallBack_RealPlay(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void* pUser)
{//qDebug() << QStringLiteral("g_ExceptionCallBack_RealPlay返回数据类型:") << dwDataType;
}

经过查询SDK使用手册可以了解回调函数的具体参数情况,那么在什么情况下调用打开声音的函数呢?

dwDataType == NET_DVR_SYSHEAD,接收到系统头数据后就可以调用了,并且该类型只会在打开时调用一次,不会出现频繁调用的现象!

//实时预览回调数据
void CALLBACK g_ExceptionCallBack_RealPlay(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer, DWORD dwBufSize, void* pUser)
{//qDebug() << QStringLiteral("g_ExceptionCallBack_RealPlay返回数据类型:") << dwDataType;switch (dwDataType){case NET_DVR_SYSHEAD: //系统头,打开流{//打开声音bool bRet = NET_DVR_OpenSound(lRealHandle);if (bRet == FALSE){DWORD dwErrorCode = NET_DVR_GetLastError();qDebug() << QStringLiteral("<HKCameraControl::CameraPlay> NET_DVR_OpenSound设置声音的模仿模式错误!错误码:") << dwErrorCode;}}break;}
}

到这里,实时预览的摄像头声音NET_DVR_OpenSound函数就可以调用成功了!

接下来如果设置音量。

在这里,大家需要注意箭头指向的参数,取值范围在[0, 0xFFFF],不是我们常用的0-100的十进制数了。因为在设置的时候我并没有过多关注这一点,导致打开声音后无论怎么设置都没有音量,还研究了很长时间。

下面我把设置音量的代码分享给大家,需要对大家有所帮助!

//设置音量
WORD wTemp = (0xFFFF) / 100;
WORD wVolumevalue = (WORD)(50 * wTemp);
bRet = NET_DVR_Volume(lRealHandle, 0);
if (bRet == FALSE)
{DWORD dwErrorCode = NET_DVR_GetLastError();}

以上就是我解决出现两个问题的方法了。

能够成功实现后会发现,代码很简单,难得是不知道什么时候调用,以及对参数的正确引用。

我是糯诺诺米团,一名C++程序媛~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1472613.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

数据库国产化之路(一)

数据库国产化之路(一) 1、前言&#xff1a;适配海量数据库过程中的一些记录&#xff0c;备忘用 2、海量数据库基于的pg版本&#xff0c;查看PG_VERSION文件为9.2。 3、MySQL中的IF函数替代&#xff0c;一开始的方案是从网上找了个if函数&#xff0c;后来发现CASE WHEN其实能完成…

公共事件应急日常管理系统-计算机毕业设计源码40054

公共事件应急日常管理系统的设计与实现 摘 要 本研究基于Spring Boot框架&#xff0c;设计并实现了公共事件应急日常管理系统&#xff0c;旨在提升公共事件的应急响应和日常管理效率。系统包括应急资源管理、物资申请管理、物资发放管理、应急培训管理、科普宣教管理、公共事件…

SOLIDWORKS分期许可(订阅形式),降低前期的投入成本!

SOLIDWORKS 分期许可使您能够降低前期软件成本&#xff0c;同时提供对 SOLIDWORKS 新版本和升级程序的即时访问&#xff0c;以及在每个期限结束时调整产品的灵活性&#xff0c;帮助您跟上市场需求和竞争压力的步伐。 目 录&#xff1a; ★ 1 什么是SOLIDWORKS分期许可 ★ 2 …

网安小贴士(8)IPv4与IPv6

一、前言 IPv4和IPv6都是互联网协议&#xff08;IP&#xff09;的版本&#xff0c;它们用于在互联网上标识和定位设备。 二、定义 IPv4&#xff08;互联网协议第四版&#xff09;&#xff1a; IPv4是互联网协议的第一个广泛使用的版本&#xff0c;最初在1981年被标准化为RFC 7…

鸿蒙 HarmonyOS Next 路由 不废话 全干货

一、页面的创建 &#xff08;1&#xff09;直接通过创建一个新的Page的方式创建 &#xff08;2&#xff09;先创建一个 ArkTs File文件&#xff0c;然后在resources/base/profile/main_pages.json中加上页面对应的src路径&#xff0c;下面的Index_3.ets文件是通过创建ArkTs Fi…

【高性能服务器】select模型

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 IO多路复用就是复用…

基于DMAIC降低气缸体水套芯磕碰伤率

在制造业的激烈竞争中&#xff0c;产品质量的提升一直是企业追求的目标。气缸体作为汽车发动机的核心部件&#xff0c;其生产过程中的质量控制尤为重要。今天&#xff0c;深圳天行健企业管理咨询公司就来分享一下如何运用DMAIC&#xff08;定义、测量、分析、改进、控制&#x…

INTERCONNECT 使用脚本导入 Element Library 的器件

INTERCONNECT 使用脚本导入 Element Library 的器件 正文示例1示例2正文 在 INTERCONNECT 添加自定义器件到 Custom 文件夹下 一文中,我们介绍了如何将器件或者自定义器件添加到用户自定义的库中。那么我们如何从 Element Library 中导入我们需要的器件呢? 最简单的方式就是…

centos下编译安装redis最新稳定版

一、目标 编译安装最新版的redis 二、安装步骤 1、redis官方下载页面 Downloads - Redis 2、下载最新版的redis源码包 注&#xff1a;此时的最新稳定版是 redis 7.2.5 wget https://download.redis.io/redis-stable.tar.gz 3、安装编译环境 yum install -y gcc gcc-c …

计算机的错误计算(二十一)

摘要 两个不相等数相减&#xff0c;差为0&#xff1a; ? 在计算机的错误计算&#xff08;十九&#xff09;中&#xff0c;高中生小明发现本应为0的算式结果不为0. 今天他又发现对本不为0的算式&#xff0c;计算机的输出为0. 在 Python 中计算 &#xff1a; 则输出为0. 若用 C…

配置基于不同的主机名的虚拟主机

修改配置文件 <virtualhost 192.168.209.140:80> documentroot /www/haha servername www.haha.com </virtualhost><virtualhost 192.168.209.140:80> documentroot /www/xixi servername www.xixi.com </virtualhost>添加192.168.209.140IP地址 [ro…

【网络安全的神秘世界】SQL注入(下)

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 3.7 二次注入 不好挖这个漏洞&#xff0c;需要搞懂业务逻辑关系 二次注入通常是指在存入数据库时做了过滤&#xff0c;但是取…

创建react的脚手架

Create React App 中文文档 (bootcss.com) 网址&#xff1a;creat-react-app.bootcss.com 主流的脚手架&#xff1a;creat-react-app 创建脚手架的方法&#xff1a; 方法一&#xff08;JS默认&#xff09;&#xff1a; 1. npx create-react-app my-app 2. cd my-app 3. …

视频提取字幕怎么弄?5个快速获取视频字幕的方法

在忙碌而又充满活力的生活中&#xff0c;我们常常在通勤路上和午休间隙通过视频来获取信息和放松心情。 但有时候&#xff0c;我们想把视频里那些令人难忘的瞬间或关键信息保存下来&#xff0c;方便以后回顾或者分享。然而&#xff0c;手动摘录不仅费时&#xff0c;还容易漏掉…

Python爬取豆瓣电影+数据可视化,爬虫教程!

1. 爬取数据 1.1 导入以下模块 import os import re import time import requests from bs4 import BeautifulSoup from fake_useragent import UserAgent from openpyxl import Workbook, load_workbook1.2 获取每页电影链接 def getonepagelist(url,headers):try:r reque…

[A-03] ARMv8/ARMv9-多级Cache架构

ver 0.1 前言 前面文章我介绍了Cache的基本架构、Cache的详细的结构&#xff0c;有了一定的cache的基础&#xff0c;对cache机制也有了sense。实际上Cache作为CPU架构中存储机制的核心组件和CPU的微架构以及系统的总线架构还是密切相关的&#xff0c;不同的体系下&#xff0c…

在AvaotaA1全志T527开发板上使用AvaotaOS 部署 LNMP 服务

准备工作 在这之前&#xff0c;确保设备已经联网&#xff0c;可以用 ifconfig 命令查看联网状态。这里使用的是 WIFI 联网&#xff0c;可以看到已经获取了IP地址。 由于安装需要较长时间&#xff0c;建议使用 screen 后台登录&#xff0c;这里看到系统默认已经安装了 screen …

昇思25天学习打卡营第12天|ResNet50迁移学习

昇思25天学习打卡营第12天|ResNet50迁移学习 前言ResNet50迁移学习数据准备下载数据集 加载数据集数据集可视化 训练模型构建Resnet50网络固定特征进行训练训练和评估可视化模型预测 个人任务打卡&#xff08;读者请忽略&#xff09;个人理解与总结 前言 非常感谢华为昇思大模型…

昇思MindSpore学习入门-回调机制

在深度学习训练过程中&#xff0c;为及时掌握网络模型的训练状态、实时观察网络模型各参数的变化情况和实现训练过程中用户自定义的一些操作&#xff0c;MindSpore提供了回调机制&#xff08;Callback&#xff09;来实现上述功能。 Callback回调机制一般用在网络模型训练过程M…

sublime如何运行Html文件?

背景&#xff1a; 在sublime上面写了html代码以后&#xff0c;怎么运行html文件来进行debug呢&#xff1f;如果去点击保存的HTML文件&#xff0c;每次这样就会很麻烦&#xff0c;能不能直接在sublime里面点什么就可以直接打开浏览器运行呢&#xff1f;答案是OK的。 1-确认Vie…