用android实现GB28181的视音频前端设备

      目前几乎主流的厂家,比如接入海康、大华、华为、科达、宇视等等各家摄像头都支持GB28181的协议,但是如果没有摄像头怎么办?需要买吗?答案是否定的,其实我们可以用android手机写一个app支持国标28181协议。

      国标28181协议对于前端设备(就是摄像机)而言,主要就是实现注册与退出注册,会话保活,返回目录查询结果,响应invite,返回录像查询结果,响应录像回放,语音对讲。

       当然用手机做,要做就支持4G/5G。我们得考虑媒体流网络穿透啦,网络穿透是很简单的,P2P采用ace,用服务器转发就可以直接用rtp端口反向给服务器发数据报即可。

       整个过程还是一如既往的简单可控,针对gb28181的协议进行开发。这里主要说一下重点部分,语音对讲,刚实现时,其实是有回音的和噪音的,所以对手机端采集的声音去噪和回声消除其实是很重要的。

       对于回音的消除,好在现在手机都已经很好的从硬件层面支持了,我们直接使用android的AcousticEchoCanceler进行回声消除,首先判断手机是否支持AcousticEchoCanceler,但是我想到9102年底了,找到不支持的手机很难了吧,如果你的手机中了大奖确实不支持,可以使用webrtc的aec功能,这个几年前做过,用webrtc的aec一定要计算好延时,保证输入和输出的音频数据。我们这里只讲支持AcousticEchoCanceler的情况,同样作为回声消除功能,则需要传入AudioRecord的信息,只需要传递其sessionid即可,然后就可以开启回声消除了,代码如下:

    private AcousticEchoCanceler acousticEchoCanceler;

    public void initAEC() {
        if (AcousticEchoCanceler.isAvailable()) {
            if (acousticEchoCanceler == null) {
                acousticEchoCanceler = AcousticEchoCanceler.create(getAudioSessionId());
                Log.d(TAG, "initAEC: ---->" + acousticEchoCanceler + "\t" + getAudioSessionId());
                if (acousticEchoCanceler == null) {
                    Log.e(TAG, "initAEC: ----->AcousticEchoCanceler create fail.");
                } else {
                    acousticEchoCanceler.setEnabled(true);
                }
            }
        }
    }

       去噪采用的webrtc的audio_processing模块,因为是c++代码,以下部分在jni实现,WebRtcNs_Process函数可以进行很好的去噪,只要知道通道,采样率就可以了,首先初始化创建去噪句柄,代码如下:

      

		if (WebRtcNs_Create(&denoise_handle))
		{
			denoise_handle = NULL;
			return S_FALSE;
		}

		WebRtcNs_Init(denoise_handle, dwSampleRate);
		WebRtcNs_set_policy(denoise_handle, 3);

      然后就可以愉快的去噪了:

    

WebRtcNs_Process(denoise_handle, src_buf, 0, des_buf, 0);

     按照以上思路,我们完成了android 上的gb28181摄像机。支持4G/5G网络,因为GB28181的设备属性里除了行政区划外,还有经纬度等位置信息的,所以我们也支持了手机的定位信息。如下图:

 

通过这种方式,以后调试gb28181协议不需要用各种设备了,简洁,方便。

 

更多信息

e-mail: yujesoft@163.com

web:www.founu.com

 

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
GB28181协议是中国监控领域的一种视频监控设备间通信协议,旨在实现设备之间的互通互联。GB28181协议的实现源码对于开发者来说非常重要,可以帮助他们理解和实现该协议相关功能。 针对GB28181协议的Android源码实现,主要包括以下几个方面的内容: 1. SIP协议处理:GB28181协议使用SIP协议作为信令传输协议,Android源码实现需要涉及到SIP协议的处理。包括SIP消息的解析、组装和传输等。 2. RTP媒体传输:GB28181协议使用RTP协议传输视频和音频数据,Android源码实现需要包括RTP协议的解析和组装,以及相应的数据传输功能。 3. 设备管理功能:GB28181协议实现源码还需要包括设备管理的相关功能,例如设备注册、心跳、查询设备列表等。这些功能可以通过Android源码实现,提供给开发者进行二次开发和定制。 4. 实时监控功能:GB28181协议主要用于实现视频监控设备之间的实时监控功能,Android源码实现需要包括视频流的接收、解码和显示等功能。 实现GB28181协议的Android源码可以通过使用Android的网络通信框架,如SIP协议的实现可以使用Jain-SIP库,RTP协议的实现可以使用Android的MediaCodec等相关API。 需要指出的是,GB28181协议的实现源码是非常复杂的,其中涉及到的技术细节较多,需要开发者具备相应的网络通信和视频处理的知识。因此,在使用和修改GB28181实现源码时,开发者需要谨慎并且具备相应的专业知识,以确保功能的正确性和稳定性。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值