当前位置: 首页 > news >正文

深远互动 网站建设wordpress 维修主题

深远互动 网站建设,wordpress 维修主题,石家庄网站seo优化,适合发表个人文章的平台技术背景 SIP(会话初始化协议)是在 IP网络上进行多媒体通信的应用层控制协议#xff0c;以几种RFC的形式提供#xff0c;其中最重要的是包含核心协议规范的RFC3261。该协议用于创建#xff0c;修改和终止与一个或多个参与者的会话。通过会话#xff0c;我们了解了一组进行…技术背景 SIP(会话初始化协议)是在 IP网络上进行多媒体通信的应用层控制协议以几种RFC的形式提供其中最重要的是包含核心协议规范的RFC3261。该协议用于创建修改和终止与一个或多个参与者的会话。通过会话我们了解了一组进行通信的发送方和接收方以及在通信过程中这些发送方和接收方保持的状态。会话的示例可以包括Internet电话呼叫多媒体分发多媒体会议分布式计算机游戏等。 SIP不是通信设备将需要的唯一协议也不意味着是通用协议。SIP的目的仅仅是使通信成为可能通信本身必须通过其他方式可能还有其他协议来实现。 与SIP一起最常使用的两种协议是RTP和SDP。 RTP协议用于承载实时多媒体数据包括音频视频和文本该协议可以将数据编码和拆分为数据包并通过Internet传输此类数据包。 另一个重要的协议是SDP用于描述和编码会话参与者的功能。 然后将这种描述用于协商会话的特征以便所有设备都可以参与例如包括协商用于编码媒体的编解码器以便所有参与者都可以对其进行解码协商使用的传输协议 等等。 GB/T28181-2011 《安全防范视频监控联网系统信息传输、交换、控制技术要求》是由公安部科技信息化局提出由全国安全防范报警系统标准化技术委员会SAC/TC100)归口公安部一所等多家单位共同起草的一部国家标准。 该标准规定了城市监控报警联网系统中信息传输、交换、控制的互联结构、通信协议结构传输、交换、控制的基本要求和安全性要求以及控制、传输流程和协议接口等技术要求。该标准适用于安全防范监控报警联网系统的方案设计、系统检测、验收以及与之相关的设备研发、生产其他信息系统可参考采用。 该标准于2012年6月1日正式发布实施在全国范围内的平安城市项目建设中被普遍推广应用。GB/T28181-2011标准自发布以来受到了各大视频监控厂商的积极响应。截止2012年底有近百家视频监控企业通过公安部一所、公安部三所的认证如深圳宙视达、浙江宇视、超视科技、东方网力、海康威视、高远时代、浙江大华、先进视讯、波粒科技、华为技术、中兴力维、中星电子、科达、天地伟业等。 相关接口 废话不多说直接上设计接口好多开发者网上看到的大多是非常简单的接口。极致简单一直是我们追求的目标但是更好的参数化配置和可扩展的设计也是一个规范化产品的必经之路。 除了常规的音视频采集编码接口外GB28181设备接入模块主要分信令交互和媒体数据传输两个部分以大牛直播SDK官方分别介绍下相关接口设计。 媒体数据传输相关 /*RTP Sender相关接口*//** 创建RTP Sender实例** param reserve保留参数传0** return RTP Sender 句柄0表示失败*/public native long CreateRTPSender(int reserve);/***设置 RTP Sender传输协议** param rtp_sender_handle, CreateRTPSender返回值* param transport_protocol, 0:UDP, 1:TCP, 默认是UDP** return {0} if successful*/public native int SetRTPSenderTransportProtocol(long rtp_sender_handle, int transport_protocol);/***设置 RTP Sender IP地址类型** param rtp_sender_handle, CreateRTPSender返回值* param ip_address_type, 0:IPV4, 1:IPV6, 默认是IPV4, 当前仅支持IPV4** return {0} if successful*/public native int SetRTPSenderIPAddressType(long rtp_sender_handle, int ip_address_type);/***设置 RTP Sender RTP Socket本地端口** param rtp_sender_handle, CreateRTPSender返回值* param port, 必须是偶数设置0的话SDK会自动分配, 默认值是0** return {0} if successful*/public native int SetRTPSenderLocalPort(long rtp_sender_handle, int port);/***设置 RTP Sender SSRC** param rtp_sender_handle, CreateRTPSender返回值* param ssrc, 如果设置的话这个字符串要能转换成uint32类型, 否则设置失败** return {0} if successful*/public native int SetRTPSenderSSRC(long rtp_sender_handle, String ssrc);/***设置 RTP Sender RTP socket 发送Buffer大小** param rtp_sender_handle, CreateRTPSender返回值* param buffer_size, 必须大于0, 默认是512*1024, 当前仅对UDP socket有效, 根据视频码率考虑设置合适的值** return {0} if successful*/public native int SetRTPSenderSocketSendBuffer(long rtp_sender_handle, int buffer_size);/***设置 RTP Sender RTP时间戳时钟频率** param rtp_sender_handle, CreateRTPSender返回值* param clock_rate, 必须大于0, 对于GB28181 PS规定是90kHz, 也就是90000** return {0} if successful*/public native int SetRTPSenderClockRate(long rtp_sender_handle, int clock_rate);/***设置 RTP Sender 目的IP地址, 注意当前用在GB2818推送上,只设置一个地址,将来扩展如果用在其他地方可能要设置多个目的地址到时候接口可能会调整** param rtp_sender_handle, CreateRTPSender返回值* param address, IP地址* param port, 端口** return {0} if successful*/public native int SetRTPSenderDestination(long rtp_sender_handle, String address, int port);/***初始化RTP Sender, 初始化之前先调用上面的接口配置相关参数** param rtp_sender_handle, CreateRTPSender返回值** return {0} if successful*/public native int InitRTPSender(long rtp_sender_handle);/***获取RTP Sender RTP Socket本地端口** param rtp_sender_handle, CreateRTPSender返回值** return 失败返回0, 成功的话返回响应的端口, 请在InitRTPSender返回成功之后调用*/public native int GetRTPSenderLocalPort(long rtp_sender_handle);/*** UnInit RTP Sender** param rtp_sender_handle, CreateRTPSender返回值** return {0} if successful*/public native int UnInitRTPSender(long rtp_sender_handle);/*** 释放RTP Sender, 释放之后rtp_sender_handle就无效了请不要再使用** param rtp_sender_handle, CreateRTPSender返回值** return {0} if successful*/public native int DestoryRTPSender(long rtp_sender_handle); 信令相关操作 /*GB28181相关接口*//*** 设置GB28181 RTP Sender** param rtp_sender_handle, CreateRTPSender返回值* param rtp_payload_type, 对于GB28181 PS, 协议定义是96, 具体以SDP为准** return {0} if successful*/public native int SetGB28181RTPSender(long handle, long rtp_sender_handle, int rtp_payload_type);/*** 启动 GB28181 媒体流** return {0} if successful*/public native int StartGB28181MediaStream(long handle);/*** 停止 GB28181 媒体流** return {0} if successful*/public native int StopGB28181MediaStream(long handle);/*---------------GB28181相关接口---------------*/ 启动、停止GB28181 完成视频分辨率等参数配置后点击“启动GB28181”即可开始走信令交互流程设备端主动发送Register进入后续交互流程。 如需停止GB28181点停止即可。 GB28181设备端主要实现了按需推送数据到平台端。 class ButtonGB28181AgentListener implements OnClickListener {public void onClick(View v) {stopGB28181Stream();destoryRTPSender();if (null gb28181_agent_ ) {if( !initGB28181Agent() )return;}if (gb28181_agent_.isRunning()) {gb28181_agent_.terminateAllPlays(true);// 目前测试下来,发送BYE之后,有些服务器会立即发送INVITE,是否发送BYE根据实际情况看gb28181_agent_.stop();btnGB28181Agent.setText(启动GB28181);}else {if ( gb28181_agent_.start() ) {btnGB28181Agent.setText(停止GB28181);}}}} 注册 当Andriod设备端第一次接入平台端时设备端将持续向平台端发送 REGISTER消息直到 Server端回复200 OK代表注册成功。 如果设备或系统注册不成功,宜延迟一定的随机时间后重新注册。 每隔一定时间客户端都会再次向服务器刷新注册防止注册过期导致连接断开。 以基本注册为例基本注册采用IETFRFC3261规定的基于数字摘要的挑战应答式安全技术进行注册。 注册流程描述如下: a) 1:SIP代理向SIP服务器发送 Register请求; b) 2:SIP服务器向 SIP代理发送响应401,并在响应的消息头 WWW_Authenticate字段中给出适合SIP代理的认证体制和参数; c) 3:SIP代理重新向SIP服务器发送 Register请求,在请求的 Authorization字段给出信任书, 包含认证信息; d) 4:SIP 服务器对请求进行验证,如果检查出 SIP 代理身份合法,向 SIP 代理发送成功响应 200OK,如果身份不合法则发送拒绝服务应答。 相关注册反馈Overridepublic void ntsRegisterOK(String dateString) {Log.i(TAG, ntsRegisterOK Date: (dateString! null? dateString : ));}Overridepublic void ntsRegisterTimeout() {Log.e(TAG, ntsRegisterTimeout);}Overridepublic void ntsRegisterTransportError(String errorInfo) {Log.e(TAG, ntsRegisterTransportError error: (errorInfo ! null?errorInfo :));} 信息查询Catalog 注册成功后客户端与服务器之间信息查询操作如目录查询、历史录像文件查看等GB28181使用 SIP扩展协议规定的 Message方法实现。目前使用了两种类型的查询命令Catalog 设备目录查询消息、RecordInfo 历史录像文件查询消息。本文以Catalog设备目录查询消息为例平台端向设备端发送Catalog请求设备端回复200 OK后发送设备信息平台端回复200 OK如遇多个设备信息切记分次发送。private boolean initGB28181Agent(){if ( gb28181_agent_ ! null )return true;String local_ip_addr IPAddrUtils.getIpAddress(myContext);Log.i(TAG, initGB28181Agent local ip addr: local_ip_addr);if ( local_ip_addr null || local_ip_addr.isEmpty() ) {Log.e(TAG, initGB28181Agent local ip is empty);return false;}gb28181_agent_ GBSIPAgentFactory.getInstance().create();if ( gb28181_agent_ null ) {Log.e(TAG, initGB28181Agent create agent failed);return false;}gb28181_agent_.addListener(this);// 必填信息gb28181_agent_.setLocalAddressInfo(local_ip_addr, gb28181_sip_local_port_);gb28181_agent_.setServerParameter(gb28181_sip_server_addr_, gb28181_sip_server_port_, gb28181_sip_server_id_, gb28181_sip_server_domain_);gb28181_agent_.setUserInfo(gb28181_sip_username_, gb28181_sip_password_);// 可选参数gb28181_agent_.setUserAgent(gb28181_sip_user_agent_filed_);gb28181_agent_.setTransportProtocol(gb28181_sip_trans_protocol_0?UDP:TCP);// GB28181配置gb28181_agent_.config(gb28181_reg_expired_, gb28181_heartbeat_interval_, gb28181_heartbeat_count_);com.gb28181.ntsignalling.Device gb_device new com.gb28181.ntsignalling.Device(34020000001380000001, 安卓测试设备, Build.MANUFACTURER, Build.MODEL,宇宙,火星1,火星, true);getLocation(this);gb_device.setLongitude(mLongitude);gb_device.setLatitude(mLatitude);gb28181_agent_.addDevice(gb_device);if (!gb28181_agent_.initialize()) {gb28181_agent_ null;Log.e(TAG, initGB28181Agent gb28181_agent_.initialize failed.);return false;}return true;} 心跳KeepAlive KeepAlive以MESSAGE的形式传递异常处理如下Overridepublic void ntsOnHeartBeatException(int exceptionCount, String lastExceptionInfo) {Log.e(TAG, ntsOnHeartBeatException heart beat timeout count reached, count: exceptionCount, exception info: (lastExceptionInfo!null?lastExceptionInfo:));// 10毫秒后,停止信令, 然后重启handler.postDelayed(new Runnable() {Overridepublic void run() {Log.i(TAG, gb28281_heart_beart_timeout);stopGB28181Stream();destoryRTPSender();if (gb28181_agent_ ! null) {Log.i(TAG, gb28281_heart_beart_timeout sip stop);gb28181_agent_.stop();Log.i(TAG, gb28281_heart_beart_timeout sip start);gb28181_agent_.start();}}},10);} Invite处理 假定整个信令交互流程顺利Android设备端完成Register、Catalog、KeepAlive消息处理后平台端发过来Invite请求并携带SDP消息体。 Android设备端可获取到比如deviceid, tcp/udp传输模式、rtp端口address类型等并构建200 OK携带相关的音视频信息。 Overridepublic void ntsOnInvitePlay(String deviceId, InvitePlaySessionDescription session_des) {handler.postDelayed(new Runnable() {Overridepublic void run() {Log.i(TAG,ntsInviteReceived, device_id: device_id_, is_tcp: session_des_.isRTPOverTCP() rtp_port: session_des_.getMediaPort() ssrc: session_des_.getSSRC() address_type: session_des_.getAddressType() address: session_des_.getAddress());// 可以先给信令服务器发送临时振铃响应//sip_stack_android.respondPlayInvite(180, device_id_);long rtp_sender_handle libPublisher.CreateRTPSender(0);if ( rtp_sender_handle 0 ) {gb28181_agent_.respondPlayInvite(488, device_id_);Log.i(TAG, ntsInviteReceived CreateRTPSender failed, response 488, device_id: device_id_);return;}gb28181_rtp_payload_type_ session_des_.getPSRtpMapAttribute().getPayloadType();libPublisher.SetRTPSenderTransportProtocol(rtp_sender_handle, session_des_.isRTPOverUDP()?0:1);libPublisher.SetRTPSenderIPAddressType(rtp_sender_handle, session_des_.isIPv4()?0:1);libPublisher.SetRTPSenderLocalPort(rtp_sender_handle, 0);libPublisher.SetRTPSenderSSRC(rtp_sender_handle, session_des_.getSSRC());libPublisher.SetRTPSenderSocketSendBuffer(rtp_sender_handle, 2*1024*1024); // 设置到2MlibPublisher.SetRTPSenderClockRate(rtp_sender_handle, session_des_.getPSRtpMapAttribute().getClockRate());libPublisher.SetRTPSenderDestination(rtp_sender_handle, session_des_.getAddress(), session_des_.getMediaPort());if ( libPublisher.InitRTPSender(rtp_sender_handle) ! 0 ) {gb28181_agent_.respondPlayInvite(488, device_id_);libPublisher.DestoryRTPSender(rtp_sender_handle);return;}int local_port libPublisher.GetRTPSenderLocalPort(rtp_sender_handle);if (local_port 0) {gb28181_agent_.respondPlayInvite(488, device_id_);libPublisher.DestoryRTPSender(rtp_sender_handle);return;}Log.i(TAG,get local_port: local_port);String local_ip_addr IPAddrUtils.getIpAddress(myContext);gb28181_agent_.respondPlayInviteOK(device_id_,local_ip_addr, local_port);gb28181_rtp_sender_handle_ rtp_sender_handle;}private String device_id_;private InvitePlaySessionDescription session_des_;public Runnable set(String device_id, InvitePlaySessionDescription session_des) {this.device_id_ device_id;this.session_des_ session_des;return this;}}.set(deviceId, session_des),0);} Ack确认 平台端发送Ack确认设备端收到Ack后开始发送音视频数据。 Overridepublic void ntsOnAckPlay(String deviceId) {handler.postDelayed(new Runnable() {Overridepublic void run() {Log.i(TAG,ntsOnACKPlay, device_id: device_id_);if (!isRecording !isRTSPPublisherRunning !isPushingRtsp !isPushingRtmp) {InitAndSetConfig();}libPublisher.SetGB28181RTPSender(publisherHandle, gb28181_rtp_sender_handle_, gb28181_rtp_payload_type_);int startRet libPublisher.StartGB28181MediaStream(publisherHandle);if (startRet ! 0) {if (!isRecording !isRTSPPublisherRunning !isPushingRtmp !isPushingRtsp) {if (publisherHandle ! 0) {libPublisher.SmartPublisherClose(publisherHandle);publisherHandle 0;}}destoryRTPSender();Log.e(TAG, Failed to start GB28181 service..);return;}if (!isRecording !isRTSPPublisherRunning !isPushingRtsp !isPushingRtmp) {if (pushType 0 || pushType 1) {CheckInitAudioRecorder(); //enable pure video publisher..}}isGB28181StreamRunning true;}private String device_id_;public Runnable set(String device_id) {this.device_id_ device_id;return this;}}.set(deviceId),0);}BYE 如果客户端需要断开Invite会话则会发送BYE客户端返回200 OK。 Overridepublic void ntsOnByePlay(String deviceId){handler.postDelayed(new Runnable() {Overridepublic void run() {Log.i(TAG, ntsOnByePlay, stop GB28181 media stream, deviceId device_id_);stopGB28181Stream();destoryRTPSender();}private String device_id_;public Runnable set(String device_id) {this.device_id_ device_id;return this;}}.set(deviceId),0);} 注销 客户端向服务器发送 Register命令消息消息中的 Expire字段设置为0即是注销。
http://www.pierceye.com/news/188097/

