该专栏选去两种协议(pjsip、resip)进行学习,其他协议暂时不纳入讲解范围。这两种协议均是我亲自使用、验证过。以下一些言辞仅是我一家之言,有不对的地方欢迎大家指正,谢谢。

PJSIP和ReSIP区别

1、ReSIProcate协议栈
ReSIProcate是SIPFoundry的开源项目,ReSIProcate协议栈是在VOCAL的基础上建立的,由于VOCAL开始只支持rfc3254,为了支持最新的rfc3261,ReSIProcate协议栈就这样诞生了。但现在,ReSIProcate已经成为一个独立SIP协议栈了,它性能较为稳定,并且很多商业的应用都使用它。

2、PJSIP协议栈
PJSIP是一个开源的SIP协议栈,PJSIP协议栈同时支持音频、视频并支持即时通讯。PJSIP协议栈具有非常完善的文档,对开发者非常友好,是开发即时通讯系统的首选。同时PJSIP协议栈具有非常好的移植性,几乎支持现今所有的操作系统系统:从桌面系统、嵌入式系统到智能手机

总之:resip可控性更强,用起稍复杂,没有现成接口;pjsip接口更简单易用、平台兼容性强,但可控性较差,比如发送INFO的时候,不能自定义content等。

SIP协议简介

SIP(Session Initiation Protocol,会话初始协议)是一个用于建立、更改和终止多媒体会话的应用层控制协议,其中的会话可以是IP电话、多媒体会话或多媒体会议。SIP是IETF多媒体数据和控制体系结构的核心协议(最新RFC文档是RFC 3261)。其主要目的是为了解决IP网中的信令控制,以及同软交换平台的通信,从而构成下一代的增值业务平台,对电信、银行、金融等行业提供更好的增值业务。

SIP用于发起会话,它能控制多个参与者参加的多媒体会话的建立和终结,并能动态调整和修改会话属性,如会话带宽要求、传输的媒体类型(语音、视频和数据等)、媒体的编解码格式、对组播和单播的支持等。SIP协议基于文本编码,大量借鉴了成熟的HTTP协议,并且具有易扩展、易实现等特点,因此非常适合用来实现基于因特网的多媒体通信系统。

SIP的几个基本概念

1.多媒体会话

根据RFC 2327的定义,多媒体会话(Multimedia Session)是指一组多媒体发送者和接受者,以及从发送者到接受者的数据流。例如一个多媒体会议就是一个多媒体会话。一个会话由一组用户名称、会话ID、网络类型、地址类型以及各个单元的地址来确定。

2. 用户代理

用户代理(UA,User Agent)也称SIP终端,是指支持SIP协议的多媒体会话终端。一般使用支持SIP协议的路由器作为SIP UA。

UA包括用户代理客户端(UAC,User AgentClient)和用户代理服务器(UAS,User AgentServer)。一般说的UA均是指二者的总称,因为在一次呼叫中,一个SIP终端既要处理SIP请求,又要发起SIP请求。

用户代理客户端是指在SIP会话建立过程中主动发送会话请求的设备。例如,主叫SIP终端。当代理服务器向被叫终端发送会话请求时,它就成为用户代理客户端。

用户代理服务器是指在SIP会话建立过程中接收会话请求的设备。例如,被叫SIP终端。当代理服务器接收主叫终端发送会话请求时,也作为用户代理服务器。

3.代理服务器

代理服务器(Proxy Server)的作用就是传递主叫UA发送的会话请求到被叫UA,然后将被叫UA的响应传递回主叫UA,它相当于主叫UA和被叫UA之间传递会话消息的一座桥梁。代理服务器在接收到主叫UA的会话请求后,首先要向位置服务器请求查找被叫UA的位置以及主、被叫UA的呼叫策略信息。只有找到被叫UA并且此呼叫是允许的,代理服务器才会向被叫UA发送会话请求。代理服务器一般在SIP会话中都是需要的。

4.重定向服务器

