gb28181的sip通信
目前gb28181的sip通信基本上都是采用C++,C开发,开源的解决方案有osip,resip等等,高级语言的通信库很少。而且gb28181在sip方面其实应用很少,仅仅用到了点对点通信,并没有用到代理模式,路由模式等等。另外这几个开源的方案,性能上面都有很大不足。尽管我使用这些方案完成了sip的开发,但是我总是不太满意,每次修改一个功能都要看半天代码。
针对上述情况,我决定采用高级语言C# 在netcore2.0下面开发一套符合gb28181要求的sip通信库,并计划开源。由于本人还没有github账号,所以第一步,先申请一个账号,建立了个工程如下:
https://github.com/g0415shenw/gb28181_Sip
接下来,开始梳理gb28181的sip信令组成,这个时候,我们需要做的就是仔细阅读gb28181-2016的书。
我罗列了我需要下载的文档:
命令 | 参考文档 |
Register | Rfc3261 |
Invite | Rfc3261 |
Info | Rfc2976 |
Message | Rfc3428 |
大概的结构我梳理了一下,如下:
一口吃不成一个胖子,所以,我们一步一步慢慢解析,我觉得比较幸运,除了有文档以外,我还能抓包研究协议,这样开发的效率大大提高,理论与实践同行。
1、TCP和UDP的网络传输
通过对上述UDP协议的观察,我们发现,
第一条:请求的IP地址:192.168.50.90 请求的端口5061 目的地址:192.168.50.64 目的端口5061
第二条:请求的IP地址:192.168.50.64 请求端口5061 目的地址:192.168.50.90 目的端口5061
总结:UDP的sip 通信,需要再本地绑定一个UDP的端口,此端口用来发送信息以及接收信令,接收方同理也是绑定一个本地的UDP端口,即用来接收信令,又用来发送信令。或者这么理解,服务端接收到一个请求后,可以获取到对方的UDP端口与IP地址,应答的消息也需要发送给这个UDP的端口和IP地址。
这个只是猜测,我尝试在rfc3261中找到解释。
下面找到了这么一段话:
https://www.cnblogs.com/zhangming-blog/articles/5900244.html (参考这篇文章的介绍)
https://blog.csdn.net/dingpeng1978/article/details/2652380
看了好多,我决定先这么设计网络通信:
UDP应答消息根据UDP接收消息的源IP地址与端口
UDP请求消息根据目的IP地址与端口
tcp请求消息根据目的IP地址与端口
tcp应答消息根据接收tcp请求的连接
这里不准备根据via进行应答,也不准备根据contact进行应答,
原因如下:
via在国标的示例里面,好像填写的信息很少,也没有明确如何应答的IP与端口。网络层暂时就这么办。
**********************************sip协议解析与封装***************************
这里的设计思路是,
写一个基类负责解析与封装,这里需要总结出Regiser,message,Invite的统一规律。
封装的话,我计划把类赋值之后,直接序列化成字符串,即可。
**********************************sip事务***************************
sip事务机制,我觉得主要就是处理消息的重发,这里针对的是UDP的消息,Tcp的有协议层实现。还有一个作用
就是接收到重发的消息之后的屏蔽,就是说如果接收到多个同样的消息,我们需要屏蔽消息,然后通知到应用层只能是一条消息。事务机制还有就是各种状态的保存,超时的判断等等。
这里的话,我觉得再好好把RFC文档再读一遍,才开始编码。
*********************************API接口***************************
接收消息我准备以为事件的形式通知出来,然后就是发送消息的API封装。
**********************************大概就这些*****************************************
下面就是通读rfc3261文档,然后开始编码,先读完书再说,另外我计划先安装正常的流程实现功能,后续再补充异常的处理。
gb28181的sip通信相关推荐
- 过NAT的SIP通信环境搭建
环境说明 最近需要搭建一个内外网sip通信的环境,大概拓扑如下: client1和SIP server都在内网,client2在外网,三者都经过防火墙做NAT,防火墙会开启ALG功能,内外网互相访问使 ...
- GB28181协议--SIP协议介绍
1.SIP协议简介 SIP(Session Initiation Protocol,会话初始协议)是一个用于建立.更改和终止多媒体会话的应用层控制协议,其中的会话可以是IP电话.多媒体会话或多媒体 ...
- sip gw功能包括_道哥漫谈:大话有趣的SIP通信
图-1 电话通信 1.SIP是何物? SIP(会话发起协议)属于IP应用层协议,用于在IP网上为用户提供会话应用.会话(Session)指两方或多方用户之间的语音.视频.及其他媒体形式的通信,具体可能 ...
- GB28181 协议 SIP
2.注册信令 2.1基本注册 2.1.1 抓包过程 2.1.2 详细步骤 2.1.2.1.REGISTER REGISTER sip:34020000002000000001@192.168.9.1 ...
- 多元融合通信+可视指挥调度平台VMS/smarteye,支持SIP语音网关PBX与4G/5G执法记录仪、智能安全帽等视频终端的互联互通
多元融合通信+可视指挥调度平台VMS/smarteye,支持SIP语音网关PBX与4G/5G执法记录仪.智能安全帽等视频终端的互联互通 多源融合通信指挥~可视指挥调度平台VMS/Smarteye,默认 ...
- gb28181简单实现sip信令服务器(java版基于springboot):四、sip摄像头心跳保活、推流(tcp/udp)和结束推流
心跳文本 //摄像头发送过来的Keepalive保活信息 MESSAGE sip:34020000002000000001@192.168.1.201:5060 SIP/2.0 //MESSAGE 方 ...
- Java 用JainSip实现服务器端SIP通讯----之监听篇
Java web服务器实现SIP通讯(或GB28181),一般有两种选择:SipServlet和JainSip 前者更适合服务器,后者较适合客户端 前者用类似web servlet的方式实现了sip通 ...
- 简单了解音视频传输协议SDP、RTP、RTMP、SIP等
SDP 会话描述协议(SDP)为会话通知.会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述.参考RFC2327(Request For Comments(RFC),是一系列以编号排定的文 ...
- 智能会议系统(35)---深入浅出sip协议
深入浅出sip协议 传统电话是电磁波的通信,当电话技术发展到IP技术时代,SIP协议成为了电话通信标准协议,不仅可以通电话.还可以收发信息.视频.开会.放PPT.事实上,今天的通信业已全面采用SIP协 ...
最新文章
- Python任意网段Web端口信息探测工具
- leetcode 刷题之路 64 Construct Binary Tree from Inorder and Postorder Traversal
- git拉取远程分支并创建本地分支
- CSS基础_Day03
- TF之DeepDream:DeepDream前世今生之简介、安装、使用方法之详细攻略
- ElasticSearch logo 分布式搜索引擎 ElasticSearch
- 如何在 C# 中使用 委托
- The table(CF226D)
- 【报告分享】90后人群消费趋势研究报告.pdf
- [CODEVS 1036]商务旅行
- THREEJS - 点击/拾取
- ULN2003的使用
- C++C面试题100道分析(21-40)
- 申请XenCenter许可证
- 北京单身狗都去哪儿了
- ie检查服务器证书吊销,“检查服务器证书是否已吊销”的勾选去掉
- web概念、B/C、C/S区别与优缺点以及网络通信三要素:IP、端口号、传输地址
- 最广泛使用的服务器软件爆出网络安全漏洞
- opencv调用basler简单示例
- 很有用的东西,可以修复MBR引导区,在windows命令行下mbrfix /drives 0 fixmbr就可以了
热门文章
- android 内存测试
- 将不确定变为确定~Linq to SQL不能随机排序吗?
- VOIP Codec 三剑客之 ISAC/ILBC -- ISAC (4) Pitch Parameters Encode 模块
- grappelli美化Django Admin
- 人工智能 深度学习(Deep learning)开源框架
- Linux中常用目录作用
- linux命令安装中英文插件,linux – 如何使用命令行自动安装Eclipse插件?
- python音频实时频谱分析_基于python的音频设计及频谱分析
- Appium+Python之PO模型(Page object Model)
- 【Linux】文件描述符与重定向