热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

设备sdk海康,大华SDK

海康SDK包可以从海康的官网上下载到。海康SDK可用于开发海康相机,海康DVR等,主要分两块,取码流模块,解码模块ÿ

   海康SDK包可以从海康的官网上下载到。

    海康SDK可用于开发海康相机,海康DVR等,主要分两块,取码流模块,解码模块;大华的SDK跟海康的类似。

1 取码流模块。

主要函数解释如下:

// 打开
NET_DVR_Init :初始化SDK,初始化SOCKET等。
NET_DVR_Login_V30 :登陆,建立业务链路。
NET_DVR_SetAudioMode:设置声卡模式,是独占,还是共享。
NET_DVR_RealPlay:开始点播视频。
NET_DVR_OpenSoundShare:共享模式下开启声音。
NET_DVR_SetRealDataCallBack:设置码流回调,在回调函数里就能得到码流。

NET_DVR_SetStandardDataCallBack用于捕获实时码流数据(标准码流)。回调的第一个包是40个字节的文件头,供后续解码使用,之后回调的是标准码流(含12字节的RTP头)。此函数目前仅支持对于支持RTSP协议取流的设备的标准码流回调。
NET_DVR_GetDVRConfig:登陆以后可以获取设备的配置信息。
//关闭
NET_DVR_StopRealPlay:关闭视频点播。
NET_DVR_Logout_V30:退出登陆。
NET_DVR_Cleanup:反初始化。
NET_DVR_GetLastError:得到错误号。

2 解码模块

解码后的分辨率主要为yuv420,yv12.

主要函数的解码如下:

PlayM4_GetPort:获取未使用的通道号,起始位101,上限为500,估计是支持同时解码400路。
PlayM4_SetStreamOpenMode:设置流播放模式。有流模式(会尽量保证实时性,防止数据阻塞,而且数据检查严格),文件模式(跟流模式相反)。
PlayM4_FreePort:释放已使用的通道号。
PlayM4_CloseStream:关闭流,估计是释放为解码准备的BUF。
PlayM4_SetDecCallBack:设置解码后的回调。
PlayM4_Play:开始解码。
PlayM4_PlaySoundShare:以共享方式打开声音。
PlayM4_InputData:输入数据。
AnalyzeDataInputData:分析码流根式。
PlayM4_Stop:停止解码。
PlayM4_CloseStream:关闭流,估计是释放BUF。
PlayM4_StopSoundShare:关闭声音。

3 调用DEMO 

参见海康SDK的DEMO。

4遇到的问题 

1.录像有音频,但解码后没有音频回调。
答:
可能1:确保配置成音视频混合。
可能2: PlayM4_PlaySoundShare(lPort); PlayM4_Play(lPort, NULL);改成: PlayM4_Play(lPort, NULL);PlayM4_PlaySoundShare(lPort);
2.用解码前回调录的视频,解码后有跳帧。
答:解码前加上  PlayM4_CheckDiscontinuousFrameNum(m_nChannelID,FALSE);
3.PlayM4_InputData()之后出现错误“buffer is overflow”。
答:设置的buf过小,PlayM4_OpenStream设置BUF的大小改成6*1024*1024。

4.时间戳是什么时候打的?

答:实时流,解码前数据可能是多包,打时间戳不合适,解码后的时间戳是数据编码时的时间戳;如果是录像,解码后的时间戳是打的相对时间戳。

附:

 /*******************海康全局错误码 begin**********************/ 
