海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本

摘要:
Frame){intiErr=hCNetSDK.NET_DVR_GetLastError();System.out.println(“G711音频编码失败!

应用场景:

1. 有告警出现时,海康摄像头能自动播报(如:禁止游泳,请快速里离开);

2. 在web页面点击“开始对讲”,能讲PC上的麦克风声音传输到海康摄像头进行对讲;点击“停止对讲”,海康摄像头停止对讲;

技术实现:
使用海康的SDK实现,nettyserver框架,提供webapi接口及websocket接口,兼容window、linux

软件功能:

1. 集成海康SDK

2. WebAPI接口(PlayMedia,StartTalk,StopTalk),采集的是本地音频数据

海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本第1张

 海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本第2张

 海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本第3张

3. WebSocket接口,讲web用户的音频数据转发到Server程序,通过SDK发送至海康摄像机

对讲初始化

H5->Server 发送指令 StartTalk::{ "ip": "192.168.3.2", "port": 8000, "name": "admin", "password": "yswy123456" }

Server->H5 返回指令 StartTalk::ACK_OK

Server->H5 返回指令 StartTalk::ACK_ERROE

开始对讲

H5->Server 发送指令 Base64音频字符串

结束对讲

H5->Server 发送指令 StopTalk::

Server->H5 返回指令 StopTalk::ACK_OK

Server->H5 返回指令 StartTalk::ACK_ERROR

4.  链路检查超时退出SDK

测试报告 

海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本第4张

音频播放

海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本第5张

开始对讲

海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本第6张 海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本第7张

结束对讲

海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本第8张

 海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本第9张

方案内容

海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本第10张

 海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本第11张

 海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本第12张

相关配置

1. 海康相机音频配置

海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本第13张

 海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本第14张

 2. 将dll/so文件拷贝至系统目录下

window:C:/Windows/System32
linux: /usr/lib

3. pcm制作

1. 安装ekho-5.8.exe

2. 安装girl_xiaokun.exe

3. 运行ttsapp.exe

4.使用UltraEdit编辑,然后选中文件头的44个字节并剪切(因为退格键不管用),将这44个字节删掉,另存为pcm文件

核心代码

 // 开始音频文件
    static void StartMedia(Camera entity, String sfilePath)
    { 
        lockAudio.lock();
        
        HCNetSDK.NET_DVR_COMPRESSION_AUDIO lpCompressAudio = new HCNetSDK.NET_DVR_COMPRESSION_AUDIO();
        boolean net_DVR_GetCurrentAudioCompress = hCNetSDK.NET_DVR_GetCurrentAudioCompress(entity.UserID, lpCompressAudio); if (!net_DVR_GetCurrentAudioCompress) return;
        byte byAudioEncType = lpCompressAudio.byAudioEncType;
        byte byAudioSamplingRate = lpCompressAudio.byAudioSamplingRate;
        byte byAudioBitRate = lpCompressAudio.byAudioBitRate;
        byte bySupport = lpCompressAudio.bySupport;
        System.out.println("音频编码类型=" + byAudioEncType + "  音频采样率=" + byAudioSamplingRate + "    音频码率=" + byAudioBitRate + "   bySupport=" + bySupport);

        NativeLong mr = hCNetSDK.NET_DVR_StartVoiceCom_MR_V30(entity.UserID, 1, null, null); 
        File file = new File(sfilePath); 

        FileInputStream inputStream = null;
        
        try
        {
            inputStream = new FileInputStream(file);
            
            Memory pInBuff = new Memory(file.length());
            pInBuff.clear();
            
            if (pInBuff != Memory.NULL) 
            {
                int buffLen = 320; long currFileLen = 0; int readLen;
                byte[] buffer = new byte[buffLen];
                
                Memory pIB = new Memory(buffLen);
                while (currFileLen < file.length()) 
                {
                    entity.LastTime = System.currentTimeMillis();
                    
                    readLen = inputStream.read(buffer);
                    pIB.write(0, buffer, 0, readLen);
                    currFileLen += readLen;
                    Memory pOutBuffer = new Memory(buffLen);
                    HCNetSDK.NET_DVR_AUDIOENC_INFO enc_info = new HCNetSDK.NET_DVR_AUDIOENC_INFO();
                    enc_info.in_frame_size = buffLen;
                    Pointer encoder = hCNetSDK.NET_DVR_InitG711Encoder(enc_info);
                    //
                    HCNetSDK.NET_DVR_AUDIOENC_PROCESS_PARAM param = new HCNetSDK.NET_DVR_AUDIOENC_PROCESS_PARAM();
                    param.in_buf = pIB;
                    param.out_buf = pOutBuffer;
                    param.out_frame_size = 160;
                    param.g711_type = 0;
                    boolean frame = hCNetSDK.NET_DVR_EncodeG711Frame(encoder, param);
                    if (!frame) 
                    {
                        int iErr = hCNetSDK.NET_DVR_GetLastError();
                        System.out.println("G711音频编码失败!iErr = " + iErr);
                        break;
                    } 
                    frame = hCNetSDK.NET_DVR_ReleaseG711Encoder(encoder); 
                    if (!frame) 
                    {
                        int iErr = hCNetSDK.NET_DVR_GetLastError();
                        System.out.println("G711音频编码失败!iErr = " + iErr);
                        break;
                    }
                    boolean sendData = hCNetSDK.NET_DVR_VoiceComSendData(mr, pOutBuffer, 160);
                    if (!sendData) 
                    {
                        int iErr = hCNetSDK.NET_DVR_GetLastError();
                        System.out.println("转发语音数据!iErr = " + iErr);
                        break;
                    }

                    Thread.sleep(20);
                }
            } 
        } 
        catch (Exception ex)
        {
            DataHelper.AddExceptionStackTrace("[Error] StartMedia", ex); 
        }
        finally
        {
            if (null != inputStream) { try { inputStream.close(); } catch(Exception e) {} }
            
            lockAudio.unlock();
        } 
        
        hCNetSDK.NET_DVR_StopVoiceCom(mr);
        System.out.println("读取完成"); 
    }  

免责声明:文章转载自《海康摄像头音频方案(播放音频文件+语音对讲+语音转发)支持window/Linuxjava版本》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇python 画广东省等压线图c#Winform程序的toolStripButton自己定义背景应用演示样例源代码下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

EasyNVR推流平台实现海康大华宇视网络摄像头内容网页无插件播放的方法介绍

众所周知,EasyNVR可以将局域网/广域网上的海康/大华等网络摄像头由rtsp转换为rtmp、rtsp、hls、flv协议转换,并提供推流服务,可以将拉到的网络摄像头直接转发到流媒体服务器。完美对接目前主流的阿里云/百度云/乐视云等等流媒体服务器。操作流程简洁,可直接作为网络摄像头无插件直播平台使用,亦可通过二次开发接入已有业务系统,应用场景十分广泛。...

SecureCrt使用SSH2登陆海康相机

海康相机登陆SSH2: 1.安装SecureCRT2.登陆到相机,系统-安全管理-安全服务,勾选启用SSh3,打开SecureCRT,快速链接4.选择协议SSh2,主机Ip填入相机IP,端口默认22,用户名admin,点击链接5.弹出一个框,输入相机的密码6.登陆成功,出现linux的命令行摸样7.点击下面(或者直接输入outputOpen)的output...

海康、大华网络摄像机RTSP URL格式组成及参数配置

1. 海康摄像机 在IE浏览器输入网络摄像机的IP地址,输入配置的用户名、密码,登陆: 视频: 1. 码率类型:主码流和子码流,主码流支持的分辨率比较高; 2. 视频类型:如果是音视频都需要,选择“复合流”,如果只需要视频,选择“视频流”; 3. 分辨率设置,不再赘述; 4. 码率类型:变码率!!!定码率的话,码率过高; 5. 图像质量:酌情设置; 6....

EasyNVR实现海康、大华NVR硬盘录像机Web无插件播放方案(支持取特定时间段视频流)

本文转自:https://blog.csdn.net/black_3717/article/details/79872725 背景说明: 由于视频自身的直观性和便利性,对于传统安防行业,摄像机的直播和录像以及回放一直是一个永恒的需求; 随着硬盘录像机设备种类的日益繁多,对于录像需求其实已经满足了,但是在需求得到满足的同事是否发现我们还缺少什么?没错就是在...

海康威视摄像头密码重置

 海康威视摄像头密码重置 备和电脑在同一局域网下,但局域网内搜不到该设备?您好,这种情况可根据如下步骤进行排查:1、退出并关闭萤石工作室,重新打开萤石工作室,查看“本地设置”列表中是否可以显示设备;如仍不能搜到 => 步骤2;如可以搜到 => 故障排除。2、在萤石工作室的安装目录下,找到“NpfDetectApp.exe”程序,右键单击选择“以...

华为、科达、海康、大华等厂家摄像头通过非标方式(RTSP)接入流媒体服务实现WEB直播与录像

LiveNVR Onvif/RTSP流媒体服务,支持RTSP稳定拉流接入,支持Onvif协议接入,支持RTMP/HLS/HTTP-FLV分发,将传统安防监控设备互联化,无插件直播等。 什么是视频广场 所有配置接入的海康、大华的摄像机,通过统一页面展示,可以展示摄像机的最新快照,在线信息,当用户需要观看的时候,点击播放即可方便快捷。 点击观看效果 多种流的...