由于最近在开发海康威视摄像头,特此记录一下如何提取音频数据,这里主要依靠语音对讲返回的音频数据,通过回调函数写入文件中,加个WAV头即可播放,编码格式可以自己设置在代码中有注释
文件结构

其中CameraInfo内容可以参看海康威视摄像机SDK二次开发–实时预览视频流保存到指定文件中

  • HIKSDKSaveRealData中的内容
package ClientDemo;
import ClientDemo.CameraInfo;
import com.sun.jna.NativeLong;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.ByteByReference;
import com.sun.jna.ptr.IntByReference;import javax.swing.*;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.SimpleTimeZone;public class HIKSDKSaveRealData {private static Map configParam;public static void main(String[] args) throws Exception {HIKSDKSaveRealData HikSdk = new HIKSDKSaveRealData();/* 此处创建对象也可以创建file对象 */// 创建流对象BufferedReader br = null;try {br = new BufferedReader(new FileReader("F:\\debug\\hksdk\\javademo\\src\\ClientDemo\\config.txt"));configParam = new HashMap();CameraInfo cameraInfo = new CameraInfo();String line = null;int count = 0;while ((line = br.readLine()) != null) {if (line != "" && line.length() > 0 && count > 0) {String[] split = line.split("\\s+");configParam.put(count + "param", split);count++;} else if (line != "" && line.length() > 0 && count == 0) {String[] split = line.split("\\s+");// 设置IP等参数到对象中System.out.println(split[0]);System.out.println(split[1]);cameraInfo.setAddress(split[0]);cameraInfo.setPort(Short.parseShort(split[1]));cameraInfo.setUserName(split[2]);cameraInfo.setPwd(split[3]);count++;}}br.close();//查看当前DVR参数信息和初始化注册等 传入连接信息
//            HikSdk.getDVRConfig(cameraInfo);HikSdk.VoiceForward(cameraInfo);} catch (IOException e) {e.printStackTrace();}}/****************************************************************** 语音方法* parameters:  cameraInfo* return:      null* ****************************************************************/FileWriter fLocal; //本地音频文件FileWriter fDevice; //设备发送的音频文件NativeLong nativeLong;HCNetSDK sdk = HCNetSDK.INSTANCE;void VoiceForward(CameraInfo cameraInfo) {CameraInfo parameter = getParameter(cameraInfo);//判断是否注册成功if (parameter.getUserId().intValue() < 0) {System.out.println("注册设备失败 错误码为: " + sdk.NET_DVR_GetLastError());} else {System.out.println("注册成功  Id为:      " + cameraInfo.getUserId().intValue());}//判断是否获取到设备能力HCNetSDK.NET_DVR_WORKSTATE_V30 devWork = new HCNetSDK.NET_DVR_WORKSTATE_V30();if (!sdk.NET_DVR_GetDVRWorkState_V30(cameraInfo.getUserId(), devWork)) {System.out.println("获取设备能力集失败,返回设备状态失败...............");return;}try {/** 设置语音对象的编码类型* 编码类型:     G711* 音频数据采样率:  16000* 格式:       16位采样并且单通道* */HCNetSDK.NET_DVR_COMPRESSION_AUDIO audio = new HCNetSDK.NET_DVR_COMPRESSION_AUDIO();audio.byAudioEncType = 1;fLocal = new FileWriter("F:\\debug\\hksdk\\javademo\\data\\local.pcm");fDevice = new FileWriter("F:\\debug\\hksdk\\javademo\\data\\device.pcm");FVoiceDataCallBack fVoiceDataCallBack = new FVoiceDataCallBack();JComboBox jComboBoxDataType = new javax.swing.JComboBox();nativeLong = sdk.NET_DVR_StartVoiceCom_V30(cameraInfo.getUserId(), 0, jComboBoxDataType.getSelectedIndex() == 2, fVoiceDataCallBack, null);if (nativeLong.intValue() == -1) {System.out.println(111);}try {Thread.sleep(20000);} catch (InterruptedException e) {e.printStackTrace();}sdk.NET_DVR_StopVoiceCom(nativeLong);sdk.NET_DVR_Logout(nativeLong);sdk.NET_DVR_Cleanup();} catch (IOException e) {e.printStackTrace();}}/**语音对讲回调函数*/class FVoiceDataCallBack implements HCNetSDK.FVoiceDataCallBack_V30 {//对对讲的音频数据进行回调操作,以下写入文件操作public void invoke(NativeLong lVoiceComHandle, String pRecvDataBuffer, int dwBufSize, byte byAudioFlag, Pointer pUser) {//byAudioFlag为0表示本地文件,为1表示设备的音频文件if (byAudioFlag == 0) {try {fLocal.write(pRecvDataBuffer);fLocal.flush();} catch (IOException ex) {//                    Logger.getLogger(JDialogVoiceTalk.class.getName()).log(Level.SEVERE, null, ex);System.out.println('1');}} else {if (byAudioFlag == 1) {try {fDevice.write(pRecvDataBuffer);fDevice.flush();} catch (IOException ex) {//                        Logger.getLogger(JDialogVoiceTalk.class.getName()).log(Level.SEVERE, null, ex);System.out.println('2');}}}}}/****************************************************************** 注册设备并返回参数* 目的:   注册设备并返回key    :Nativelong* parameters:    cameraInfo*return:        cameraInfo* ****************************************************************/private CameraInfo getParameter(CameraInfo cameraInfo) {//设置设备通道号   查看Demo代码  通道号为1NativeLong channel = new NativeLong(1);cameraInfo.setChannel(channel);if (!sdk.NET_DVR_Init()) {System.out.println("初始化失败..................");}//创建设备HCNetSDK.NET_DVR_DEVICEINFO_V30 deInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();//注册用户设备NativeLong id = sdk.NET_DVR_Login_V30(cameraInfo.getAddress(), cameraInfo.getPort(),cameraInfo.getUserName(), cameraInfo.getPwd(), deInfo);cameraInfo.setUserId(id);return cameraInfo;}
}

海康威视摄像机SDK二次开发--提取音频保存至文件相关推荐

  1. 海康威视摄像机SDK二次开发--指定云台位置,焦距放大倍数,拍摄时长,并拆分保存为视频文件

    按照config.txt配置,出现的效果是有几组参数就录制几个视频,视频时长按照配置文件录制 config.txt的内容,请参照海康威视摄像机SDK二次开发–实时预览视频流保存到指定文件中 java实 ...

  2. 海康威视摄像机SDK二次开发--初始化windows-sdk-java环境

    老师想获取海康摄像头的音频内容,因此对海康sdk进行了学习,学到了一个博主的java开发例子,在这里总结一下.第一篇是初始化windows-sdk-java的环境. 文章目录 1.环境准备 2.准备工 ...

  3. 海康威视摄像机SDK二次开发--通过云台参数设置控制摄像机的位置

    由于最近在开发海康威视摄像头,特此记录一下通过云台参数控制摄像机的位置,我这里是通过properties配置文件输入的参数,也可以不用配置文件,看具体的需求 package ClientDemo;im ...

  4. 海康威视摄像机SDK二次开发--实时预览视频流保存到指定文件中

    开发海康威视sdk ,IPC设备,视频回调用的是官方提供的Demo中的(fRealDataCallBack ) 在最下面代码可以设置Thread.sleep()设置拍摄时长 文件结构 CameraIn ...

  5. 海康威视工业相机SDK二次开发

    海康威视工业相机SDK二次开发 好气,第一次写文章,结果没不小心保存关掉,什么都没了. 本人是一名在读研究生,被导师分配了做项目中海康工业相机的二次开发.实现的需求是:实现八个相机同时打开视频,并且分 ...

  6. 海康威视工业相机SDK二次开发(VS+Opencv+QT+海康SDK+C++)(一)

    最近在做一个项目,涉及到工业相机,需要对其进行二次开发.相机方面选择了海康威视,网上关于海康威视工业相机SDK的开发资料很少,官方文档里面虽然写的是支持C++开发的,但其实是C.自己也摸索了一段时间, ...

  7. VS2015配置海康威视工业相机SDK二次开发

    1.概述: 工业相机SDK是用于控制相机的一个独立组件,支持获取实时图像数据.配置参数.对图像进行后续处理等功能.工业相机SDK兼容GigE Vision协议.USB3 Vision协议.Camera ...

  8. 海康威视网络摄像机 SDK二次开发(JAVA)

    1.下载地址 https://www.hikvision.com/cn/download_more_406.html#prettyPhoto 根据各自情况,选择win32或者win64位 64位下载之 ...

  9. 海康威视工业相机SDK二次开发环境配置—Windows10+VS2017

    参考链接: https://blog.csdn.net/motikesi/article/details/108287951 一.SDK下载地址: https://www.hikrobotics.co ...

最新文章

  1. Yolov3网络架构分析
  2. Linux之xargs
  3. anaconda更新python版本mac_macos - 如何使用conda升级到Python 3.6?
  4. [css] 行内元素和块级元素有什么区别,如何相互转换?
  5. 14.1178亿人 流动人口超3亿 “大国普查”这些数据很重要
  6. win10 windows按钮右键没有命令提示符
  7. Word 中插入 C/C++ 代码(转)
  8. ROS-Kinetic安装turtlebot-3并仿真
  9. pm2 简介与常用指令
  10. cmd中文乱码解决方案
  11. RFID定位技术下的资产管理与应急仓储物流--RFID资产管理--新导智能
  12. 我眼中的嵌入式是这样的!
  13. 计算机配置的内存容量为4GB,电脑添加4G内存条后内存容量没有变化怎么办
  14. CAD数字签名的实现
  15. 鼓励你大胆追梦的三个移动互联网案例
  16. 安装mathpix注册不了账户:unexcepted error
  17. 转---电脑的MAC实际地址可以修改吗?
  18. 打字慢能学计算机吗,提高电脑打字速度,实现快速盲打,这样的学习方法很管用!...
  19. SMBLoris windows拒绝服务漏洞
  20. 决定计算机运行速度的是哪个配件,计算机的CPU等级决定了计算机的速度. 主要方面是什么?...

热门文章

  1. Cisco Packet Tracer 7.0 简单的使用教程
  2. 以太坊模拟器Ganache v7重磅发布!
  3. pycharm 添加远程项目interpreter 报 the authenticity of host can‘t be established 解决方法
  4. 看板管理中看板的定义、构成,以及实际看板案例分享
  5. netstat -nat
  6. Spring Boot+OAuth2使用GitHub登录自己的服务
  7. 正则验证——常用的正则表达式
  8. js实现unicode转换,支持中英文
  9. WinDebug 调试工具-0
  10. Conflux Studio 详解