rtsp实例及讲解

2023-10-27

rtsp是real time streaming protocol,按照我的理解为流媒体控制协议,协议双方的的编码类型和地址,以及对stream media的控制(play,pause,record).注意这里不要与RTCP协议搞混,rtcp是用来控制rtp的.

下面通过介绍RTSP的几种方法来说明协议
1:options 
这个通常由client发送server,询问服务器所支持的方法种类,当然在应用中也可以用来作为心跳,因为它是状态无关的.例如:
C->S:       OPTIONS * RTSP/1.0
            CSeq: 1
            Require: implicit-play
            Proxy-Require: gzipped-messages

S->C:       RTSP/1.0 200 OK
            CSeq: 1
            Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE
服务端发送的200ok里表明服务端支持describe,setup,teardown,play,pause.
在这里可以看到请求和响应的cseq相同,对应后面所有的消息,请求和响应的cseq都是相同的.

2:describe
按照字面意思,就是描述,描述什么呢?当然是流媒体的信息呢,在返回的应答中包含SDP.举个例子
DESCRIBE rtsp://server.address:port/object.sdp RTSP/1.0/r/n
CSeq: 1/r/n
/r/n

-----------------------------------------------------------------------
RTSP/1.0 200 OK/n
Server: QTSS(IFI)/v88/n
Cseq: 1/n
Content-Type: application/sdp/n
Content-Base: rtsp://bildeus.ifi.uio.no:8000/12.sdp//n
Content-length: 785/n
/n
n=2236805513 2236805513 932036356 224.2.127.254 9875 127 trusted/n
v=0/n
o=yozo 3138827440 3138828177 IN IP4 aohakobe.ipc.chiba-u.ac.jp/n
s=Places all over the world/n
i=Low bandwidth video (10kb/s) with views from all over the world. Audio is primarily for feedback for the senders of video. (looks like there's some problem for the session announcement from sweden distributes to the whole MBone, I'm repeating the announcement from japan. -- yozo.)/n
e=Yozo TODA at IPC, Chiba University, JAPAN <yozo@ipc.chiba-u.ac.jp.>/n 
p=+81-43-290-3539/n
c=IN IP4 224.2.213.113/127/n
t=3138827400 3141246600/n
a=tool:sdr v2.6.1/n
a=type:test/n
m=audio 20154 RTP/AVP 0/n
c=IN IP4 224.2.213.113/127/n
a=ptime:40/n
a=control:trackID=1/n
m=video 51482 RTP/AVP 31/n
c=IN IP4 224.2.172.238/127/n
a=control:trackID=2/n

在应答中, 我们重点关注SDP字段.在SDP中,我们看到了流媒体包含了2个资源(m行):audio和video,其中a行是m(media)的属性描述.在m行 中,中间的数字为服务端推荐客户端接收的端口,如果服务端不想这样做,可以将port置为0.在sdp中,还有a=control字段,在rfc2326 中,对其的解释如下:

   The "a=control:" attribute is used to convey the control URL. This
   attribute is used both for the session and media descriptions. If
   used for individual media, it indicates the URL to be used for
   controlling that particular media stream. If found at the session
   level, the attribute indicates the URL for aggregate control.

   Example:
     a=control:rtsp://example.com/foo

   This attribute may contain either relative and absolute URLs,
   following the rules and conventions set out in RFC 1808 [25].
   Implementations should look for a base URL in the following order:

   1.     The RTSP Content-Base field
   2.     The RTSP Content-Location field
   3.     The RTSP request URL

   If this attribute contains only an asterisk (*), then the URL is
   treated as if it were an empty embedded URL, and thus inherits the
   entire base URL.

   
这里我们对集合控制(aggregate control)进行说明.当服务端支持集合控制,比如对一个音频视频流,它就不需要建立2个session,集合成一个session就ok,如果不支 持就得分别建立2个session.我的理解a=control即是对媒体的标识:比如track1表示视频,track2表示音频.在后续的setup 中可以看到这点.
通过SDP这些参数我们就可以知道流媒体的编码格式.

3:setup
建立会话,如果支持集合控制,在setup中会包含session字段.下面的消息是支持集合操作的例子.

SETUP rtsp://server.address:port/object.sdp/trackID=1 RTSP/1.0/r/n
CSeq: 2/r/n
Transport: RTP/AVP;unicast;client_port=9000-9001/r/n
/r/n
-------------------------------------------------------------------------

