RTSP,RTP,RTCP协议

2023-11-20

一 RTSP

1 简介
实时流传输协议,是一个应用层协议(TCP/IP网络体系中),它是一个多媒体播放控制协议,主要用来使用户在播放流媒体时可以像操作本地的影碟机一样进行控制,即可以对流媒体进行暂停/继续、后退和前进等控制。RTSP体系结位于RTP和RTCP之上,使用TCP或UDP完成数据传输。

2 功能
RTSP用于 发起/设置/终结 流媒体。
RTSP消息分为两大类,一类是请求消息(request),一类是回应消息(ressponse)
常见信令:

1 OPTIONS 功能:请求服务端支持的 RTSP 命令列表,即取服务器支持的方法

2 DESCRIBE功能:向服务器获取URL指定的媒体对象的描述,其中Accept字段指定了描述格式

3 SETUP 功能: 客户端向服务器请求建立会话并准备传输。请求信息主要包括传输协议和客户端的端口号

4 PLAY: 功能:请求流,客户端主动通知服务器以SETUP指定的机制开始发送数据

5 PAUSE 功能:客户端请求服务器的媒体流传输临时暂停

如下RTSP交互过程 (VLC : RTP RTSP OVER TCP) :

取服务器支持的方法
C ---->
[INFO  rtsp_demo.c:409:rtsp_new_client_connection] new rtsp client 192.168.8.100:6006 comming
[DEBUG rtsp_msg.c:865:rtsp_msg_parse_from_array] 
OPTIONS rtsp://192.168.8.1:554/live/chn1/mainstream RTSP/1.0
CSeq: 2
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)

回复支持的方法
		<------S
		[DEBUG rtsp_demo.c:712:rtsp_handle_OPTIONS] 
		[DEBUG rtsp_msg.c:998:rtsp_msg_build_to_array] 
		RTSP/1.0 200 OK
		CSeq: 2
		Date: Fri Nov  4 09:52:36 2022
		Public: OPTIONS, DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN
		Server: rtsp_demo


获取URL指定的媒体对象的描述
C ---->
[DEBUG rtsp_msg.c:865:rtsp_msg_parse_from_array] 
DESCRIBE rtsp://192.168.8.1:554/live/chn1/mainstream RTSP/1.0
CSeq: 3
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp //描述格式


回复 URL指定的媒体对象的描述
		<------S
		[DEBUG rtsp_demo.c:733:rtsp_handle_DESCRIBE] 
		[DEBUG rtsp_msg.c:998:rtsp_msg_build_to_array] 
		RTSP/1.0 200 OK
		CSeq: 3
		Date: Fri Nov  4 09:52:36 2022
		Server: rtsp_demo
		Content-Type: application/sdp  //sdp格式
		Content-Length: 390

		v=0
		o=- 0 0 IN IP4 0.0.0.0
		s=rtsp_demo
		t=0 0
		a=control:rtsp://192.168.8.1:554/live/chn1/mainstream
		a=range:npt=0-
		/*
		格式为 m=<媒体类型> <端口号> <传输协议> <媒体格式 >
		媒体类型:video
		端口号:传输端口开没有确定(0表示不确定)
		传输协议:RTP/AVP,表示RTP OVER UDP,如果是RTP/AVP/TCP,表示RTP OVER TCP
		媒体格式:一般使用96表示 H.264
		*/
		m=video 0 RTP/AVP 96
		c=IN IP4 0.0.0.0
		a=rtpmap:96 H265/90000
		a=fmtp:96 sprop-vps=QAEMAf//AWAAAAMAgAAAAwAAAwB4vAk=;sprop-sps=QgEBAWAAAAMAgAAAAwAAAwB4oAKAgC0WNvkkyuAQAAADABAAAAMBQIA=;sprop-pps=RAHA8vATZA==
		a=control:rtsp://192.168.8.1:554/live/chn1/mainstream/track1


向服务器请求建立会话并准备传输。请求信息主要包括传输协议
C----->		
[DEBUG rtsp_msg.c:865:rtsp_msg_parse_from_array] 
SETUP rtsp://192.168.8.1:554/live/chn1/mainstream/track1 RTSP/1.0
CSeq: 4
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP/TCP;unicast;interleaved=0-1 // 请求使用TCP传输

