GB28181系列二:SIP信令

        我的音视频/流媒体开源项目(github)

        GB28181系列目录

目录

一、SIP报文介绍      

二、SIP交互流程:

1、Session Model

2、Pager Model

3、SIP信令交互过程中的3个定义

三、媒体传输(SDP和RTP)


一、SIP报文介绍      

        这里将会介绍SIP的报文消息格式,请求/响应方法、SIP的信令交互过程。SIP请求和响应消息格式如下图所示:

        SIP报文格式和HTTP完全一样,只不过里面的值不一样,使用的错误码也是一样,比如200表示请求成功,40x表示客户端错误,50x表示服务端错误,这样SIP就很好理解了。HTTP有GET、POST等方法,同样SIP也有自己的方法。

        SIP中常见的方法如下:

INVITE:表示主叫用户发起会话,邀请其他用户加入一个会话,也可以用在呼叫建立后用于更新会话(此时INVITE又称为Re-invite)
ACK:客户端向服务器端证实它已经收到了对INVITE请求的最终响应。
PRACK:表示对1XX响应信息的确认请求消息。
BYE:表示终止一个已经建立的呼叫。
CANCEL:表示在收到对请求的最终响应之前取消该请求,对于已完成的请求则无影响。
REGISTER:表示客户端向SIP服务器端注册列在To字段中的地址信息。
OPTIONS:表示查询被呼叫的相关信息和功能。

        SIP常见的错误码如下:

00试呼叫(Trying)
180振铃(Ringing)
181呼叫正在前转(Call is Being Forwarded)
200成功响应(OK)
302临时迁移(Moved Temporarily)
400错误请求(Bad Request)
401未授权(Unauthorized)
403禁止(Forbidden)
404用户不存在(Not Found)
480暂时无人接听(Temporarily Unavailable)
486线路忙(Busy Here)
504服务器超时(Server Time-out)
600全忙(Busy Everywhere)

二、SIP交互流程:

        介绍SIP交互流程之前需要知道SIP有两种会话模式:Session Model和Pager Model。

        会话中,对于消息体内容大于1300字节时,一般采用Session Model;对于消息体不大于1300字节时,一般采用Pager Model。

        Session Model和Pager Model区别如下:

特点Session ModelPager Model
通信类型双向实时通信单向消息发送
会话持久性持久的会话,双方可实时互动息单向发送,接收方可稍后回复
建立过程需要通过INVITE建立会话不需要会话建立
实时性高实时性,需要双方即时响应较低实时性,接收方可以稍后回复
应用场景语音、视频通话、实时聊天短信、电子邮件、离线消息通知

1、Session Model

        Session Model下的两个用户通话过程的SIP消息交互如下图:

        0:用户A和用户B在终端启用之后都会向注册服务器注册自己的信息(ip地址、账号等);

        1:主叫方A发送INVITE请求到代理服务器1;

        2:代理服务器1发送100 Trying响应,试呼叫主叫方A;

        3-6:代理服务器搜索被叫方B的地址,获取地址后转发INVITE请求;

        7-9:被叫方B生成的180振铃响应,返回给主叫方A;

        10-12:被叫方B生成的200 OK响应,返回给主叫方A;

        13-17:主叫方A收到被叫方B200 OK响应后,向被叫方B发送一个ACK,会话建立;

        18-20:会话结束后,任何参与者(A或B)都可以发送一个bye请求来终止会话;

        21-23:主叫方A发送200 OK响应来确认bye,会话终止。

        注意:连接建立之后的音视频传输就不经过代理服务器了,是用户之间直接传输(p2p)。

        这期间代理服务器只负责找到用户B并进行消息转发,如果把代理服务器去掉,而是用户A直接向用户B发起呼叫请求,那么流程就比较简单清晰了,如下图所示:

2、Pager Model

        Pager Model采用Message方法,Message方法本身并不建立Dialog(Dialog是什么会在后面说明),在多数应用中,每条IM消息都是独立的,SIP信令交互流程如下:

        Pager Model息单向发送,接收方可稍后回复,所以上图中200 OK是虚线。

3、SIP信令交互过程中的3个定义

        用户A、B之间SIP信令交互过程中有三个定义:dialog(对话)、session(会话)、transaction(事务)

        Transaction事务:是指一个请求消息以及这个请求对应的所有响应消息的集合。

        Dialog对话:是两个UA之间持续一段时间的点对点的SIP连接。

        Session会话:是一次通信过程中所有参与者之间的关联关系以及他们之间的媒体流的集合。

        上面介绍了Session Model下的两个用户通话过程的SIP消息交互流程,结合流程图再看dialog(对话)、session(会话)、transaction(事务)就比较容易理解了。

        用户A发送INVITE到收到对端的200 OK就是一个Transaction事务,用户B发送BYE到收到对端的200 OK也是一个Transaction事务,即事务就是一个完整的请求-响应过程;用户A和用户B整个通话期间(包括音视频传输过程)就是一个Session会话;用户A和用户B之间的SIP连接就是一个Dialog对话,Dialog是描述两个用户的连接即这个SIP连接的两个用户是谁,和Session不同,Session是描述两个用户的整个通话过程。