#define NET_DVR_NOERROR      0 //没有错误
#define NET_DVR_PASSWORD_ERROR     1 //用户名密码错误
#define NET_DVR_NOENOUGHPRI     2 //权限不足
#define NET_DVR_NOINIT       3 //没有初始化
#define NET_DVR_CHANNEL_ERROR     4 //通道号错误,比如输入-1通道
#define NET_DVR_OVER_MAXLINK     5 //连接到DVR的客户端个数超过最大
#define NET_DVR_VERSIONNOMATCH    6 //版本不匹配
#define NET_DVR_NETWORK_FAIL_CONNECT  7 //连接服务器失败
#define NET_DVR_NETWORK_SEND_ERROR   8 //向服务器发送失败
#define NET_DVR_NETWORK_RECV_ERROR   9 //从服务器接收数据失败
#define NET_DVR_NETWORK_RECV_TIMEOUT  10 //从服务器接收数据超时
#define NET_DVR_NETWORK_ERRORDATA   11 //传送的数据有误
#define NET_DVR_ORDER_ERROR     12 //调用次序错误
#define NET_DVR_OPERNOPERMIT    13 //无此权限
#define NET_DVR_COMMANDTIMEOUT    14 //DVR命令执行超时
#define NET_DVR_ERRORSERIALPORT    15 //串口号错误
#define NET_DVR_ERRORALARMPORT    16 //报警端口错误
#define NET_DVR_PARAMETER_ERROR    17  //参数错误
#define NET_DVR_CHAN_EXCEPTION    18 //服务器通道处于错误状态
#define NET_DVR_NODISK      19 //没有硬盘
#define NET_DVR_ERRORDISKNUM    20 //硬盘号错误
#define NET_DVR_DISK_FULL     21 //服务器硬盘满
#define NET_DVR_DISK_ERROR     22 //服务器硬盘出错
#define NET_DVR_NOSUPPORT     23 //服务器不支持
#define NET_DVR_BUSY      24 //服务器忙
#define NET_DVR_MODIFY_FAIL     25 //服务器修改不成功
#define NET_DVR_PASSWORD_FORMAT_ERROR  26 //密码输入格式不正确
#define NET_DVR_DISK_FORMATING    27 //硬盘正在格式化,不能启动操作
#define NET_DVR_DVRNORESOURCE    28 //DVR资源不足
#define NET_DVR_DVROPRATEFAILED    29  //DVR操作失败
#define NET_DVR_OPENHOSTSOUND_FAIL    30  //打开PC声音失败
#define NET_DVR_DVRVOICEOPENED     31  //服务器语音对讲被占用
#define NET_DVR_TIMEINPUTERROR    32  //时间输入不正确
#define NET_DVR_NOSPECFILE     33  //回放时服务器没有指定的文件
#define NET_DVR_CREATEFILE_ERROR   34 //创建文件出错
#define NET_DVR_FILEOPENFAIL    35  //打开文件出错
#define NET_DVR_OPERNOTFINISH    36  //上次的操作还没有完成
#define NET_DVR_GETPLAYTIMEFAIL    37  //获取当前播放的时间出错
#define NET_DVR_PLAYFAIL     38  //播放出错
#define NET_DVR_FILEFORMAT_ERROR   39  //文件格式不正确
#define NET_DVR_DIR_ERROR     40 //路径错误
#define NET_DVR_ALLOC_RESOURCE_ERROR  41  //资源分配错误
#define NET_DVR_AUDIO_MODE_ERROR   42 //声卡模式错误
#define NET_DVR_NOENOUGH_BUF    43 //缓冲区太小
#define NET_DVR_CREATESOCKET_ERROR    44 //创建SOCKET出错
#define NET_DVR_SETSOCKET_ERROR    45 //设置SOCKET出错
#define NET_DVR_MAX_NUM      46 //个数达到最大
#define NET_DVR_USERNOTEXIST    47 //用户不存在
#define NET_DVR_WRITEFLASHERROR    48  //写FLASH出错
#define NET_DVR_UPGRADEFAIL     49  //DVR升级失败
#define NET_DVR_CARDHAVEINIT    50  //解码卡已经初始化过
#define NET_DVR_PLAYERFAILED    51 //调用播放库中某个函数失败
#define NET_DVR_MAX_USERNUM     52  //设备端用户数达到最大
#define NET_DVR_GETLOCALIPANDMACFAIL  53  //获得客户端的IP地址或物理地址失败
#define NET_DVR_NOENCODEING     54 //该通道没有编码
#define NET_DVR_IPMISMATCH     55 //IP地址不匹配
#define NET_DVR_MACMISMATCH     56 //MAC地址不匹配
#define NET_DVR_UPGRADELANGMISMATCH   57 //升级文件语言不匹配
#define NET_DVR_MAX_PLAYERPORT    58 //播放器路数达到最大
#define NET_DVR_NOSPACEBACKUP    59 //备份设备中没有足够空间进行备份
#define NET_DVR_NODEVICEBACKUP    60 //没有找到指定的备份设备
#define NET_DVR_PICTURE_BITS_ERROR   61 //图像素位数不符,限24色
#define NET_DVR_PICTURE_DIMENSION_ERROR  62 //图片高*宽超限, 限128*256
#define NET_DVR_PICTURE_SIZ_ERROR   63 //图片大小超限,限100K
#define NET_DVR_LOADPLAYERSDKFAILED   64 //载入当前目录下Player Sdk出错
#define NET_DVR_LOADPLAYERSDKPROC_ERROR  65 //找不到Player Sdk中某个函数入口
#define NET_DVR_LOADDSSDKFAILED    66 //载入当前目录下DSsdk出错
#define NET_DVR_LOADDSSDKPROC_ERROR      67 //找不到DsSdk中某个函数入口
#define NET_DVR_DSSDK_ERROR     68 //调用硬解码库DsSdk中某个函数失败
#define NET_DVR_VOICEMONOPOLIZE    69 //声卡被独占
#define NET_DVR_JOINMULTICASTFAILED   70 //加入多播组失败
#define NET_DVR_CREATEDIR_ERROR    71 //建立日志文件目录失败
#define NET_DVR_BINDSOCKET_ERROR   72 //绑定套接字失败
#define NET_DVR_SOCKETCLOSE_ERROR   73 //socket连接中断,此错误通常是由于连接中断或目的地不可达
#define NET_DVR_USERID_ISUSING       74 //注销时用户ID正在进行某操作
#define NET_DVR_SOCKETLISTEN_ERROR   75 //监听失败
#define NET_DVR_PROGRAM_EXCEPTION   76 //程序异常
#define NET_DVR_WRITEFILE_FAILED   77 //写文件失败
#define NET_DVR_FORMAT_READONLY    78  //禁止格式化只读硬盘
#define NET_DVR_WITHSAMEUSERNAME      79  //用户配置结构中存在相同的用户名
#define NET_DVR_DEVICETYPE_ERROR            80  /*导入参数时设备型号不匹配*/
#define NET_DVR_LANGUAGE_ERROR              81  /*导入参数时语言不匹配*/
#define NET_DVR_PARAVERSION_ERROR           82  /*导入参数时软件版本不匹配*/
#define NET_DVR_IPCHAN_NOTALIVE             83  /*预览时外接IP通道不在线*/
#define NET_DVR_RTSP_SDK_ERROR    84 /*加载高清IPC通讯库StreamTransClient.dll失败*/
#define NET_DVR_CONVERT_SDK_ERROR   85 /*加载转码库失败*/
#define NET_DVR_IPC_COUNT_OVERFLOW   86  /*超出最大的ip接入通道数*/
#define NET_DVR_MAX_ADD_NUM                 87  /*添加标签(一个文件片段64)等个数达到最大*/
#define NET_DVR_PARAMMODE_ERROR             88 //图像增强仪,参数模式错误(用于硬件设置时,客户端进行软件设置时错误值)
#define NET_DVR_CODESPITTER_OFFLINE   89 //视频综合平台,码分器不在线
#define NET_DVR_BACKUP_COPYING    90  //设备正在备份
#define NET_DVR_CHAN_NOTSUPPORT             91  // 通道不支持该操作
#define NET_DVR_CALLINEINVALID              92  // 高度线位置太集中或长度线不够倾斜
#define NET_DVR_CALCANCELCONFLICT           93  // 取消标定冲突,如果设置了规则及全局的实际大小尺寸过滤
#define NET_DVR_CALPOINTOUTRANGE            94  // 标定点超出范围
#define NET_DVR_FILTERRECTINVALID           95  // 尺寸过滤器不符合要求
#define NET_DVR_DDNS_DEVOFFLINE             96  //设备没有注册到ddns上
#define NET_DVR_DDNS_INTER_ERROR            97  //DDNS 服务器内部错误
#define NET_DVR_ALIAS_DUPLICATE    150 //别名重复  //2011-08-31 通过别名或者序列号来访问设备的新版本ddns的配置


推荐阅读
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 本文讨论了如何使用GStreamer来删除H264格式视频文件中的中间部分,而不需要进行重编码。作者提出了使用gst_element_seek(...)函数来实现这个目标的思路,并提到遇到了一个解决不了的BUG。文章还列举了8个解决方案,希望能够得到更好的思路。 ... [详细]
  • 由于同源策略的限制,满足同源的脚本才可以获取资源。虽然这样有助于保障网络安全,但另一方面也限制了资源的使用。那么如何实现跨域呢,以下是实现跨域的一些方法。 ... [详细]
  • RabbitMq之发布确认高级部分1.为什么会需要发布确认高级部分?在生产环境中由于一些不明原因,导致rabbitmq重启,在RabbitMQ重启期间生产者消息投递失败,导致消息丢 ... [详细]
author-avatar
大兵_小将
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有