回复客户端建立会话请求
		<------S	
		[DEBUG rtsp_demo.c:937:rtsp_handle_SETUP] 
		[INFO  rtsp_demo.c:881:rtsp_new_rtp_connection] new rtp over tcp for video ssrc:22345678 peer_addr:192.168.8.100 interleaved:0-1
		[DEBUG rtsp_msg.c:998:rtsp_msg_build_to_array] 
		RTSP/1.0 200 OK
		CSeq: 4
		Date: Fri Nov  4 09:52:36 2022
		Session: 12345678
		Transport: RTP/AVP/TCP;ssrc=22345678;interleaved=0-1
		Server: rtsp_demo


通知服务器以SETUP指定的机制开始发送数据
C------>		
[DEBUG rtsp_msg.c:865:rtsp_msg_parse_from_array] 
PLAY rtsp://192.168.8.1:554/live/chn1/mainstream RTSP/1.0
CSeq: 5
User-Agent: LibVLC/3.0.17.4 (LIVE555 Streaming Media v2016.11.28)
Session: 12345678
Range: npt=0.000-


回复play请求 并开始发数据
		<-------S
		[DEBUG rtsp_demo.c:1024:rtsp_handle_PLAY] 
		[DEBUG rtsp_msg.c:998:rtsp_msg_build_to_array] 
		RTSP/1.0 200 OK
		CSeq: 5
		Date: Fri Nov  4 09:52:36 2022
		Session: 12345678
		Server: rtsp_demo

二 RTP 与 RTCP

随着多媒体网络应用的发展,针对网络多媒体的通用、实时交互式应用的传输协议——实时传输协议(Real-Transport Protocol,RTP)与实时传输控制协议(Real-Transport Control Protocol,RTCP)应运而生。

RTP定义了两种报文:RTP报文用于传送媒体数据(如音频和视频),它由 RTP报头和数据两部分组成,RTP报头占用最少12个字节,最多72个字节,包含包含序列号和时间戳,目的是提供时间信息和实现流同步。RTP数据部分称为有效载荷,用来封装实际的数据负载,如封装h264编码的视频数据。

序列号:随每个RTP数据包而增加1,由接收者用来探测包损失。系列号初值是随机的,使对加密的文本攻击更加困难

时间戳:时标反映RTP数据包中第一个八进制数的采样时刻

在这里插入图片描述

由上图可知,如果只有系列号,并不能完整按照顺序的将data播放出来,因为如果data中间有一段是没有资料的,只有系列号的话会造成错误,需搭配上让它知道在哪个时间将data正确播放出来,如此我们才能播放出正确无误的信息。

RTCP报文负责管理传输质量,以实现协议控制功能。当应用程序开始一个rtp会话时将使用两个端口:一个给rtp,一个给rtcp。rtp本身并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠rtcp提供这些服务。在rtp的会话之间周期的发放一些rtcp包以用来传监听服务质量和交换会话用户信息等功能。rtcp包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料。因此,服务器可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。rtp和rtcp配合使用,它们能以有效的反馈和最小的开销使传输效率最佳化,因而特别适合传送网上的实时数据。根据用户间的数据传输反馈信息,可以制定流量控制的策略,而会话用户信息的交互,可以制定会话控制的策略。

当应用程序建立一个RTP会话时,应用程序将确定一对目的传输地址。目的传输地址由一个网络地址和一对端口组成,有两个相邻端口:一个给RTP包,一个给RTCP包,使得RTP/RTCP数据能够正确发送。RTP数据发向偶数的UDP端口,而对应的控制信号RTCP数据发向相邻的奇数UDP端口(偶数的UDP端口+1),这样就构成一个UDP端口对。

RTP的发送时,RTP协议从上层接收流媒体信息码流(如H.265),封装成RTP数据包;RTCP从上层接收控制信息,封装成RTCP控制包。RTP将RTP 数据包发往UDP端口对中偶数端口;RTCP将RTCP控制包发往UDP端口对中的接收端口。

三 三者关系

总而言之,RTSP发起/设置/终结流媒体、RTP传输流媒体数据 、RTCP对RTP进行控制,同步。

四 应用

双方会在 RTSP协商中确定 通讯协议等信息,准确一点 客户端会在 SETUP 请求中向服务端确认 通讯协议和端口号。