RTSP/1.0 200 OK/n
Server: QTSS(IFI)/v88/n
Cseq: 2/n
Session: 1234567890;timeout=60
Transport: rtp/avp;source=129.240.65.208;server_port=9000-9001;client_port=9000-9001/n
/n
--------------------------------------------------------------------------
SETUP rtsp://server.address:port/object.sdp/trackID=2 RTSP/1.0/r/n
CSeq: 3/r/n
Session: 1234567890/r/n
Transport: RTP/AVP;unicast;client_port=9000-9001/r/n
/r/n

在例子中我们看到,通过setup的响应,即建立了流媒体的会话.后续的setup必须带上session字段,通过上面的消息我们看到客户端发送 了2次setup,分别是代表video的track1和audio的track2.如果服务端不支持集合操作,那么setup里带上session字段 则是非法的.在消息中,我们看到了transport字段,在这里表明了客户端接收流媒体的端口,以及编码格式.在本例中采用的是udp方式传送RTP, 如果采用TCP的方式传送RTP,则可能transport 字段为:Transport: RTP/AVP/TCP;unicast;interleaved=0-1 ,这里解释下interleaved,因为采用TCP方式传送,所以传送的RTP,RTCP包都在同一个链路上,需要区分,所以有了 interleaved,0表示是RTP的通道,1表示是RTCP的通道.体现在包上面就是在RTP,RTCP包上封装了一层interleaved frame,格式如下:
Magic:0x24
Channel:0x01(表示RTCP)
Length:84


4:play
play 即对流媒体的播放指令:
PLAY rtsp://server.address:port/object.sdp RTSP/1.0/r/n
CSeq: 4/r/n
Session: 1234567890/r/n
/r/n
通常在play中有range字段,但不是必需的.这个字段表示播放的流媒体的范围.

5:teardown
teardown指令即对流媒体的结束
在teardown中是否必须带有session,我们曾经进行过讨论.如果一个session对应一个链路,则可以不需要对应session,但是在我们遇到的应用中,teardown基本都是携带了teardown.谈到这里,我们说下RTSP的几种连接类型:
* persistent transport connections used for several request-response transactions
* one connection per request/response transaction;
* connectionless mode.

对几种基本的消息的介绍就到这里了,我们现在来谈谈RTSP的状态机.其实RTSP的状态机很简单,不像sip协议那么复杂.对应很多消息,是状态无关的.现在这里只介绍与服务器相关的状态机:
     state           message received     next state
     Init             SETUP                    Ready
                         TEARDOWN          Init
     Ready           PLAY              Playing
                     SETUP             Ready
                     TEARDOWN          Init
                     RECORD            Recording
     Playing         PLAY              Playing
                     PAUSE             Ready
                     TEARDOWN          Init
                     SETUP             Playing
     Recording       RECORD            Recording
                     PAUSE             Ready
                     TEARDOWN          Init
                     SETUP             Recording
通过上面的表,我们就可以知道消息的发送必须是有序的,比如还没有发送setup,就不能发送play.还有连续2次的pause肯定是错误的.在这个状 态机中,是没有结束的,我们通常teardown后一个会话就会结束,甚至会关闭链路.但是在上图中又回到了init状态,我对此有些迷惑,这里又要提到 了上面我们讨论的话题:teardown是否该带session,在这个状态机中,在任何阶段都可以接收teardown,比如init阶段,这个阶段是 没有session的.

 

PS:这篇是在DR的最后一个项目(全球眼)结束后写的一篇总结。如今看来,却有部分连自己都不懂了。

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

