两个回调函数:

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版的更多相关文章

  1. 海康网络摄像机YV12转换为BGR,由opencv Mat显示 (转)

    我使用的是海康DS-2CD852MF-E, 200万,网络摄像机,已经比较老了,不过SDK在海康官网下载的,开发流程都差不多. 海康摄像机回调解码后的视频数据格式为YV12,顺便说一下YV12的数据格 ...

  2. (HK1-1)海康网络摄像机的使用

    https://blog.csdn.net/u014552102/article/details/86700057 一.手机客户端操作:  首先在莹石商城官网https://www.ys7.com/下 ...

  3. Android海康监控视频调用demo

    一. 开发环境 1. 操作系统:windows7(X64) 2. 开发工具:eclipse adt Build: v22.2.1-833290 JDK7 android SDK 3. 客户端设备版本: ...

  4. EasyDarwin在做拉模式转发海康RTSP摄像机视频流的过程中出现花屏问题的解决方案

    问题描述 在3年前我当时基于EasyDarwin为用户开发了一款RTSP拉模式转发的程序,也发布了一篇博客<用Darwin开发RTSP级联服务器(拉模式转发)>,当时考虑的很简单,只要将R ...

  5. 海康,睿网设备SDK调试

    引入 外部dll  DllImport [DllImport(@"../bin/HCNetSDK.dll")] 问题1: 找不到模块.... 解决:  [DllImport(@&q ...

  6. 通过rtmpdump推送海康视频流到red5服务器

    现在主流的网络摄像机都支持标准H264视频格式,例如 海康网络摄像机, 通过海康提供的网络SDK可以获取到视频码流.我测试的这款相机,视频编码采用的是H264,音频编码采用的是G711a. 这里,我仅 ...

  7. (HK1-2)海康相机直接连接电脑不经过路由器设置

    解决电脑无法通过网线直连海康摄像机的问题 https://blog.csdn.net/u014552102/article/details/86708371 一.现象:    通过博主的另外一篇博客h ...

  8. HTML5播放RTSP,H5播放RTSP,解决方案源码,基于海康网络摄像头

    视频是用的海康网络摄像头(支持RTSP,标准H.264 RTP封装的设备),可以通过 rtsp://admin:1008@192.0.0.64:81/h264/ch1/main/av_stream   ...

  9. Java版 人脸识别SDK demo

    虹软人脸识别SDK之Java版,支持SDK 1.1+,以及当前最新版本2.0,滴滴,抓紧上车! 前言 由于业务需求,最近跟人脸识别杠上了,本以为虹软提供的SDK是那种面向开发语言的,结果是一堆dll· ...

随机推荐

  1. shell遍历文件夹并执行命令

    背景: 有一个源码包里面包含很多子目录和makefile,打包后的压缩包太大,需要将make生成的所有二进制文件删除然后再打包. 需求: 因此,要求在制定目录的所有递归子目录中执行make clean ...

  2. DNS域名解析服务

    一.DNS的体系结构: DNS:域名解析系统 DNS由根域.顶级域和子域构成.根域主要负责管理顶级域,顶级域主要负责管理其下面子域. .代表DNS的根域. .com..edu等代表顶级域. shou. ...

  3. ffmpeg对rtmp的基本操作[转]

    ffplay和ffmpeg调用的库是一样的.我刚才试了一下,是可以播的.ffplay "rtmp://tsl.s1979.cutv.com:1935/cutvChannelLive/AxeF ...

  4. docker基本

    安装(centos): Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3.10 以上.Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求 ...

  5. 使用VisualSVN建立SVN服务器

    原地址:http://blog.csdn.net/happyjiang2009/article/details/5719988 以前使用官方Subversion搭建SVN版本控制环境,感觉很繁琐,需要 ...

  6. lodash 移除数据元素 pull without 删除数组元素

    _.pull(array, [values]) 移除所有经过 SameValueZero 等值比较为 true 的元素 . without 不会修改原数组 <!DOCTYPE html> ...

  7. 数学之路-分布式计算-linux/unix技术基础(4)

    pwd显示当前文件夹,ls查看文件夹下的文件,cd 进入文件夹 -bash-4.2$ pwd /home/myhaspl-bash-4.2$ lsabc        hadoop-2.4.1     ...

  8. JDBC数据库编程:ResultSet接口

    掌握ResultSet接口 使用ResultSet接口进行查询 ResultSet接口 在JDBC操作中,数据库所有查询记录将使用ResultSet进行接收,并使用ResultSet显示内容. 常用方 ...

  9. 随机验证码模块(random)

    1. 生成一个6位数字+字母的验证码 (面试题) import random l = []for i in range(6): alpha = chr(random.randint(65,90)) a ...

  10. 【转贴】J2EE中的13种技术规范

    J2EE平台由一整套服务(Services).应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持,下面对J2EE中的13种技术规范进行简单的描述(限于篇幅,这里只能进行简单 ...