深入解析音视频流媒体SIP协议交互过程
一、引言
在音视频流媒体传输过程中,SIP(Session Initiation Protocol)协议发挥着举足轻重的作用。本文将详细全面地介绍音视频流媒体传输中的SIP协议,包括其基本概念、交互过程、关键信令以及应用场景
二、SIP协议基本概念
1. 定义:
SIP是一种应用层控制协议,用于创建、修改和释放一个或多个参与者的会话。
2. 功能:
SIP协议主要实现以下功能:
(1)用户定位:通过SIP协议,可以找到终端用户的当前位置。
(2)会话建立:在找到用户后,SIP协议负责建立会话。
(3)会话修改:在会话过程中,SIP协议支持修改会话参数。
(4)会话释放:结束会话时,SIP协议负责释放相关资源。
三、SIP协议交互过程概述
1. 注册过程
(1)用户端(UAC)向SIP服务器发送注册请求。
(2)SIP服务器(UAS)验证用户信息,并存储在数据库中。
(3)SIP服务器向用户端发送注册成功响应。
2. 邀请过程
(1)UAC向UAS发送INVITE请求,邀请对方加入会话。
(2)UAS收到INVITE请求后,向UAC发送100 Trying响应。
(3)UAS向UAC发送180 Ringing响应,表示正在响铃。
(4)UAS接受邀请,向UAC发送200 OK响应。
(5)UAC收到200 OK响应后,向UAS发送ACK确认。
(6)会话建立,开始传输音视频数据。
3. 会话修改过程
(1)UAC向UAS发送RE-INVITE请求,请求修改会话参数。
(2)UAS收到RE-INVITE请求后,向UAC发送100 Trying响应。
(3)UAS同意修改,向UAC发送200 OK响应。
(4)UAC收到200 OK响应后,向UAS发送ACK确认。
4. 会话释放过程
(1)UAC向UAS发送BYE请求,表示要结束会话。
(2)UAS收到BYE请求后,向UAC发送200 OK响应。
(3)会话结束,资源释放。
四、SIP协议关键信令
- 方法(Method):SIP协议中的方法包括INVITE、ACK、OPTIONS、BYE、CANCEL、REGISTER等。
- 响应(Response):SIP协议中的响应包括1xx(临时响应)、2xx(成功响应)、3xx(重定向响应)、4xx(客户端错误响应)、5xx(服务器错误响应)和6xx(全局错误响应)。
- 头域(Header):SIP协议中的头域包括To、From、Contact、Call-ID、CSeq等。
- 消息体(Body):SIP协议中的消息体用于携带会话描述协议(SDP)等信息。
五、协议交互示例
以视频会议的SIP协议交互为例,假设有两个用户,Alice和Bob,他们要通过视频会议系统进行通话。以下是整个过程的SIP协议交互步骤和详细解释。
1. Alice注册到SIP服务器
REGISTER sip:example.com SIP/2.0
Via: SIP/2.0/UDP alice-pc.example.com;branch=z9hG4bKnashds7
To: <sip:alice@example.com>
From: <sip:alice@example.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 1 REGISTER
Contact: <sip:alice@alice-pc.example.com>
Max-Forwards: 70
Content-Length: 0
- REGISTER: SIP方法,用于注册用户位置。
- Via: 标识请求的传输路径。
- To: 指定注册用户的地址。
- From: 指定注册用户的地址,并包含一个标签(tag)用于匹配响应。
- Call-ID: 通话的唯一标识符。
- CSeq: 请求序列号,用于匹配请求和响应。
- Contact: 指定用户当前的联系方式。
- Max-Forwards: 限制请求的最大转发次数。
- Content-Length: 消息体的长度,这里为0,因为没有消息体。
2. SIP服务器响应Alice的注册请求
SIP/2.0 200 OK
Via: SIP/2.0/UDP alice-pc.example.com;branch=z9hG4bKnashds7
To: <sip:alice@example.com>;tag=1234567
From: <sip:alice@example.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 1 REGISTER
Contact: <sip:alice@alice-pc.example.com>
Expires: 3600
Content-Length: 0
- 200 OK: SIP响应代码,表示注册成功。
- To 和 From: 包含了请求中的标签。
- Expires: 指定注册的有效期。
3. Alice发起视频会议邀请
INVITE sip:bob@example.com SIP/2.0
Via: SIP/2.0/UDP alice-pc.example.com;branch=z9hG4bK74bf9
To: <sip:bob@example.com>
From: <sip:alice@example.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 2 INVITE
Contact: <sip:alice@alice-pc.example.com>
Content-Type: application/sdp
Content-Length: 151
(v=0
o=alice 2890844526 2890844526 IN IP4 alice-pc.example.com
s=
c=IN IP4 alice-pc.example.com
t=0 0
m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 31
a=rtpmap:31 LPCM/8000)
- INVITE: SIP方法,用于发起会话。
- Content-Type: 指定消息体的类型,这里是SDP(Session Description Protocol)。
- Content-Length: 消息体的长度。
- SDP: 描述了会话的媒体信息,包括音频和视频的端口、编码格式等。
4. Bob的SIP服务器转发INVITE请求
Bob的SIP服务器收到Alice的INVITE请求后,会将其转发给Bob。
5. Bob响应INVITE请求
SIP/2.0 200 OK
Via: SIP/2.0/UDP alice-pc.example.com;branch=z9hG4bK74bf9
To: <sip:bob@example.com>;tag=456789
From: <sip:alice@example.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 2 INVITE
Contact: <sip:bob@bob-pc.example.com>
Content-Type: application/sdp
Content-Length: 145
(v=0
o=bob 2890844527 2890844527 IN IP4 bob-pc.example.com
s=
c=IN IP4 bob-pc.example.com
t=0 0
m=audio 49172 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 49174 RTP/AVP 96
a=rtpmap:96 H264/90000)
- m=audio 49172 RTP/AVP 0: 表示Bob的音频流使用端口49172,使用RTP协议,音频编码为PCMU。
- m=video 49174 RTP/AVP 96: 表示Bob的视频流使用端口49174,使用RTP协议,视频编码为H264。
6. Alice确认会话
收到Bob的200 OK响应后,Alice发送ACK请求以确认会话。
ACK sip:bob@bob-pc.example.com SIP/2.0
Via: SIP/2.0/UDP alice-pc.example.com;branch=z9hG4bK74bf9
To: <sip:bob@example.com>;tag=456789
From: <sip:alice@example.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 3 ACK
Content-Length: 0
- ACK: SIP方法,用于确认INVITE请求的最终响应。
- CSeq: 序列号增加,表示新的请求。
7. 媒体流传输
在Alice发送ACK后,Alice和Bob之间的媒体流开始传输。音频和视频数据通过RTP协议在Alice和Bob之间直接传输,而不通过SIP服务器。
8. 结束会话
假设Alice想要结束通话,她会发送BYE请求。
BYE sip:bob@bob-pc.example.com SIP/2.0
Via: SIP/2.0/UDP alice-pc.example.com;branch=z9hG4bK74bf9
To: <sip:bob@example.com>;tag=456789
From: <sip:alice@example.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 4 BYE
Content-Length: 0
- BYE: SIP方法,用于终止一个已经建立的会话。
9. Bob确认结束会话
Bob收到BYE请求后,发送200 OK响应以确认会话结束。
SIP/2.0 200 OK
Via: SIP/2.0/UDP alice-pc.example.com;branch=z9hG4bK74bf9
To: <sip:bob@example.com>;tag=456789
From: <sip:alice@example.com>;tag=1928301774
Call-ID: a84b4c76e66710
CSeq: 4 BYE
Content-Length: 0
六、SIP协议应用场景
- VoIP电话:SIP协议广泛应用于VoIP电话系统,实现语音通话、视频通话等功能。
- 即时通讯:SIP协议可用于即时通讯软件,实现文字聊天、语音聊天、视频聊天等功能。
- 视频会议:SIP协议支持多方视频会议,提高企业沟通效率。
- IoT设备:SIP协议可用于物联网设备之间的通信,实现远程监控、控制等功能。
相关文章:
深入解析音视频流媒体SIP协议交互过程
一、引言 在音视频流媒体传输过程中,SIP(Session Initiation Protocol)协议发挥着举足轻重的作用。本文将详细全面地介绍音视频流媒体传输中的SIP协议,包括其基本概念、交互过程、关键信令以及应用场景 二、SIP协议基本概念 1.…...
linux安装mysql8.0.40
一、下载MySQL安装包 1.查看glibc版本 rpm -qa | grep glibc 2.到mysql官网下载安装包 二、解压安装 1.上传压缩包纸/usr/local 目录下,解压: tar -xvf mysql-8.0.40-linux-glibc2.17-x86_64.tar.xz 2.重命名: mv mysql-8.0.40-linux-…...
Java基础之控制语句:开启编程逻辑之门
一、Java控制语句概述 Java 中的控制语句主要分为选择结构、循环结构和跳转语句三大类,它们在程序中起着至关重要的作用,能够决定程序的执行流程。 选择结构用于根据不同的条件执行不同的代码路径,主要包括 if 语句和 switch 语句。if 语句有…...
如何还原 HTTP 请求日志中的 URL 编码参数?详解 %40 到 @
在记录HTTP请求的日志中出现了这样的情况: 2024-11-20 11:12:49 INFO network_request gz_login 96 Body: countryAbbrCN&countryCode86&email1222405567%40qq.com&password12354e50456db124f9f34e2789308733&type1 出现这种情况的原因是&#x…...
usb_cam ros包话题说明,image transport包使用
1. /usb_cam/image_raw 类型: sensor_msgs/Image 内容: 摄像头采集的原始图像数据。 用途: 图像处理和分析,例如使用 OpenCV 处理图像。视频流可达10MB/s 图像流查看,例如用 rqt_image_view 进行显示: 2./usb_cam/image_raw/compressed …...
微前端-MicroApp
微前端即是由一个主应用来集成多个微应用(可以不区分技术栈进行集成) 下面是使用微前端框架之一 MicroApp 对 react微应用 的详细流程 第一步 创建主应用my-mj-app 利用脚手架 npx create-react-app my-mj-app 快速创建 安装 npm install --save rea…...
Unity UGUI 垂直循环复用滚动
一 基础类 在unity里面新建这几个类 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// 垂直方向滚动 /// </summary> public class CustomScroll:MonoBehaviour {public …...
Spring MVC 深度剖析:优势与劣势全面解读
文章目录 Spring MVC 优势1. **松耦合**2. **易于测试**3. **灵活性**4. **强大的配置机制**5. **异常处理**6. **国际化支持**7. **数据验证**8. **安全性**9. **性能优化** Spring MVC 劣势1. **学习曲线**2. **配置复杂性**3. **性能开销**4. **视图技术限制**5. **社区和支…...
力扣hot100-->前缀和/前缀书/LRU缓存
前缀和 1. 560. 和为 K 的子数组 中等 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1: 输入:nums [1,1,1], k 2 输出:2示例 2&#…...
Three.js CSS2D/CSS3D渲染器
在Three.js开发过程中,有时需要将 HTML 元素与 Three.js 渲染的 3D 场景相结合,这就需要用到 CSS2DRenderer 和 CSS3DRenderer。本文将详细介绍这两种渲染器的原理及其应用 一、CSS2DRenderer 渲染器 概述 CSS2DRenderer 渲染器用于在 3D 场景中渲染纯…...
mongodb文档字符串批量替换
【mongodb文档字符串批量替换脚本语句】 前言: 1、本方式对于数据量大的情况不适用,执行可能比较慢; 2、数据量大的情况,个人推荐代码层面解决,多线程替换更快: (1)写实体类的方式…...
前端安全和解决方案
提到这个我可能想到的就是不要暴露太多的账号密码信息。一些页面的请求和操作要加上权限。 然后下面就详细的介绍前端可能遇到的安全问题以及解决方法。 首先比较常见的前端的安全性问题就是跨站脚本攻击(XSS)。跨站请求伪造(csrfÿ…...
Tlias智能辅助学习系统-部门管理
包括查询、新增、删除、修改功能 控制层 package com.itheima.controller;import com.itheima.pojo.Dept; import com.itheima.pojo.Result; import com.itheima.service.DeptService; import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.XSlf4j; import org.spr…...
React第十节组件之间传值之context
1、Context 使用creatContext() 和 useContext() Hook 实现多层级传值 概述: 在我们想要每个层级都需要某一属性,或者祖孙之间需要传值时,我们可以使用 props 一层一层的向下传递,或者我们使用更便捷的方案,用 creatC…...
flink中barrier不对齐的原因和影响
Barrier 不对齐(Barrier Misalignment)可能导致一些性能和一致性相关的问题,但 Flink 提供了机制来确保即使在不对齐的情况下,也可以保证数据的一致性。 1. 什么是 Barrier 不对齐? Barrier 不对齐是指在分布式数据流…...
软银集团孙正义再度加码OpenAI,近屿智能专注AI人才培养
11月28日凌晨,全球最大财经CNBC报道,软银集团创始人兼CEO孙正义再次向人工智能领域的领军企业OpenAI投资了15亿美元。软银对OpenAI的投资已不是首次。就在上个月,软银已在OpenAI的上一轮融资中注入了5亿美元的资金。但他一直寻求获得OpenAI更…...
麒麟系统x86安装达梦数据库
一、安装准备前工作 操作系统:银河麒麟V10,CPU: x86_64 架构 下载地址,麒麟官网:https://www.kylinos.cn/ 数据库:dm8_20220915_x86_kylin10_64 下载地址,达梦数据库官网:https://…...
Java中的“多态“详解
多态(Polymorphism)是面向对象编程(OOP)中的一个核心概念,它允许同一个接口或方法在不同对象上具有不同的实现方式。多态性使得程序在运行时可以根据对象的实际类型来决定调用哪个方法,从而提高代码的灵活性…...
buuctf-[SUCTF 2019]EasySQL 1解题记录
把你的旗帜给我,我会告诉你这面旗帜是对的。 堆叠注入查询数据库 1; show databases; 查询表名 1; show tables; 获取flag 1;set sql_modepipes_as_concat;select 1...
ASP.NET Core 入门
使用 .NET CLI 创建并运行 ASP.NET Core Web 应用。 文章目录 一、先决条件二、创建Web应用项目三、运行应用四、编辑Razor页面 一、先决条件 .NET 8.0 SDK 二、创建Web应用项目 打开命令行界面,然后输入以下命令: dotnet new webapp --output aspne…...
php反序列化1_常见php序列化的CTF考题
声明: 以下多内容来自暗月师傅我是通过他的教程来学习记录的,如有侵权联系删除。 一道反序列化的CTF题分享_ctf反序列化题目_Mr.95的博客-CSDN博客 一些其他大佬的wp参考:php_反序列化_1 | dayu’s blog (killdayu.com) 序列化一个对象将…...
题目 1013: [编程入门]Sn的公式求和
题目 1013: [编程入门]Sn的公式求和 [编程入门]Sn的公式求和 求Snaaaaaa…aa…aaa(有n个a)之值,其中a是一个数字,为2。 例如,n5时222222222222222,n由键盘输入。 #include<stdio.h> int A(int n)…...
算法——赎金信(leetcode383)
题目: 给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 示例 1&#…...
transformers训练(NLP)阅读理解(多项选择)
简介 在阅读理解任务中,有一种通过多项选择其中一个答案来训练机器的阅读理解。比如:给定一个或多个文档h,以及一个问题S和对应的多个答案候选,输出问题S的答案E,E是答案候选中的某一个选项。 这样的目的就是通过文档,…...
微软企业邮箱:安全可靠的企业级邮件服务!
微软企业邮箱的设置步骤?如何注册使用烽火域名邮箱? 微软企业邮箱作为一款专为企业设计的邮件服务,不仅提供了高效便捷的通信工具,更在安全性、可靠性和功能性方面树立了行业标杆。烽火将深入探讨微软企业邮箱的多重优势。 微软…...
什么是分布式锁
定义 分布式锁是控制分布式系统或集群中不同节点对共享资源访问的一种机制。在分布式环境下,多个节点(如多个服务器或多个进程)可能会同时访问诸如数据库中的某条记录、一个共享文件或者一个全局计数器等共享资源。分布式锁的目的是确保在同一…...
【含开题报告+文档+PPT+源码】基于SpringBoot的艺术培训学校管理系统的设计与实现
开题报告 艺术培训学校管理在现代教育行业中发挥着至关重要的作用,旨在为学员提供及时、专业且高效的课程服务,同时也激励培训机构不断提升教学质量与管理水平。然而,传统的艺术培训学校管理模式常面临一系列挑战,如课程报名程序…...
【网络安全 | 漏洞挖掘】绕过SAML认证获得管理员面板访问权限
未经许可,不得转载。 文章目录 什么是SAML认证?SAML是如何工作的?SAML响应结构漏洞结果什么是SAML认证? SAML(安全断言标记语言)用于单点登录(SSO)。它是一种功能,允许用户在多个服务之间切换时无需多次登录。例如,如果你已经登录了facebook.com,就不需要再次输入凭…...
Flutter:列表分页,上拉加载下拉刷新,在GetBuilder模板使用方式
GetBuilder模板使用方式参考上一节 本篇主要代码记录如何使用上拉加载下拉刷新, 接口请求和商品组件的代码不包括在内 pubspec.yaml装包 cupertino_icons: ^1.0.8# 分页 上拉加载,下拉刷新pull_to_refresh_flutter3: 2.0.2商品列表:controlle…...
硬件基础22 反馈放大电路
目录 一、反馈的基本概念与分类 1、什么是反馈 2、直流反馈与交流反馈 3、正反馈与负反馈 4、串联反馈与并联反馈 5、电压反馈与电流反馈 二、负反馈四种组态 1、电压串联负反馈放大电路 2、电压并联负反馈放大电路 3、电流串联负反馈放大电路 4、电流并联负反馈放大…...
泰安做网站网络公司/营销培训课程有哪些
备胎说车400万车友关注。每天60秒,轻松懂汽车。 今天是备胎陪伴你的第 2159 天下方新增视频版,暂停、快进、倒退都没问题(和语音内容相同,选一个就行),继续往下拉还有文字版,和更多精彩评论以下是文字版对…...
百度网盟有哪些网站/百度自动搜索关键词软件
这是曾经在悟空问答回答的一个问题,后来效果还不错,所以发出来,里面结合了当年的学习经验和一些行业老师的建议,希望帮助更多有兴趣的人。(第三点福利)Python语言这几年大火,在世界编程语言排行…...
旅行社网站建设方案论文/怎么建立个人网站
罗德与施瓦茨 (Rohde & Schwarz, R&S) 公司成立于1933年,总部位于德国慕尼黑,是一家技术公司,为企业和政府机构开发、生产和销售广泛的电子产品,业务核心在于提供各类解决方案以打造一个更加安全的互联世界。 罗德与施瓦…...
wordpress SEO Smart Link/网络营销的八大职能
之前就有过想写一篇关于CAE的科普文,缘起是看到很多以CAE为标题的文章,内容围绕某一门学科,某一个行业,或者某种仿真软件介绍,有一定的局限性。CAE涉及的领域很广,只深入某个方面讲难以有全局观,…...
中美关系最新消息人民日报/安徽seo网络优化师
通过前面的学习,我们了解了Class文件的结构,在Class文件中描述的各类信息,最终都需要加载到虚拟机中之后才能被运行和使用。 接下来,我们开始学习JVM的类加载。 一个类从被加载到虚拟机内存中开始,到从内存中卸载&am…...
国内外网站建设2017/广告投放运营主要做什么
10月,工作后的第二个月。之前看到过一些大神的文章,里面有提到,最好每个月都写一篇文章,做一些记录。现阶段的我没有太多技术上和经验上的积累,那就暂且记录一下工作上的一些感悟吧,坚持下去,慢…...