海康威视SDK视频录制及强制I帧操作

这篇具有很好参考价值的文章主要介绍了海康威视SDK视频录制及强制I帧操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、NET_DVR_SaveRealData方法

使用下面方法可以实现视频录像功能。

    private HCNetSDK sdk = HCNetSDK.INSTANCE;
    sdk.NET_DVR_SaveRealData_V30(cameraInfo.getKey(), file.getPath() + "/" + fileName + ".mp4")

该方法有个问题,视频可以录制,但是不能被前端页面直接加载播放,因为视频编码格式问题,虽然可以用FFMPEG工具进行格式转化,但是引入第三方的库,无疑会使代码的维护性降低。

FFMPEG工具 地址 提取码 zc14
使用FFmpeg进行转换的方法如下:

ffmpeg -i  in.mp4  out.mp4

该方法网络上有大量的帖子,我直接放连接过来,可以自行前往学习
大牛博客地址

二、NET_DVR_SaveRealData_V30方法

这个方法是问海康的工程师得到的,跟海康的工程师交流还是挺美好的,工程师很耐心,直到自己的问题得到解答,代码测试通过,所以还是必须给点个赞。

附上该方法的SDK文档

海康威视SDK视频录制及强制I帧操作

按照SDK文档的说明,第二个参数传2,就可以了

  //预览成功后 调用接口使视频资源保存到文件中
     if (!sdk.NET_DVR_SaveRealData_V30(cameraInfo.getKey(), 2,file.getPath() + "/" + fileName + ".mp4")) {
         log.error("保存视频文件到文件夹失败 错误码为:  " + sdk.NET_DVR_GetLastError());
         logoutHIK(cameraInfo);
         return;
     }

到这里会发现一个问题,官方下载的SDK HCNetSDK.java文件中没有NET_DVR_SaveRealData_V30这个方法,尴尬了。
这就是官方SDK的坑点,SDK中有,但是HCNetSDK.java文件中没有,好多同学可能都会懵一下,这里可以将SDK中的方法直接复制进HCNetSDK.java文件即可。SDK是按照C语言来描述的,JAVA要做响应的适配改变。

 boolean  NET_DVR_SaveRealData_V30(NativeLong lRealHandle,int STREAM_TYPE,String sFileName);

OK,到此视频已经可以存储,播放也正常,但是你又会发现一个新的问题,就是保存的视频,设定1分钟,但是只有51秒 ,52秒,57秒等,就是没有1分钟的,甚至59秒的都很少,如果要求不那么高还好,到这里就可以结束了,如果要求的高,那就得做出处理了。

三、强制I帧

这里面其实是有一个 I帧的定义

录像数据解码播放必须从I帧开始,而客户端录像的时候开始时间点不一定是I帧,比如帧率25fps、I帧间隔100帧的情况下,每4秒才一个I帧,录像播放可能存在1~4秒的延时,所以录像的时候可以强制设备生成一个I帧。
NET_DVR_MakeKeyFrame强制主码流生成一个I帧,NET_DVR_MakeKeyFrameSub强制子码流生成一个I帧,z这两个是老的接口。
后来因为设备不只有主码流和子码流,还有三码流、虚拟码流等,因此增加了NET_DVR_RemoteControl(命令:NET_DVR_MAKE_I_FRAME)接口,兼容前面的两个接口,输入参数NET_DVR_I_FRAME中byStreamType表示码流类型。建议使用该接口。

可以看到,如果I帧没有到,也是不录视频的,但是I帧一般会慢几秒中,所以视频长度不够自己配置的长度

需要用到NET_DVR_RemoteControl 这个方法,会发现 HCNetSDK.java文件中并没有NET_DVR_RemoteControl 这个方法,继续添加上。

附上NET_DVR_RemoteControl 的SDK海康威视SDK视频录制及强制I帧操作
同样,在 HCNetSDK.java文件中增加这个方法(根据java做了语法转换,如果不好转,请参考原HCNetSDK.java文件中的数据类型)

 boolean NET_DVR_RemoteControl(NativeLong lUserID, int dwCommand, Pointer pointer, int dwInBufferSize);

官方SDK简直了,有些方法没有,就连结构体也没有,都需要自己新增,没办法,谁让咱要用人家的产品么
lpInBuffer参数对应结构体 NET_DVR_I_FRAME
看SDK手册 NET_DVR_I_FRAME 结构体的官方文档
海康威视SDK视频录制及强制I帧操作

//强制I帧参数结构体。
public static class NET_DVR_I_FRAME extends Structure{
    public int dwSize;
    public byte[] sStreamID = new byte[32];  //流IDs    SDK 中对  STREAM_ID_LEN进行了定义,赋值32
    public int dwChannel;//通道号
    public byte byStreamType; //码流类型:0-主码流,1-子码流,2-码流3,3-虚拟码流,以此类推
    public byte[] byRes = new byte[63];  //保留,置为0    按照SDK要求进行对应赋值
}
//新建结构体对象
        HCNetSDK.NET_DVR_I_FRAME netDvrIFrame = new HCNetSDK.NET_DVR_I_FRAME();   //新建结构体对象
        netDvrIFrame.read();
        netDvrIFrame.dwChannel = 1;          //因为上文代码中设置了通道号,按照上文中的设置
        netDvrIFrame.byStreamType = 0;
        netDvrIFrame.dwSize = netDvrIFrame.size();
        netDvrIFrame.write();

        if(!sdk.NET_DVR_RemoteControl(cameraInfo.getUserId(),3402,netDvrIFrame.getPointer(),netDvrIFrame.dwSize)){
            log.error("强制I帧 错误码为:  " + sdk.NET_DVR_GetLastError());
        }