如果是TCP 传输,那么RTSP , RTCP, RTP 则共用同一个 TCP Socket。传输数据的时候 以特殊包头区分不同类型的数据包。

RTP和RTCP数据会以 "$"符号 + 一个字节的通道编号 + 2个字节的数据长度,共四个字节的前缀开始,RTSP数据没有四个字节的前缀;RTP和RTCP数据的区别在于第二个字节的通道编号

如 RTP和RTCP数据头

[0]= '$' 
[1]= mark //RTP通道编号是偶数,RTCP通道编号是奇数
[2][3] = size

如果是UDP传输 则需要另外创建 RTP udp Socket 与 RTCP udp Socket,并且 RTP和RTCP分别使用两个相邻的UDP端口,RTP报文使用低端口,并且是偶数的UDP端口,RTCP报文使用高端口,并且是奇数的UDP端口(偶数的UDP端口+1)。

在这里插入图片描述

五 常见的疑问

1.怎样重组乱序的数据包
可以根据RTP包的序列号来排序。

2.怎样获得数据包的时序
可以根据RTP包的时间戳来获得数据包的时序。

3.声音和图像怎么同步
根据声音流和图像流的相对时间(即RTP包的时间戳),以及它们的绝对时间(即对应的RTCP包中的RTCP),可以实现声音和图像的同步。

4.接收缓冲和播放缓冲的作用
接收缓冲用来排序乱序了的数据包;播放缓冲用来消除播放的抖动,实现等时播放。

5.为什么RTP可以解决时延问题
  RTP协议是一种基于UDP的传输协议,RTP本身并不能为按顺序传送数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些服务。这样,对于那些丢失的数据包,不存在由于超时检测而带来的延时,同时,对于那些丢弃的包,也可以由上层根据其重要性来选择性的重传。比如,对于I帧、P帧、B帧数据,由于其重要性依次降低,故在网络状况不好的情况下,可以考虑在B帧丢失甚至P帧丢失的情况下不进行重传,这样,在客户端方面,虽然可能会有短暂的不清晰画面,但却保证了实时性的体验和要求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RTSP,RTP,RTCP协议 的相关文章

  • windows下配置Mysql-5.7.9服务

    第一步 从官方网站下载 mysql 5 7 9 winx64 zip 第二步 解压缩 在根目录下复制my default ini 改名为my ini 第三步 初始化mysql目录 bin mysqld initialize user mys
  • 在渗透测试中,扫描器原理是什么

    在渗透测试中 扫描器原理是什么 渗透测试中的扫描器是一种自动化工具 用于识别目标系统中的漏洞 弱点或配置错误 扫描器通过发送特定的网络请求或使用其他技术手段来检查目标系统的安全性 并生成报告以供分析和修复 以下是扫描器的一般原理 1 信息收

