花生壳可以做网站吗,比较好的网站建设公司电话,wordpress 菜单 标签,软件开发工程师的岗位职责技术背景
好多开发者在做国标对接的时候#xff0c;首先想到的是IPC#xff08;网络摄像头#xff09;#xff0c;通过参数化配置#xff0c;接入到国标平台#xff0c;实现媒体数据的按需查看等操作。
像执法记录仪等智能终端#xff0c;跑在Android平台#xff0c;… 技术背景
好多开发者在做国标对接的时候首先想到的是IPC网络摄像头通过参数化配置接入到国标平台实现媒体数据的按需查看等操作。
像执法记录仪等智能终端跑在Android平台对接GB28181平台的需求也非常大网上相关demo也不少但真正设计符合相关协议规范、功能完善、长时间稳定运行的并不多。基于此华脉智联研发了Android平台GB28181接入模块目前功能设计总的来说IPC有的功能要有IPC缺失的但是对业务诉求有要求的也要有比如MobilePosition实时位置上报实时快照、本地录像、屏幕采集、拉取RTSP或RTMP对接到GB28181平台、实时动态水印、实时音量调节、外部编码前后对接等 [视频格式]H.264/H.265(Android H.265硬编码)
[音频格式]G.711 A律、AAC
[音量调节]Android平台采集端支持实时音量调节
[H.264硬编码]支持H.264特定机型硬编码
[H.265硬编码]支持H.265特定机型硬编码
[软硬编码参数配置]支持gop间隔、帧率、bit-rate设置
[软编码参数配置]支持软编码profile、软编码速度、可变码率设置
支持横屏、竖屏推流
Android平台支持后台service推送屏幕(推送屏幕需要5.0版本)
支持纯视频、音视频PS打包传输
支持RTP OVER UDP和RTP OVER TCP被动模式
支持信令通道网络传输协议TCP/UDP设置
支持注册、注销支持注册刷新及注册有效期设置
支持设备目录查询应答
支持心跳机制支持心跳间隔、心跳检测次数设置
支持移动设备位置(MobilePosition)订阅和通知
支持国标GB/T28181—2016平台接入
支持语音广播及语音对讲
[实时水印]支持动态文字水印、png水印
[镜像]Android平台支持前置摄像头实时镜像功能
[实时静音]支持实时静音/取消静音
[实时快照]支持实时快照
[降噪]支持环境音、手机干扰等引起的噪音降噪处理、自动增益、VAD检测
[外部编码前视频数据对接]支持YUV数据对接
[外部编码前音频数据对接]支持PCM对接
[外部编码后视频数据对接]支持外部H.264数据对接
[外部编码后音频数据对接]外部AAC数据对接
[扩展录像功能]支持录像相关功能。
技术接口设计
接口设计这块我们分三个部分一个是供Publisher实例调用的接口一个是RTP发送相关的接口还有一个是针对语音广播这块实现的接收RTP数据播放接口。
先说供GB28181推送实例调用的接口
/*GB28181相关接口*/private native long nativeCreate(String server_ip, intport, String server_id, Stringserver_domain, String device_id, String device_pwd, Stringdevice_name, int tcpudp, int heartbeat_interval, intreg_expire, String sdk_version);private native void nativeRegister(final long ptr);private native void nativeUnRegister(final long ptr);/*GB28181相关接口*/ 再说RTP发送相关的接口
/*RTP Sender相关接口*/public native void nativePushEncodedAudio(long handle,int devId, byte[] data, int length);public native void nativePushEncodedVideo(long handle,int devId, byte[] data, int length);
/*RTP Sender相关接口*/ 接收相关的接口:
void sip_audio_decode_cb(AVFrame * frame, void *userdata){log_print(HT_LOG_INFO,PTT- %s startsip_audio_decode_cb,__FUNCTION__ ); SUA * p_sua (SUA *) userdata; if (NULL p_sua-media_info.audio_player) {log_print(HT_LOG_INFO,PTT- %s, p_sua-media_info.audio_playeris null###,__FUNCTION__ );#ifdef ANDROID_ASp_sua-media_info.dataQueue new DataQueue();p_sua-media_info.audio_player newOpenSlEsPlayer(p_sua-media_info.dataQueue, 8000);p_sua-media_info.audio_player-play();#endif } if(p_sua-media_info.audio_player) { PcmData*pdata new PcmData((char *) frame-data[0], frame-nb_samples *frame-channels * av_get_bytes_per_sample((enumAVSampleFormat)frame-format));p_sua-media_info.dataQueue-putPcmData(pdata); }} 上述接口说过之后大家可能疑惑信令交互呢信令交互我们是在Android上层实现。
如基础参数配置
GBParam( ip 222.185.255.66, port 5060, server_id 34020000002000000001, server_domain 3402000000, device_id 34020000001320000609, device_pwd 123456, device_name GB28181 Device, tcpudp 0,heartbeat_interval 30, reg_expire 3600)
信令交互处理
private val engineEventHandler IEngineEventHandler { type, state - if (type EventHandlerStatus.EventHandlerType.type_register) { when(state) {EventHandlerStatus.RegisterState.unregister - { //反注册logI(onState: id${type.toCallTypeString()},stateunregister($state)) }EventHandlerStatus.RegisterState.register_fail - { //注册失败logI(onState: id${type.toCallTypeString()},stateregister_fail($state)) } EventHandlerStatus.RegisterState.register_success- { //注册成功logI(onState: id${type.toCallTypeString()},stateregister_success($state)) }EventHandlerStatus.RegisterState.register_forbidden - { //注册失败,udp/tcp协议不对、密码不对等注册参数不对logI(onState: id${type.toCallTypeString()},stateregister_forbidden($state)) }else - {logI(onState: id${type.toCallTypeString()},statePUEVT_REG_PASS($state)) } } } else {logI(onState: id${type.toCallTypeString()},state${state.toEventString()}) } if (type EventHandlerStatus.EventHandlerType.type_call_in) { //呼入事件 when(state) {EventHandlerStatus.EventState.PUEVT_CALL_IN - { //视频监控呼入 }EventHandlerStatus.EventState.PUEVT_CONNECT - { //视频监控接通 }EventHandlerStatus.EventState.PUEVT_HANGUP - { //视频监控挂断 } } } } 除了基础的Camera接口外5.0开始新的Camera2数据依旧可以正常对接感兴趣的开发者可酌情参考。