三、媒体传输(SDP和RTP)

        两个用户进行SIP信令交互的最终目的就是进行音视频通话,因此双方要进行媒体协商,SIP媒体协商使用的是SDP协议。媒体协商完毕之后,双方使用RTP协议进行音视频传输,关于RTP协议可以看我另外一个文章《RTSP系列三:RTP协议介绍》

        SDP(Session Description Protocol) 是一种用于描述多媒体会话的格式。主要用于描述会话的多媒体内容(例如音频、视频,以及编码格式)和传输方式(如传输协议、端口号等)。

sip呼叫里SDP的一些字段的含义
v=0 # sdp版本
o=- 1 0 IN IP4 164.135.25.51 # o=<用户名> <会话id> <会话版本> <网络类型><地址类型> <本机地址>
s=SNS call # 用于传递会话主题
c=IN IP4 164.135.25.51 # 记录media ip, 即接收RTP流的媒体地址,不一定是本机地址
t=0 0 # 会话时间,一般由其它信令控制,故0

m=audio 30254 RTP/AVP 0 # audio/音频接收端口(必须为偶数)/表示音频通过RTP传输/0表示允许音频的格式(见下一行"a=")
a=rtpmap:0 PCMU/8000 # 如果RTP头部的类型字段如果等于0,表示RTP负载用的数据是PCMU,8000采样率格式的音频
a=sendrecv # 可以接收也可以发送音频

m=video 30186 RTP/AVP 122 123 # video/视频接收端口(必须为偶数)/视频通过RTP传输/122,123表示允许视频的格式为122,123
a=rtpmap:122 H264/90000 # 如果RTP头部的类型字段如果等于122,表示RTP负载用的数据是H264编码格式的视频
a=fmtp:122 profle-level-id-64E01F;max-br=1152 # 122类型的视频编码参数
a=rtpmap:123 H264/90000 # 如果RTP头部的类型字段如果等于123,表示RTP负载用的数据是H264编码格式的视频
a=fmtp:123 profile-level-id-42E01F;max-br=1152 # 123类型的视频编码参数
a=sendrecv # 可以接收也可以发送视频

        SDP是在什么阶段协商的呢,如下图所示:

        SDP协商完毕之后就确定了使用什么方式传输(UDP-RTP/AVP,TCP-RTP/AVP/TCP)使用什么协议传输音视频(RTP),编码格式是什么(H264,PCMU),音视频传输的端口是多少(UDP记录了传输端口,新建UDP socket传输音视频;如果是TCP则不用关心SDP中的端口号,新建TCP socket传输音视频)。

        系列三将会详细介绍SIP各种类型消息包含的字段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/924459.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【接口自动化测试】一文从0到1详解接口测试协议!

接口自动化测试是软件开发过程中重要的环节之一。通过对接口进行测试&#xff0c;可以验证接口的功能和性能&#xff0c;确保系统正常运行。本文将从零开始详细介绍接口测试的协议和规范。 定义接口测试协议 接口测试协议是指用于描述接口测试的规范和约定。它包含了接口的请求…

CentOS7执行yum命令报错,已加载插件:fastestmirrorLoading mirror speeds from cached hostfile

一、出现一下异常问题&#xff0c;表示域名没有配置或配置错误 问题一&#xff1a; 0curl: (6) Could not resolve host: mirrors.aliyun.com; 未知的错误 问题二&#xff1a;虚拟机使用ping主机&#xff0c;提示network unreachable 2.原因分析 出现这个问题是因为yum在安装…

【Threejs进阶教程-着色器篇】9.顶点着色器入门

【Threejs进阶教程-着色器篇】9.顶点着色器入门 本系列教程第一篇地址&#xff0c;建议按顺序学习认识顶点着色器varying介绍顶点着色器与片元着色器分别的作用Threejs在Shader中的内置变量各种矩阵gl_Position 尝试使用顶点着色器增加分段数增强效果 制作平面鼓包效果鼓包效果…

Ubuntu 硬盘分区并挂载

一、什么是挂载 1.挂载的定义 在 Ubuntu&#xff08;或其他 Linux 系统&#xff09;中&#xff0c;挂载&#xff08;Mount&#xff09; 是将一个存储设备或分区连接到系统的文件系统层次结构中的过程。挂载后&#xff0c;你可以通过某个目录&#xff08;挂载点&#xff09;访问…

【前端开发】一文带你快速入门 JavaScript(上)Web 前端必备程序语言 | 环境搭建与基础知识

&#x1f4af; 欢迎光临清流君的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落 &#x1f4af; &#x1f525; 个人主页:【清流君】&#x1f525; &#x1f4da; 系列专栏: 运动控制 | 决策规划 | 机器人数值优化 &#x1f4da; &#x1f31f;始终保持好奇心&…

视频推拉流EasyDSS互联网直播点播平台技术特点及应用场景剖析

在数字科技日新月异的今天&#xff0c;视频直播和点播已经成为互联网内容传播的重要方式之一。而互联网直播点播平台EasyDSS作为功能强大的流媒体直播点播视频能力平台&#xff0c;提供了一站式的视频推拉流、转码、直播、点播、时移回放、存储等视频服务&#xff0c;广泛应用于…

