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.mzph.cn/pingmian/41370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实现Java应用的数据加密与解密技术

实现Java应用的数据加密与解密技术 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 数据加密与解密的重要性 数据安全是当今互联网应用开发中的重要问题之…

FineBI在线学习资源-数据处理

FineBI在线学习资源汇总&#xff1a; 学习资源 视频课程 帮助文档 问答 数据处理学习文档&#xff1a; 相关资料&#xff1a; 故事背景概述-https://help.fanruan.com/finebi6.0/doc-view-1789.html 基础表处理-https://help.fanruan.com/finebi6.0/doc-view-1791.html …

六西格玛绿带培训如何告别“走过场”?落地生根

近年来&#xff0c;六西格玛绿带培训已经成为了众多企业提升管理水平和员工技能的重要途径。然而&#xff0c;不少企业在实施六西格玛绿带培训时&#xff0c;往往陷入形式主义的泥潭&#xff0c;导致培训效果大打折扣。那么&#xff0c;如何避免六西格玛绿带培训变成“走过场”…

【重磅】万能模型-直接能换迪丽热巴的模型

万能模型&#xff0c;顾名思义&#xff0c;不用重新训练src&#xff0c;直接可以用的模型&#xff0c;适应大部分原视频脸 模型用法和正常模型一样&#xff0c;但可以跳过训练阶段&#xff01;直接到合成阶段使用该模型 本模型没有做Xseg&#xff0c;对遮挡过多的画面不会自动适…

LiteFlow介绍、原理解析以及应用场景

LiteFlow介绍 LiteFlow是一个由Baidu开源的轻量级、快速、稳定且可编排的组件式规则引擎框架。它专注于逻辑驱动流程编排&#xff0c;通过组件化方式快速构建和执行业务流程&#xff0c;有效解耦复杂业务逻辑。LiteFlow的设计基于工作台模式&#xff0c;其中每个业务组件相当于…

【C++】 解决 C++ 语言报错:Double Free or Corruption

文章目录 引言 双重释放或内存破坏&#xff08;Double Free or Corruption&#xff09;是 C 编程中常见且严重的内存管理问题。当程序尝试多次释放同一块内存或对已经释放的内存进行操作时&#xff0c;就会导致双重释放或内存破坏错误。这种错误不仅会导致程序崩溃&#xff0c…

谷粒商城学习-07-虚拟机网络设置

文章目录 一&#xff0c;找到配置文件Vagrantfile二&#xff0c;查询虚拟机网卡地址1&#xff0c;查看虚拟机网络配置2&#xff0c;查看宿主机网络配置 三&#xff0c;修改配置文件下的IP配置四&#xff0c;重新启动虚拟机即可生效五&#xff0c;Vagrantfile 的作用1&#xff0…

Java项目:基于SSM框架实现的校园快递代取管理系统【ssm+B/S架构+源码+数据库+毕业论文】

一、项目简介 本项目是一套基于SSM框架实现的校园快递代取管理系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、…

Solo 开发者周刊 (第12期):连接独立开发者,共享开源智慧

这里会整合 Solo 社区每周推广内容、产品模块或活动投稿&#xff0c;每周五发布。在这期周刊中&#xff0c;我们将深入探讨开源软件产品的开发旅程&#xff0c;分享来自一线独立开发者的经验和见解。本杂志开源&#xff0c;欢迎投稿。 产品推荐 1、Soju————一个现代的书签…

【C++】 解决 C++ 语言报错:Undefined Reference

文章目录 引言 未定义引用&#xff08;Undefined Reference&#xff09;是 C 编程中常见的错误之一&#xff0c;通常在链接阶段出现。当编译器无法找到函数或变量的定义时&#xff0c;就会引发未定义引用错误。这种错误会阻止生成可执行文件&#xff0c;影响程序的正常构建。本…

探索 Kali Linux:定义、架构、原理、应用场景及常见命令体系

Kali Linux 是一个广受欢迎的开源 Linux 发行版&#xff0c;专门为信息安全工作者和渗透测试员设计。本文将深入探讨 Kali Linux 的定义、架构、工作原理、应用场景&#xff0c;以及常用命令&#xff0c;帮助读者全面了解这个强大的安全工具。 一、Kali Linux 的定义 Kali Lin…

扁鹊三兄弟的启示,探寻系统稳定的秘诀

一、稳定性的重要性 1. 公司收益的角度 从公司收益的视角审视&#xff0c;系统不稳定可能会引发直接损失。例如&#xff0c;当系统突然出现故障导致交易中断时&#xff0c;可能造成交易款项的紊乱、资金的滞留或损失&#xff0c;这不但会阻碍当前交易的顺利完成&#xff0c;还…

SpringbootAOP的入门程序

1、SpringbootAOP的入门 1、添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>2、写serivce代码 public interface IUserService {void save();void …

长沙(市场调研公司)源点 企业如何决定是否需要开展市场调研?

长沙源点调研咨询认为&#xff1a;对于一个特定问题&#xff0c;管理者在面临几种解决问题的方案时&#xff0c;不应该凭直觉草率开展应用性市场调研。事实上&#xff0c;首先需要做的决策是是否需要开展调研。在下述情况下&#xff0c;最好不要做调研&#xff1a; *缺乏资源。…

【qt】如何获取网卡的信息?

网卡不只一种,有有线的,有无线的等等 我们用QNetworkInterface类的静态函数allInterfaces() 来获取所有的网卡 返回的是一个网卡的容器. 然后我们对每个网卡来获取其设备名称和硬件地址 可以通过静态函数humanReadableName() 来获取设备名称 可以通过静态函数**hardwareAddre…

使用OpenCV对图像进行三角形检测、颜色识别与距离估算【附代码】

文章目录 前言功能概述必要环境一、代码结构1. 参数定义2. 距离估计3. 颜色转换4. 图像处理函数4.1 读取图像和预处理4.2 轮廓检测4.3 过滤面积并检测三角形4.4 提取边框并计算距离 二、效果展示红色三角形绿色三角形蓝色三角形黄色三角形 三、完整代码获取总结 前言 本文将介…

如何远程访问运行电脑上运行的程序?

远程访问运行电脑上运行的程序的实用指南 一、使用远程桌面协议&#xff08;RDP&#xff09;适用场景配置步骤 二、利用虚拟网络计算&#xff08;VNC&#xff09;适用范围配置过程 三、通过 SSH 隧道主要针对实现方式 四、借助 TeamViewer 等第三方工具特点使用方法 五、注意事…

springai+pgvector+ollama实现rag

首先在ollama中安装mofanke/dmeta-embedding-zh:latest。执行ollama run mofanke/dmeta-embedding-zh 。实现将文本转化为向量数据 接着安装pgvector&#xff08;建议使用pgadmin4作为可视化工具&#xff0c;用navicate会出现表不显示的问题&#xff09; 安装好需要的软件后我们…

【Linux进阶】磁盘分区3——目录树,挂载

Linux安装模式下&#xff0c;磁盘分区的选择&#xff08;极重要&#xff09; 在Windows 系统重新安装之前&#xff0c;你可能会事先考虑&#xff0c;到底系统盘C盘要有多大容量&#xff1f;而数据盘D盘又要给多大容量等&#xff0c;然后实际安装的时候&#xff0c;你会发现其实…

linux 下载依赖慢和访问github代码慢

1 pip install 下载依赖慢&#xff0c;添加清华镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple 2 git 出现错误 Could not resolve host: github.com 原来是因为github.com没有被主机给解析&#xff0c; 第一步 先 ping 看一下主机地址 …