海康威视SDK控制台程序consoleDemo将实时码流保存为视频文件

2022-11-23 1394阅读

温馨提示:这篇文章已超过867天没有更新,请注意相关的内容是否还可用!

海康威视SDK控制台程序consoleDemo将实时码流保存为视频文件

海康威视SDK控制台程序consoleDemo将实时码流保存为视频文件
(图片来源网络,侵删)
海康威视SDK控制台程序consoleDemo将实时码流保存为视频文件
(图片来源网络,侵删)

陈拓 2021/08/28-2020/08/29

1. 概述

在《海康威视SDK控制台程序consoleDemo》

zhuanlan.zhihu.com/p/403903892

blog.csdn.net/chentuo2000/article/details/119939573

一文中我们已经编译成功了海康威视SDK的控制台程序consoleDemo。

在《海康威视SDK控制台程序consoleDemo获取视频通道参数》

zhuanlan.zhihu.com/p/404390272

blog.csdn.net/chentuo2000/article/details/119963580

一文中我们获取到了NVR的视频通道号。

在《海康威视SDK控制台程序consoleDemo获取码流》

zhuanlan.zhihu.com/p/404556277

blog.csdn.net/chentuo2000/article/details/119971526

一文中我们获取到了实时视频的码流。

本文我们码流数据保存为视频文件。

2. 重写GetStream.cpp

将GetStream.cpp原来的全部代码删除,替换成下面的代码:

#include  
#include "HCNetSDK.h"
#include "public.h"
#include 
#include 
#include 
#include 
using namespace std;
void CALLBACK g_RealDataCallBack_V30(LONG lRealHandle, DWORD dwDataType, BYTE *pBuffer,DWORD dwBufSize,void* dwUser) {

printf("pyd---(private_v30)Get data,the size is %ld,%d.\n", time(NULL), dwBufSize); } int Demo_GetStream_V30(LONG lUserID) { long lRealPlayHandle; NET_DVR_PREVIEWINFO struPlayInfo = {0}; struPlayInfo.hPlayWnd = 0; // 仅取流不解码。这是Linux写法,Windows写法是struPlayInfo.hPlayWnd = NULL; struPlayInfo.lChannel = 33; // 通道号 struPlayInfo.dwStreamType = 0; // 0- 主码流,1-子码流,2-码流3,3-码流4,以此类推 struPlayInfo.dwLinkMode = 0; // 0- TCP方式,1- UDP方式,2- 多播方式,3- RTP方式,4-RTP/RTSP,5-RSTP/HTTP struPlayInfo.bBlocked = 1; // 0- 非阻塞取流,1- 阻塞取流 //struPlayInfo.dwDisplayBufNum = 1;

//lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, g_RealDataCallBack_V30, NULL); // NET_DVR_RealPlay_V40 实时预览(支持多码流)。 lRealPlayHandle = NET_DVR_RealPlay_V40(lUserID, &struPlayInfo, NULL, NULL); // NET_DVR_RealPlay_V40 实时预览(支持多码流)。 //lRealPlayHandle = NET_DVR_RealPlay_V30(lUserID, &ClientInfo, NULL, NULL, 0); // NET_DVR_RealPlay_V30 实时预览。 if (lRealPlayHandle < 0) { printf("NET_DVR_RealPlay_V40 error, %d\n", NET_DVR_GetLastError()); return HPR_ERROR; } cout << "取流成功!" << endl; if (!NET_DVR_SaveRealData(lRealPlayHandle, (char *)"./test.mp4")) { printf("保存到文件失败 错误码:, %d\n", NET_DVR_GetLastError()); }

printf("保存到文件test.mp4\n"); sleep(5); // 取流时间长度 秒 NET_DVR_StopRealPlay(lRealPlayHandle); // 停止取流 return HPR_OK; }

说明:

保存的录像文件大小

V5.0.3.2或以后版本,通过该接口保存录像,保存的录像文件数据超过文件最大限制字节数(默认为1024MB)海康视频服务器 操作系统,SDK会自动切片,即新建文件进行保存海康视频服务器 操作系统,文件名命名规则为“在接口传入的文件名基础上增加数字标识(例如:*_1.mp4、*_2.mp4)”。可以调用NET_DVR_GetSDKLocalCfg、NET_DVR_SetSDKLocalCfg(配置类型:NET_DVR_LOCAL_CFG_TYPE_GENERAL)获取和设置切片模式和文件最大限制字节数。

3. 编译、运行

编译运行操作见概述中提到的《海康威视SDK控制台程序consoleDemo》一文。

在菜单中选择1,运行结果:

视频文件回放

视频文件在远程Linux系统上,我们先将视频文件下载到本地。

视频文件是海康的自有格式,需要用海康的专用播放器播放。

海康客户端软件下载网址:

hikvision.com/cn/support/Downloads/Desktop-Application/

海康播放器:

要用通用播放器播放海康视频文件需要转换格式,海康虽然提供了录像文件转换工具,但是并不好用。后面的文章中我们用FFMpeg转换格式。

见《ffmpge海康视频文件格式转换》

zhuanlan.zhihu.com/p/404676632

blog.csdn.net/chentuo2000/article/details/119977603

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]