Qt读写Usb设备的数据

Qt读写Usb设备的数据 问题:要读取usb设备进行通讯&#xff0c;qt好像没有对应的库支持。解决&#xff1a;libusbwindow下载 :Linux下载: QtUsb 开源的第三方库库里面的函数说明&#xff1a;window版本&#xff1a;Linux中也提供的直接下载测试代码&#xff1a;库下载&#xff1…

2024最新python使用yt-dlp

2024最新python使用yt-dlp下载YT视频 1.获取yt的cookie1&#xff09;google浏览器下载Get cookies.txt LOCALLY插件2&#xff09;导出cookie 2.yt-dlp下载[yt-dlp的GitHub地址](https://github.com/yt-dlp/yt-dlp?tabreadme-ov-file)1&#xff09;使用Pycharm(2024.3)进行代码…

一加ACE 3 Pro手机无法连接电脑传输文件问题

先说结论&#xff1a;OnePlus手机无法连接电脑传输数据的原因&#xff0c;大概率是一加数据线的问题。尝试其他手机品牌的数据线&#xff08;比如华为&#xff09;&#xff0c;再次尝试。 连接电脑方法&#xff1a; 1 打开开发者模式&#xff08;非必要操作&#xff09; 进入…

java:aqs实现自定义锁

aqs采用模板方式设计模式&#xff0c;需要重写方法 package com.company.aqs;import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock;…

linux系统下如何将xz及ISO\img等格式压缩包(系统)烧写到优盘(TF卡)

最近用树莓派做了个NAS&#xff0c;效果一般&#xff0c;缺少监控及UI等&#xff0c;详细见这篇文章&#xff1a; https://blog.csdn.net/bugsycrack/article/details/135344782?spm1001.2014.3001.5501 所以下载了专门的基于树莓派的NAS系统直接使用。这篇文章是顺便复习一…

python除了熟悉的pandas,openpyxl库也很方便的支持编辑Excel表

excel表格是大家经常用到的文件格式&#xff0c;各行各业都会跟它打交道。之前文章我们介绍了使用openpyxl和xlrd库读取excel表数据&#xff0c;使用xlwt库创建和编辑excel表&#xff0c;在办公自动化方面可以方便我们快速处理数据&#xff0c;帮助我们提升效率。 python之open…

【VUE3】新版Vue3+ElementPlus全家桶开发视频项目实战

VUE 介绍 Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。 Vue.js是一个MVVM(Model - View - ViewModel)的SPA框架。 Model:数…

介绍一下atol(arr);(c基础)

hi , I am 36 适合对象c语言初学者 atol(arr)&#xff1b;是返回整数(long型)&#xff0c;整数是arr数组中字符中数字 格式 #include<stdio.h> atol(arr); 返回值arr数组中的数字 未改变arr数组 #include<stdio.h> //atol(arr); 返 <stdlib> int main…

微信小程序WXSS全局样式与局部样式的使用教程

微信小程序WXSS全局样式与局部样式的使用教程 引言 在微信小程序的开发中,样式的设计与实现是提升用户体验的关键部分。WXSS(WeiXin Style Sheets)作为微信小程序的样式表语言,不仅支持丰富的样式功能,还能通过全局样式与局部样式的灵活运用,帮助开发者构建美观且易于维…

OceanBase 大数据量导入(obloader)

现需要将源数据库&#xff08;Oracle|MySQL等&#xff09;一些表的海量数据迁移到目标数据库 OceanBase 中&#xff0c;基于常规 jdbc 驱动编码的方式涉及开发工作&#xff0c;性能效率也要看编码的处理机制。 OceanBase 官方提供了的 OceanBase Migration Service (OMS) 数据…

Spring Boot框架:英语知识网站构建指南

3系统分析 3.1可行性分析 通过对本英语知识应用网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本英语知识应用网站采用SSM框架&#xff0c;JAVA作为开发语…

路由器中继与桥接

一 . 背景 现在的路由器大多数已经开始支持多种网络连接模式&#xff0c;以下将以TP-Link迷你无线路由器为例进行展开介绍。在TP-Link迷你无线路由器上一般有AP&#xff08;接入点&#xff09;模式&#xff0c;Router&#xff08;无线路由&#xff09;模式&#xff0c;Repeate…

Paddle Inference部署推理(一)

一&#xff1a;Paddle Inference推理 简介 Paddle Inference 是飞桨的原生推理库&#xff0c;提供服务器端的高性能推理能力。由于 Paddle Inference 能力直接基于飞桨的训练算子&#xff0c;因此它支持飞桨训练出的所有模型的推理。 Paddle Inference 功能特性丰富&#xff…

前端 vue3 + element-plus + ts 对话框示例

【父组件】&#xff1a;SampleInput.vue&#xff0c;局部代码片段 引入子组件 ApplyItemChooseDialog.vue&#xff0c;定义变量&#xff0c;用于渲染和显示标识 <script>片段代码 import ApplyItemChooseDialog from "/views/accept/ApplyItemChooseDialog.vue&q…