在每次录像之前,对I帧进行强制设置,可以及时录像,经过测试基本上按照配置的时间进行录制,比如1分钟就是1分钟,偶尔有59秒的情况,提到的问题已经大大的修复了。经次一轮,对SDK的使用也有了更深的了解。自己踩过的坑,也记录下来,也让别人能很好的使用官方的SDK。

最后附上程序,欢迎下载传阅,另外还有海康工程师给的有更全结构体的HCNetSDK.java文件
百度网盘 链接:https://pan.baidu.com/s/1JEKvEnb5wTDtmNqlNsKvLg
提取码:x4bj文章来源地址https://www.toymoban.com/news/detail-424130.html

到了这里,关于海康威视SDK视频录制及强制I帧操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 海康威视相机SDK二次开发(JAVA语言)

    前言 有个项目需要使用java程序读取海康威视的相机图片。相机通过以太网连接服务器,部署在服务器上的java程序将相机拍摄的画面保存在指定路径下。 海康威视提供了sdk开发包,可以在官网中下载,windows和linux系统都有。但是开发包中给出的示例代码,无法满足实际需要,

    2024年04月29日
    浏览(46)
  • 海康威视监控相机的SDK与opencv调用(非工业相机)

    本篇主要对海康威视的监控相机的SDK回调进行研究,并于opencv结合,保存图像,以供后续其他处理,开发语言为C++ 2.1 海康SDK介绍 海康SDK下载地址 根据自身编译环境,下载对应的SDK,需要注意的是,不要和工业相机SDK相混淆,工业相机好像是MVS是什么玩意儿,现在暂时没研究

    2024年02月04日
    浏览(60)
  • 如何降低海康、大华等网络摄像头调用的高延迟问题(一):海康威视网络摄像头的python sdk使用(opencv读取sdk流)

    目录 1.python sdk使用 1.海康SDK下载  2.opencv读取sdk流  先说效果,我是用的AI推理的实时流,延迟从高达7秒降到小于1秒 如果觉得这个延迟还不能接受,下一章,给大家介绍点上不得台面的小方法 SDK(Software Development Kit)是软件开发工具包的缩写,它是一组用于开发特定软件或

    2024年02月07日
    浏览(92)
  • unity海康威视原生SDK拉取网络摄像头画面,并展示在一个Material上

    untiy版本是2019.4,低版本会有问题,速度比UMP插件快得多 原理是使用sdk获取视频流,格式为YUV,然后分离YUV通道到三张不同的Texture2D上,通过shader将三个通道重新输出为原始图像。 我将所用的各个部分已经整理成一个压缩包,免积分下载 压缩包结构如下 使用步骤 1 DLL:放在

    2024年02月13日
    浏览(45)
  • 海康威视摄像头对接SDK实时预览功能和抓拍功能,懒癌福利,可直接CV

    最近在新系统的研发中负责了视频监控模块的开发,项目监控设备全部采用海康的摄像头,枪机、球机都有,开发的过程中,有个需求是在前端页面上把摄像头画面进行平铺展示,最开始的方案是通过官方API完成,但是后面发现项目上所有的设备都是不联网的,所以只能转由

    2024年02月02日
    浏览(48)
  • 【项目实践】海康威视工业相机SDK开发小白版入门教程(VS2015+OpenCV4.5.1)

      由于学校要求暑期实习,于是找了一位学长开的公司,接了一个项目,是 对海康威视工业相机(MV_CE200_10GM)进行二次开发,读取其图像并做分析处理。 于是花了一点时间查找的相关资料并记录一些 入门要点 。   想先说说一些 “尝试授人与渔” 的话,也是自己的一

    2024年02月04日
    浏览(49)
  • vue+海康威视视频web插件开发

    下载地址:海康威视官网 下载页面 文件解压后的目录 运行bin文件下的VideoWebPlugin.exe demo/demo_window_integration.html 包含了插件所有功能的,可参照此demo来开发、验证功能、排查问题 demo/demo_window_simple_playback.html.html  视频回放,可在此基础上二次开发 demo/demo_window_simple_preview.ht

    2023年04月08日
    浏览(84)
  • 海康威视工业相机Linux SDK开发指南详细步骤(Ubuntu20.04+单目、双目相机单次、连续拍照)

    由于实验需要使用双目相机同步采集图像,实验室准备的设备是海康威视的工业相机,对其进行二次开发,其中花了大部分时间查找资料,以及代码进行反复调试,最后到达了想要的效果,并写博客记录一下。 首先是资料的查找,我们要注意的是海康威视一共有两个官网,一

    2024年02月16日
    浏览(112)
  • 海康威视摄像头播放录像视频(RTSP协议)

    旧URL:rtsp://[username]:[password]@[ipaddress]/[videotype]/ch[number]/[streamtype] 如:rtsp://admin:12345@192.168.25.64:554/h264/ch1/main/av_stream 新URL:rtsp://[username]:[password]@[IP]:554/Streaming/Channels/[channelID][streamID] 如:rtsp://admin:12345@192.168.25.64:554/Streaming/Channels/101 录像机其实和摄像机基本一样,旧URL中摄像

    2024年02月12日
    浏览(76)
  • 海康威视监控视频,萤石云免费版四路并发访问限制绕过

    公司新装了不少海康威视摄像头,通过NVR连接到了萤石云,由于萤石云免费版限制了单个摄像头的并发访问数(每个摄像头同时只允许4个用户进行查看实时视频),但是又不想付费购买企业版,于是着手思考如何解决这个问题。 需求 需求很明确,每个摄像头需要支持多用户

    2023年04月08日
    浏览(104)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包