重定向服务器(Redirect Server)用来指示客户端连接的新地址。比如,主叫UA呼叫被叫UA,当重定向服务器收到主叫UA发送的会话请求消息后,查找被叫UA的位置信息,然后将其返回给主叫UA,使主叫UA重新向该位置发起会话请求。此位置可以是被叫UA的位置,也可以是一个代理服务器的位置。接下来主叫UA如同直接呼叫被叫UA或者向代理服务器呼叫的流程一样。

5. 位置服务器

位置服务器(Location Server)是为代理服务器和重定向服务器等提供UA信息的设备。位置服务器记录了注册服务器接收到的UA的信息。二者可以独立存在,也可以作为逻辑组件存在于同一台服务器上。

6. 注册服务器

注册服务器(Registrar Server)接受用户注册,注册的内容(如本地号码等信息)一般是存储在位置服务器上,供后续查询使用。二者都是逻辑组件,一般存在于同一台服务器上。

工作原理简介

1. 登记注册

在完整的SIP系统中,所有的SIP终端作为User Agent都应该向注册服务器登记注册,以告知其位置、会话能力、呼叫策略等信息。

通常,SIP终端开机启动或者配置管理员执行注册操作时,就向注册服务器发送注册请求消息(REGISTER),该消息中携带了所有需要登记的信息。注册服务器收到注册请求消息后向终端发送回应消息,以告知其请求消息已收到。如果注册成功,就再向终端发送“200 OK”消息。如图 1所示。

2. 建立呼叫

SIP协议采用Client/Server模型,主要通过UA与代理服务器之间的通信来完成用户呼叫的建立过程。

如图 2所示,Telephone A需要呼叫电话Telephone B,两台路由器作为SIP终端(UA)。当Telephone A拨完电话Telephone B的号码后,Router A向Proxy Server发送会话请求消息。Proxy Server通过查找Telephone B的号码所对应的信息,向Router B发送会话请求消息。Router B收到请求后,如果Telephone B可用,就向Proxy Server发送应答,并使Telephone B振铃。Proxy Server收到应答后,向Router A发送应答消息。这里所说的应答包括:两个临时应答(100 Trying 和180 Ringing)和一个成功应答(200 OK)。整个过程中的消息交互如图 3所示。

这个例子是一种简单的应用,只使用了一个代理服务器。在复杂的应用中,可以有多个代理服务器,以及注册服务器。

3. 重定向呼叫

SIP重定向服务器收到会话请求消息后,不是转发会话请求消息,而是在回应消息中告知被叫SIP终端的地址。主叫终端从而重新直接向被叫终端发送会话请求消息。被叫终端也将直接向主叫终端发送应答消息。呼叫过程的消息交互如图 4所示。

这是比较常见的一种应用。从原理上来说,重定向服务器也可以向主叫终端回复一个代理服务器的地址,接下来的呼叫过程就和使用代理服务器的呼叫过程一样。

参考文章链接:http://blog.csdn.net/mojing008/article/details/40742127

转载于:https://www.cnblogs.com/SunkingYang/p/11049162.html

