海康网络摄像机调用SDK解码Java版
两个回调函数:
FRealDataCallBack 实现预览回调数据
DecCallBack 解码回调函数
在HCNetSDK.java补充相关函数和结构声明
//播放库函数声明,PlayCtrl.dll
interface PlayCtrl extends StdCallLibrary
{
PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary("lib\\PlayCtrl", PlayCtrl.class); public static final int STREAME_REALTIME = 0;
public static final int STREAME_FILE = 1; // 20140501, cuizhenfu@gmail.com, frame type
public static final int T_AUDIO16 = 101;
public static final int T_AUDIO8 = 100;
public static final int T_UYVY = 1;
public static final int T_YV12 = 3;
public static final int T_RGB32 = 7; boolean PlayM4_GetPort(NativeLongByReference nPort);
boolean PlayM4_OpenStream(NativeLong nPort, ByteByReference pFileHeadBuf, int nSize, int nBufPoolSize);
boolean PlayM4_InputData(NativeLong nPort, ByteByReference pBuf, int nSize);
boolean PlayM4_CloseStream(NativeLong nPort);
boolean PlayM4_SetStreamOpenMode(NativeLong nPort, int nMode);
boolean PlayM4_Play(NativeLong nPort, HWND hWnd);
boolean PlayM4_Stop(NativeLong nPort);
boolean PlayM4_SetSecretKey(NativeLong nPort, NativeLong lKeyType, String pSecretKey, NativeLong lKeyLen); // 20140501, cuizhenfu@gmail.com
boolean PlayM4_SetDecCallBack(NativeLong nPort, DecCallBack decCallBack);
boolean PlayM4_SetDecCallBackEx(NativeLong nPort, DecCallBack decCallBack, String pDest, NativeLong nDestSize);
public static interface DecCallBack extends StdCallCallback {
public void invoke(NativeLong nPort, ByteByReference pBuffer, NativeLong nSize, FRAME_INFO frameInfo, NativeLong nReserved1, NativeLong nReserved2);
}
public static class FRAME_INFO extends Structure {
public NativeLong nWidth; /* 画面宽,单位像素。如果是音频数据,则为音频声道数 */
public NativeLong nHeight; /* 画面高,单位像素。如果是音频数据,则为样位率 */
public NativeLong nStamp; /* 时标信息,单位毫秒 */
public NativeLong nType; /* 数据类型,T_AUDIO16, T_RGB32, T_YV12 */
public NativeLong nFrameRate; /* 编码时产生的图像帧率,如果是音频数据则为采样率 */
public int dwFrameNum; /* 帧号 */
}
}
解码显示和解码不显示可在下面段代码切换
// //设置解码回调函数 只解码不显示
// if (!playControl.PlayM4_SetDecCallBack(m_lPort.getValue(), decCallBack))
// {
// break;
// } // 设置解码回调函数 解码且显示
if (!playControl.PlayM4_SetDecCallBackEx(m_lPort.getValue(), decCallBack, null, null))
{
break;
}
如果不显示的话,则不需要窗口句柄,这句可以去掉
W32API.HWND hwnd = new W32API.HWND(Native.getComponentPointer(panelRealplay));
然后再播放的时候第二个参数传null
if (!playControl.PlayM4_Play(m_lPort.getValue(), null)) //播放开始
{
break;
}
这样就可以做到只解码,不显示。
——————————————————————————————————————————————————
这样在回调函数DecCallBack 中可以得到视音频数据,其中视频数据是YV12格式的,音频数据是PCM格式的。
将YV12视频数据保存到本地磁盘
DataOutputStream d;
try {
d = new DataOutputStream(new FileOutputStream("c:/yv12", true));
d.write(yv12);
d.flush();
d.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(ClientDemo.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(ClientDemo.class.getName()).log(Level.SEVERE, null, ex);
}
可用yuviwer程序查看c:/yv12文件数据。
参考了海康SDK——》Demo示例——》MFC分功能示例——》2- 实时流回调解码获取YUV,主要是DecCallBack_DemoDlg.cpp文件。
——————————————————————————————————————————————————
调用JavaCV对海康h.264视频流解码还没有成功。
大概忘说了如何设置取子码流
m_strClientInfo = new HCNetSDK.NET_DVR_CLIENTINFO();
m_strClientInfo.lChannel = new NativeLong(iChannelNum);
m_strClientInfo.lLinkMode = new NativeLong(0x80000000); // 子码流TCP连接
- lLinkMode
- 最高位(31)为0表示主码流,为1表示子码流;0~30位表示连接方式:0-TCP方式,1-UDP方式,2-多播方式
例如子码流TCP连接,则lLinkMode=0x80000000
海康网络摄像机调用SDK解码Java版的更多相关文章
- 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)
我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...
- (HK1-1)海康网络摄像机的使用
https://blog.csdn.net/u014552102/article/details/86700057 一.手机客户端操作: 首先在莹石商城官网https://www.ys7.com/下 ...
- Android海康监控视频调用demo
一. 开发环境 1. 操作系统:windows7(X64) 2. 开发工具:eclipse adt Build: v22.2.1-833290 JDK7 android SDK 3. 客户端设备版本: ...
- EasyDarwin在做拉模式转发海康RTSP摄像机视频流的过程中出现花屏问题的解决方案
问题描述 在3年前我当时基于EasyDarwin为用户开发了一款RTSP拉模式转发的程序,也发布了一篇博客<用Darwin开发RTSP级联服务器(拉模式转发)>,当时考虑的很简单,只要将R ...
- 海康,睿网设备SDK调试
引入 外部dll DllImport [DllImport(@"../bin/HCNetSDK.dll")] 问题1: 找不到模块.... 解决: [DllImport(@&q ...
- 通过rtmpdump推送海康视频流到red5服务器
现在主流的网络摄像机都支持标准H264视频格式,例如 海康网络摄像机, 通过海康提供的网络SDK可以获取到视频码流.我测试的这款相机,视频编码采用的是H264,音频编码采用的是G711a. 这里,我仅 ...
- (HK1-2)海康相机直接连接电脑不经过路由器设置
解决电脑无法通过网线直连海康摄像机的问题 https://blog.csdn.net/u014552102/article/details/86708371 一.现象: 通过博主的另外一篇博客h ...
- HTML5播放RTSP,H5播放RTSP,解决方案源码,基于海康网络摄像头
视频是用的海康网络摄像头(支持RTSP,标准H.264 RTP封装的设备),可以通过 rtsp://admin:1008@192.0.0.64:81/h264/ch1/main/av_stream ...
- Java版 人脸识别SDK demo
虹软人脸识别SDK之Java版,支持SDK 1.1+,以及当前最新版本2.0,滴滴,抓紧上车! 前言 由于业务需求,最近跟人脸识别杠上了,本以为虹软提供的SDK是那种面向开发语言的,结果是一堆dll· ...
随机推荐
- wireshark在windows下无法抓取localhost数据包
在调试SSL时要抓包,通过tcpview和minisniffer等工具明明看到tcp连接已经建立并开始收发数据了,但wireshark却总是无法抓到相应的数据包. 今天早上,HQ的高工告诉我“wire ...
- windows下流媒体nginx-rmtp-module服务器搭建及java程序调用fmpeg将rtsp转rtmp直播流【转】
https://github.com/illuspas/nginx-rtmp-win32 http://bashell.sinaapp.com/archives/build-nginx-rtmp-mo ...
- 用Markdown写博客快速入门
Markdown,简单来说,就是一种可以方便转换为HTML的带标记符号纯文本. 它是对我等键盘党的福音:我不用再费劲挪动鼠标去按加粗.设置段落了,用键盘输入所有文本,一气呵成. 最重要的是,cnblo ...
- java设计模式之模板方法
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/8744002 今天你还是像往常一样来上班,一如既往地开始了你的编程工作. 项目经理告 ...
- vue打包后出现一些map文件的解决方法
Vue打包后出现一些map文件的解决办法: 问题: 可能很多人在做vue项目打包,打包之后js中,会自动生成一些map文件,那我们怎么把它去掉不要呢? 1.运行 cnpm run build 开始 ...
- name_search方法的使用
转自:http://blog.csdn.net/littlebo01/article/details/22075573 在many2one类型中,页面下拉时会首先触发name_search方法,参数这 ...
- thinkphp 3.2多语言设置
1.将CheckLangBehavior.class.php(没有的话去下载完整版)文件放到此目录下:\ThinkPHP\Extend\Behavior 2.修改目录下文件Application\Ho ...
- C#实现播放声音的方法
文章来自学IT网:http://www.xueit.com/html/2009-09/21_4598_00.html 在这里介绍使用C#实现播放声音的几种方法,都是利用组件等方法来实现的,有兴趣的话可 ...
- java基础讲解09-----接口,继承,多态
还有什么包装类,数字类,这些简单的我就不想过去介绍,前面也大概的介绍了下,继承,多态 1.类的继承 继承的思想:基于某个父类的扩展,制定一个新的子类.子类可以继承父类原有的属性,方法,也可以重写父类的 ...
- oracle事务块示例
begin Insert into T_SYS_PAGEOPER (FOPERID,FPAGEID) values (152,22); Insert into T_SYS_PAGEOPER (FOPE ...