注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天涯倦客的博客

祝福你朋友永远快乐!

 
 
 

日志

 
 

首发C#版海康威视播放器NHikPlayer  

2013-03-30 17:59:08|  分类: 视频监控 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一、关于NHikPlayer
Hikvision 播放器HikPlayer是杭州海康威视数字技术有限公司的系列产品录像文件专用的播放器。官网上提供了SDK二次开发包,附带的Demo只有C++版 本,对一些使用.Net开发的朋友造成不便,这其中就包括我。最近工作需要使用海康播放器SDK进行一个二次开发,搜索了若干关键词,发现这方面资料较 少,于是工作前期就直接仿SDK的Demo做了一个C#版播放器,差不多就是这个NHikPlayer了。

二、功能
NHikPlayer按照SDK v4.9的Demo进行开发,开发工具是Visual Studio 2008,基本上只是做了C++ to C#的转换,并无太大改动。程序能正常播放.mp4文件,未测试过.264格式,已知在Windows 7 RTM Aero下会自动转成Windows 7 Basic配色方案。另外,由于本人能力和精力有限,部分原有功能没法实现或没有实现:
1.流方式播放
2.转换为.avi
3.剪切文件
4.区域显示
5.播放列表
6.视频截图
7.循环播放
8.水印信息

三、说明
博客园为技术社区,不讲技术有点说不过去,但此程序为二次开发,确无多少新意以及技术含量。所以只能随便聊聊:
1.在C#中通过P/Invoke调用Win32 DLL:
在MSDN中已有很多相关知识,这里只推荐一个工具:P/Invoke Interop Assistant,它支持托管代码和非托管代码之间的方法签名的转换,非常方便。
2.在C#中用委托实现C++的回调函数,例如:
C++中抓图回调函数

void (CALLBACK* DisplayCBFun)(long nPort,char * pBuf,long nSize,long nWidth,long nHeight,long nStamp,long nType,long nReceaved)); 

C#中定义为委托

public delegate void DisplayCBFun(int nPort, IntPtr pBuf, int nSize, int nWidth, int nHeight, int nStamp, int nType, int nReceaved);

C#中回调函数的实现

public void CB_DisplayCBFun(int nPort, IntPtr pBuf, int nSize, int nWidth, int nHeight, int nStamp, int nType, int nReceaved){ }

由于.Net的垃圾回收机制,因此在这类应用中,对委托进行垃圾回收后,委托再进行回调,将回引发CallbackOnCollectedDelegate异常。因此需要将委托声明为成员变量。

private DisplayCBFun dcbf;
private void Function()
{
  dcbf 
= new DisplayCBFun(CB_DisplayCBFun);
  HikPlayer.PlayM4_SetDisplayCallBack(nPort, dcbf);
}

然而我发现仍然会引发异常,很可能是频繁回调引发的。权威资料显示使用 GC.KeepAlive 来确保特定实例保持活动状态一段时间,能解决此问题。

复制代码
private DisplayCBFun dcbf;
private void Function()
{
    dcbf 
= new DisplayCBFun(CB_DisplayCBFun);
    HikPlayer.PlayM4_SetDisplayCallBack(nPort, dcbf);
    
//解决方法
    GC.KeepAlive(dcbf);
}
复制代码

 

四、补充
1.海康威视播放器下载地址:v4.8 v6.0
海康威视播放器SDK下载地址: v4.9 v6.1

2.在Backup文件夹中,对SDK v4.9的HikPlayM4.dll的封装来自“农民伯伯”的博客,点击这里查看详细。有少许改动,现已换成SDK v6.1的PlayCtrl.dll,但最新的方法没封装进去,如有需要请参照plaympeg4.h进行封装。同时在此对农民伯伯表示感谢!

3.程序没有进行完整的测试,错误在所难免,敬请谅解,也希望各位贤人能帮助完善本程序,并将完善版本告知本人。

五、下载地址

NHikPlayer.zip
NHikPlayer_src.zip
Test.mp4


 

作者:Changyu (21changyu@163.com)
出处:http://changyu.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  评论这张
 
阅读(828)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017