SIP语音对讲从零到整之(一)sip介绍相关推荐

  1. 实现语音对讲_什么是五方通话?智慧电梯SIP五方对讲系统详细方案

    什么是五方通话? 电梯机房 + 轿顶 + 轿箱内 + 底坑 + 值班中心 = 五方通话 五方通话的作用 一.紧急求助:当有人被困在电梯时,可以与值班中心通话,迅速处理,安抚被困人员. 二.警告:当有人 ...

  2. 基于sip的语音对讲 Demo

    SipVoice 项目地址:SipVoice 该 demo 基于https://github.com/VoiSmart/pjsip-android 项目实现语音对讲对讲功能. 还有很多关于 pjsip ...

  3. 基于pjsip实现p2p语音对讲

    目的 为实现跨网络的语音对讲,使位于NAT后的两个设备进行p2p的语音通讯,此处选用pjsip开源项目来实现. 未解决的问题:对称型的NAT无法实现p2p打洞,pjsip采用turn服务进行转发,不能 ...

  4. GB28181语音对讲/摄像头公网对讲指挥

    目录 概述 GB28181公网对讲特别说明 GB28181语音对讲原理​ 公网摄像头语音对讲解决方案 LiveMedia介绍 LiveMedia GB28181平台搭建 概述 摄像头语音对讲是在201 ...

  5. 安卓GB28181设备语音广播和语音对讲(Android GB28181 语音广播和语音对讲)实现

    安卓GB28181语音广播和语音对讲是一个非常重要的功能,很多场景都需要.语音对讲需要安卓有接收语音广播的功能.安卓还需要采集音频,并和视频一起打包到PS传给服务器,采集音频传服务器实现较容易.关键还 ...

  6. GB28181系列笔记-语音对讲功能

    GB28181系列笔记-注册与保活 GB28181系列笔记-设备目录查询 GB28181系列笔记-实时流请求 GB28181系列笔记-历史流查询与请求 GB28181系列笔记-语音对讲功能 GB281 ...

  7. 关于使用GB28181协议实现与大华摄像机的语音对讲功能小记

    目前只测试了与大华摄像机的语音对讲功能,在此记录下对接工程中遇到的问题和收获. 首先我们需要理清下思路: 第一步要熟悉语音对讲的协议流程,下图为国标28181中的参考图: 这里我们可以简化下流程,只参 ...

  8. FreeSwitch公网语音对讲可以接通但没有声音问题探究

    背景 公司业务用到对讲系统,采用FreeSWITCH自己搭对讲服务器.原本有一台对讲服务器部署在华为云,因为价格贵及经常受攻击的原因,要迁移到阿里云服务器.于是,运维人员在阿里云服务器部署一个Free ...

  9. 局域网自建对讲服务器,Windows 局域网语音对讲

    [实例简介] Windows下局域网语音对讲程序 ,亲测可行. [实例截图] [核心代码] new_ └── new_ ├── 发送 │   ├── Debug │   │   ├── Sound_s ...

最新文章

  1. CMD 输入中文看不到输入法的解决方法
  2. CVPR2020 3D目标检测 PV-RCNN
  3. 腾讯微博即将关停,十年了,你用过吗?
  4. leetcode算法题--石子游戏
  5. 调用face++平台api进行人脸识别
  6. 续上篇---shiro从数据库获取动态权限-cjq
  7. oracle数据库内核,深入内核:Oracle数据库里SELECT操作Hang解析
  8. 动态规划——零钱兑换(Leetcode 322)
  9. 【Java并发编程】16、ReentrantReadWriteLock源码分析
  10. php charat,charAt(i) 函数
  11. 比较经典的java程序_一些经典的java小程序代码,最好能复制后直接使用的 爱问知识人...
  12. ubuntu显卡驱动掉了重新装
  13. node_redis 中文文档及node_redis 注释笔记(中文版)
  14. MiCT: Mixed 3D/2D convolutional tube for human action recognition
  15. LowB三人组--插入排序原理和java实现
  16. python运势预测程序_运势.py · Scar/Python-Spider - Gitee.com
  17. 程序员数学(18)–平行四边形
  18. 两个栈来实现一个队列的C++代码(某公司社会招聘笔试题)
  19. Spark中repartition和coalesce的用法
  20. vue一些utils

热门文章

  1. 链路聚合(二层链路和三层链路)
  2. 二层交换与MAC地址
  3. 从事嵌入式行业年薪有多少,你和高薪究竟差了哪些东西?
  4. 《善数者成:大数据改变中国》读书笔记3
  5. java计算机毕业设计旅游网站源程序+mysql+系统+lw文档+远程调试
  6. php头像获取,php获取QQ头像并显示的方法
  7. 移动端复制文本到剪贴板唤起微信安卓和ios兼容性
  8. windows mobile注册表修改小全
  9. 结束计算机进程的快捷键,结束进程快捷键是什么?Win7结束进程快捷键介绍
  10. 人工智能换脸pythonapp_如何用小200行Python代码做一个换脸程序?