随机推荐

  • 一眼看懂promise与async await的区别

    promise方法 let p1 new Promise resolve reject gt setTimeout gt resolve 我是p1 4000 let p2 new Promise resolve reject gt setT
  • 12.HTML5下一代的HTML标准介绍与初识尝试

    关注回复 学习交流群 加入 安全开发运维 答疑交流群 请朋友们 多多点击文中的广告 支持作者更新更多文章 目录 本文为作者原创文章 为尊重作者劳动成果禁止非授权转载 若需转载请在 全栈工程师修炼指南 公众号留言 或者发送邮件到 master
  • 运维之Linux发行版和容器镜像网站及开源软件收集

    关注 WeiyiGeek 公众号 将我设为 特别关注 每天带你玩转网络安全运维 应用开发 物联网IOT学习 0x00 概述 0x01 镜像源网站 国内镜像 国内高校 0x02 发行版官网 CentOS kail Debian Ubuntu
  • 客户机操作系统已禁用 CPU。请关闭或重置虚拟机。解决方法

    今天在用VMware安装CentOS7报了这个错误 在网上找半天都没解决 最后换一个地址下的镜像就能正常安装了 Index of centos 7 9 2009 isos x86 64
  • 12_Linux ARM架构_安装JDK8-银河麒麟V10(Kylin Linux Advanced Server V10 )操作系统

    12 Linux ARM架构 安装JDK8 银河麒麟V10 Kylin Linux Advanced Server V10 操作系统 1 官网下载aarch64架构jdk包 2 linux服务器中创建java文件夹 方便后期快速寻找 3 将
  • DevC++如何改成中文?

    DevC 如何改成中文 1 点击Tools工具 2 选择环境选项 3 选择简体中文 4 点击确定
  • 深入理解Google Cast(一)基本概念

    什么是google cast google cast允许用户将手机上的内容投影到TV上 然后用户可以将手机作为遥控器来控制TV上的媒体播放 Google cast SDK用于扩展你的app 使其支持google cast功能 一个Cast
  • 图像验证码识别(九)——训练和识别

    前面讲到已经把所有的字符经过去干扰 分割和归一化得到标准大小的单个字符 接下来要做的就是识别验证码了 现在要做的基本上也就和OCR没什么区别了 因为得到的字符已经是尽可能标准的了 下面的识别分为两个步骤 第一步先是特征值的提取 第二步是SV
  • ROC曲线绘制原理及如何用SPSS绘制ROC曲线

    本文同步发布于 脑之说 微信公众号 欢迎搜索关注 ROC曲线 Receiver operating characteristic curve 即受试者工作特征曲线 主要用来评价某个指标对两类被试 如病人和健康人 分类 诊断的效果 以及寻找最
  • 深入探索并发编程系列(五)-将内存乱序逮个正着

    当用C C 编写无锁代码时 一定要小心谨慎 以保证正确的内存顺序 不然的话 会发生一些诡异的事情 Intel在x86 x64体系结构手册的Volume 3 8 2 3 中列出了一些可能会发生的诡异的事情 这里介绍其中一个最简单的例子 假设在
  • autoware警告The ‘state_publisher‘ executable is deprecated. Please use ‘robot_state_publisher‘ instead

    在运行autoware官方demo autoware ai 的时候 启动my localization launch roslaunch autoware quickstart examples my localization launch
  • C++示例程序,演示如何将两个整数相加并打印结果

    include
  • iOS开发-国际化-配置App多语言

    作者 大慈大悲大熊猫 链接 http www jianshu com p 1edd4bda6fe5 來源 简书 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 基本设置 第一步 先在Project的info里添加所需要支
  • 使用Python对数据的操作转换

    1 列表加值转字典 在Python中 将列表的值转换为字典的键可以使用以下代码 myList name age location myDict k None for k in myList print myDict 输出 name None
  • 百度2012实习生校园招聘笔试题

    1 给一个单词a 如果通过交换单词中字母的顺序可以得到另外的单词b 那么b是a的兄弟单词 比如的单词army和mary互为兄弟单词 现在要给出一种解决方案 对于用户输入的单词 根据给定的字典找出输入单词有哪些兄弟单词 请具体说明数据结构和查
  • vue组件之间传值的几种方式

    这里写目录标题 vue组件传值 父传子 子传父 非父子组件传值 provide 和 inject 传值 事件总线传值 attrs listeners 使用 attrs listeners 进行子往上级传 vueX vue组件传值 父传子 父
  • Qt的基本语法及其使用(一)

    Qt的概念 Qt是通用的C 开发界面框架 C 图形用户界面 应用程序开发框架 既可以开发GUI程序也可以开发开发非GUI程序 Qt是面向对象的框架 使用特殊的代码生成扩展 Qt的历史 1991由QT公司研发 2008年被诺基亚收购 2012
  • C/C++ 引用作为函数的返回值

    语法 类型 函数名 形参列表 函数体 特别注意 1 引用作为函数的返回值时 必须在定义函数时在函数名前将 2 用引用作函数的返回值的最大的好处是在内存中不产生返回值的副本 代码来源 RUNOOB include
  • Microsoft Network Monitor 3.4简要说明

    第一次启动后是一个欢迎界面 左下角可以选择要监控的网络连接 在标签栏上点击右键 可以选择关闭这个页面 或者保留这个页面 关闭其他所有页面 点击工具栏第一个图标 NewCapture 就可以打开一个新的监控界面 点击工具栏上的 Start 按
  • RTSP,RTP,RTCP协议

    一 RTSP 1 简介 实时流传输协议 是一个应用层协议 TCP IP网络体系中 它是一个多媒体播放控制协议 主要用来使用户在播放流媒体时可以像操作本地的影碟机一样进行控制 即可以对流媒体进行暂停 继续 后退和前进等控制 RTSP体系结位于