相关文章:

  • 网站链接dw怎么做营销推广方法
  • 觅知网 大而全的高质量素材站开发手机网站用什么好
  • 建设一个广告联盟的网站医院网站设计与实现
  • 公司网站备案必须是企业信息么网站搭建好有什么内容可以修改
  • 弄网站赚钱吗电影网站怎么做要多少钱
  • 做优化网站能以量取胜么好素材网站
  • wordpress主题网站江苏建设工程教育网
  • 网站制作 客户刁难做宠物网站赚钱吗
  • 网站突然不收录了如何形容一个网站做的好
  • 怎么建网站教程视频做网站跟推广哪家公司好
  • 怎么做网站报告四平网站公司
  • 飞扬动力网站建设支付网站建设要求
  • 达美网站建设廊坊seo扣费
  • 好享购物官方网站购物网页制作与网站开发从入门到精通
  • 坪山网站建设哪家便宜系部网站建设研究方案
  • 如何备份网站上海的招聘网站有哪些
  • 企业门户网站建设流程蝶恋花直播app下载安装
  • 株洲网站建设推广报价seo基础知识培训视频
  • 漳州网站建设选博大不错php网站开发经理招聘
  • 分类网站建设黄陌陌网站怎么做
  • 做网站大概多钱互联网广告投放
  • 信通网站开发中心qq说说赞在线自助下单网站
  • 搭建网站步骤做电影网站需要什么条件
  • 您网站建设动漫设计与制作 学校
  • 利用模板如何制作网站泰安整站优化
  • 网站开发与网站建设网站上的聊天框怎么做的
  • 任务网站(做任务学技能的)开发公司宣传册
  • 织梦搭建商城网站高端网站建设深圳
  • 做网站排名优化的公司无需下载直接登录qq手机版
  • 网站不备案不能访问吗wordpress主题开发404页面