rtsp实例及讲解 的相关文章

  • 利用blktrace分析磁盘I/O

    blktrace对于分析block I O是个非常好的工具 本篇文章记录了如何使用blktrace blktrace原理 blktrace是对通用块层 block layer 的I O跟踪机制 它能抓取详细的I O请求 request 发送
  • 【腾讯轻量应用服务器上部署kafka并通过flink读取kafka数据】

    环境准备 经过1个月的摸索 最终选择在腾讯云上搭建一个学习环境 当时选择原因还是新用户有优惠 150左右3年 但现在看1核2g的配置勉强够用 建议后续小伙伴选择时最好是2核4g配置 由于是单节点安装 需要准备如下资源 1 jdk1 8 2
  • 漏洞情报

    点击上方 订阅话题 第一时间了解漏洞威胁 0x01 漏洞描述 Windows Print Spooler是Windows的打印机后台处理程序 广泛的应用于各种内网中 微软在2021年6月的安全更新中修复了一处 Windows Print S
  • 解决elementUI中el-form、el-dialog、数据回显同时用时,有bug

    提示 记录学习elementUI时遇到的一些问题及解决办法 前言 现象 第一次打开网页 先点击修改 再点击新增 发现输入框竟然有值 原因 点击修改后 关闭对话框的时候 置空失效了 分析 主人公resetFields有问题 线索1 Dialo
  • Dart 根据当前年份和第几周获取该周的开始和结束日期

    最近遇到一个需求 计算当前年份有多少周 网上查阅了资料得到以下计算方式 Calculates number of weeks for a given year as per https en wikipedia org wiki ISO w
  • r HDU - 3709 Balanced Numbe(数位dp解析)

    题目链接 https vjudge net contest 355127 problem C Problem Description A balanced number is a non negative integer that can
  • 爬虫中网页分析的几种技术

    一般来说我们只抓取网页中的特定数据 比如抓取某人所有的blog 我们就只关心list 页面中文章列表那部分的链接和title 有几种技术可以用来分析网页 1 正则匹配 2 一般字符串匹配content substring pattern s
  • idea leetcode摸板

    package leetcode editor cn question content public class velocityTool camelCaseName question titleSlug public static voi
  • Numpy实现神经网络-手写数字识别

    使用numpy实现神经网络的前向传播 以及反向传播 使用矩阵计算加快运算速度 理论推导则在以前的博客中 多层感知机梯度推导 import numpy as np import tensorflow as tf import matplotl
  • Spring工程搭建系列01-spring的接入

    总是看到一些人写文章的时候会将一些无用的jar包带到工程中去 导致maven工程看起来很大很繁琐 所以整理下 做个系列出来 参考而已 看官不喜勿喷 有时间想到了就会更新 编程环境 jdk1 8 maven3 编译器工具 idea 本文最终的
  • 边缘计算:提升AR应用体验的关键技术

    随着科技的快速发展 增强现实 AR 应用已经在各个领域得到了广泛应用 然而 由于AR应用需要处理大量实时数据 对计算和网络资源的要求很高 传统的云计算模式已经无法满足需求 为了提升AR应用的体验 边缘计算和容器技术成为了关键 边缘计算是一种
  • Java多并发(六)

    文章目录 线程池 1 池化技术的优点 2 线程池的核心底层实现的相关参数 1 corePoolSize 线程池的基本大小 2 maximumPoolSize 线程池最大数量 3 runnableTaskQueue 任务队列 4 Reject
  • 【yolo】ubuntu18.04 yolo打开摄像头实时检测框目标 转化pth文件为onnx

    heziyi heziyi ZenBook UX425IA U4700IA 桌面 PyTorch YOLOv3 python3 video py yolov3 ckpt 69 onnx Traceback most recent call
  • python 的zip函数

    Python 的 zip 在Python中 zip 是一个内置函数 用于将多个可迭代对象 例如列表 元组等 打包成一个元组的迭代器 它接受多个参数 每个参数代表一个可迭代对象 并返回一个迭代器 每次迭代返回一个包含来自每个可迭代对象的元素组
  • 分布式文件与分布式存储系统学习总结(持续更新)

    存储系统知识 Write Ahead Log 问题引入 存储系统在运行过程中 每时每刻都在发生数据更新 如对文件数据的CRUD 对于中心控制节点来说 这些都会涉及到metadata的更新操作 为了保持元数据和文件数据的状态一致性 系统所有对
  • PLC学习第一篇:PLC程序架构

    前言 PLC资料获取 汇川官网 可以下载汇川PLC相关资料 倍福虚拟学院 西门子工业支持网站 西门子系列PLC的编程手册都可以查到 1 PLC编程语言发展 在PLC发展的早期阶段 由于没有统一的国际标准 各个制造商使用不同的编程语言 对使用
  • 操作系统知识

    操作系统结构 1 MS DOS层次 磁盘操作系统 易受错误程序的伤害导致系统崩溃 原因在于应用程序直接连接底层IO 2 UNIX层次 单一式结构使得UNIX难以增强 3 微内核 保留核心模块 是客户程序和运行在用户控件的各种服务之间通信以消
  • 八大经典排序算法

    目录 插入排序 希尔排序 选择排序 堆排序 快速排序 hoare法 挖坑法 前后指针法 快速排序的优化 非递归实现快排 归并排序 计数排序 常见的八种排序算法 插入排序 希尔排序 选择排序 堆排序 冒泡排序 快速排序 归并排序 插入排序 思
  • 【Linux】记一次系统异常宕机分析过程(内存异常)(业务Kubernetes)

    问题现象 最近遇到不同的业务正常运行时出现了宕机 物理机 虚拟机 查看日志是指向的怀疑是内存问题 业务都是部署的Kubernetes 容器集群管理系统 初步日志排查 message日志信息反馈 下面是虚拟机的日志信息 这些日志重复循环到问题
  • C#系列-流程控制

    一 if else结构 using System using System Collections Generic using System Linq using System Text using System Threading Tas

随机推荐