持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情
前段时间又要开始整理视频录制的功能了,索性给大家分享下当年我开发的思路吧!
真的可以用想当年来说了,话说,这个功能还是我在2019年做的,因为项目需求又需要拿出来更新,时间过于久远,又顺了一遍代码以及功能,在这里给大家分享下!
设备:海康威视摄像头
设备类型:DS-2CD1201-I3
设备版本:V5.5.53build 180717
实现功能:
1:相机在线状态判断
2:开始录制、停止录制
3:直播控制
4:设置相机的配置参数,可在配置文件以及程序中同时应用
5:使用FFmpeg推流
网址打开方式:http://[IP]/doc/page/config.asp
注意:[IP]这里需要写当前对应的相机IP地址哦~
既然是二次开发了,对应的安装包啥的肯定一个也不能少,我们需要在电脑上安装设备网络搜索APP(一般二次开发时都会给到),用于检测海康相机在同一局域网中的在线状态。
实现流程:打开相机->打开直播->开始录像->停止录像->停止直播->退出相机
在这里,需要特别注意的是:一定要按照这个流程,否则小心程序崩溃哟~
今天的主要内容主要讲解:
搜素相机设备以及相机数据读取
第一步:环境配置
需要引用的头文件,如图所示:
在这里,用红边框标注的头文件是我们程序中需要调用的。
海康摄像头中用到的lib库
海康摄像头中用到的dll
注意:这离得HCNetSDKCom文件夹也需要放到与exe一致的环境。
第二步:搜索在线相机
在这里,需要注意的是,一般查看相机的状态时,需要保证搜索的主机与摄像头,最好在同一个局域网内。
这里并不是说,跨网的不可以哟,简单点来吧。省的实际搜索的时候找不到设备还不知道是什么原因,这里需要大家注意一些。
当前我的主机内存在一个在线设备,如图所示:
下一步我们就需要导出在线设备的摄像头。
点击界面上的导出按钮,会弹出一个提示框,需要输入输出位置,假设我们输出到F盘。
此时会生成一个camera.csv文件。
在程序中我们会根据当前文件来操作相机的各种功能。
以上我只是简单了说明了下使用,具体想了解是为什么这么操作,可以查看:设备网络搜索用户使用手册.pdf手册。这是在安装搜索设备时程序内部配置的。更细致的原理需要查看文档就可以了解了。
第三步:读取相机信息
在这里我们采用什么方式获取csv的数据呢?
因为要做二次开发以供项目使用,所以在这里编写的代码全部采用的纯C++版本的。
对于csv文件的读取采用fstream流的方式。
1:判断camera.csv文件是否存在
std::string sFilePath = ".\\FILES\\camera.csv";
//判断文件是否存在?
std::fstream _file;
_file.open(sFilePath , std::ios::in);
if (!_file)
{
_file.close();
return false; //文件路径不存在
}
_file.close();
2:读取文件内容
csv文件是一种excel表格形式。
每一条代表了不同的相机详细信息,我们在获取文件中内容时,也需要逐行读取数据,使用的方法getline
具体应用:
std::ifstream file(sFilePath , std::ios::in);
//逐行读取文件
std::string sLineData;
while (getline(file , sLineData))
{
//每一行的详细内容处理
}
file.close(); //关闭对文件的操作
sLineData中存储了每一行的数据,并且所有的数据以","分割开。
实际的展示效果大家可以调试运行查看的,这里不展示具体的展示内容了。
既然如此,我们也可以获取到每一个相机对应的不同参数内容了。
每一行的详细处理,如下操作:
std::stringstream ss(sLineData);
std::string strData;
std::vector<std::string> vetLineArray;
//根据","进行分割
while (getline(ss, strData, ','))
{
vetLineArray.push_back(strData); //一行数据以vector形式存储
}
这里的代码理解与上述一致,不做再次说明了。
数据读取出来之后,该如何记录呢?
采用std::vector<std::vector<std::string>>
容器方式存储。
外部vector:存储的是每一行数据
内部vector:记录每一条相机数据的详细信息内容
到这里,对camera.csv文件读取以及获取在线相机状态的方式已经讲解完成了,如何相机进行实际操作,我们下一篇文章继续更新哟~
我是中国好公民st,一名C++开发程序猿~