热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

实时流协议(RTSP)来自维基百科

https:zh.wikipedia.orgwiki%E5%8D%B3%E6%99%82%E4%B8%B2%E6%B5%81%E5%8D%94%E5%AE%9A目录协议指令O

https://zh.wikipedia.org/wiki/%E5%8D%B3%E6%99%82%E4%B8%B2%E6%B5%81%E5%8D%94%E5%AE%9A

目录

协议指令

OPTIONS 请求

DESCRIBE 请求

SETUP 请求

Play 播放请求

PAUSE 暂停请求

RECORD 记录请求

ANNOUNCE 发布请求

TEARDOWN 停止发布流请求

GET_PARAMETER 获取参数请求

SET_PARAMETER 设置参数请求

REDIRECT 重定向请求

嵌入式(交错式)二进制数据

速率适配

已经成功实现的

服务端

客户端

参考

外部链接


实时串流协议(Real Time Streaming Protocol,RTSP)是一种网络应用协议,专为娱乐和通信系统的使用,以控制流媒体服务器。该协议用于建立和控制终端之间的媒体会话。媒体服务器的客户端发布VCR命令,例如播放,录制和暂停,以便于实时控制从服务器到客户端(视频点播)或从客户端到服务器(语音录音)的媒体流。

流数据本身的传输不是RTSP的任务。大多数RTSP服务器使用实时传输协议(RTP)和实时传输控制协议(RTCP)结合媒体流传输。然而,一些供应商实现专有传输协议。例如,RealNetworks公司的RTSP服务器软件也使用RealNetworks的专有实时数据传输(RDT)。

RTSP由RealNetworks公司,Netscape公司 [1] 和哥伦比亚大学开发,第一稿于1996年提交给IETF[2]。由互联网工程任务组(IETF)的多方多媒体会话控制工作组(MMUSIC WG)进行了标准化,并于1998年发布为RFC 2326。[3] RTSP 2.0 于2016年发布为RFC 7826,作为RTSP 1.0的替代品。RTSP 2.0基于RTSP 1.0,但除了基本的版本协商机制之外不向后兼容。


协议指令

虽然在某些方面与HTTP类似,RTSP定义了控制多媒体播放控制顺序。虽然HTTP是无状态的,但RTSP具有状态; 当需要跟踪并发会话时使用标识符。像HTTP一样,RTSP使用TCP来维护端到端连接,而大多数RTSP控制消息由客户端发送到服务器,一些命令沿着另一个方向(即从服务器到客户端)传播。

这里提供了基本的RTSP请求。一些典型的HTTP请求,如OPTIONS请求也可用。默认传输端口为554[3] ,该端口同时应用于TCP和UDP,但后者很少用于控制请求。

OPTIONS 请求

OPTIONS请求返回服务器将接受的请求类型。 (C 代表客户端 S 代表服务端)

C->S: OPTIONS rtsp://example.com/media.mp4 RTSP/1.0CSeq: 1Require: implicit-playProxy-Require: gzipped-messagesS->C: RTSP/1.0 200 OKCSeq: 1Public: DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE


DESCRIBE 请求

DESCRIBE请求包括RTSP URL(rtsp:// ...)以及可以处理的回复数据类型。该回复包括呈现描述,通常以会话描述协议(SDP)格式。其中,演示文稿描述列出了使用汇总网址控制的媒体流。在典型的情况下,每个音频和视频都有一个媒体流。

C->S: DESCRIBE rtsp://example.com/media.mp4 RTSP/1.0
      CSeq: 2

S->C: RTSP/1.0 200 OK
      CSeq: 2
      Content-Base: rtsp://example.com/media.mp4
      Content-Type: application/sdp
      Content-Length: 460

      m=video 0 RTP/AVP 96
      a=control:streamid=0
      a=range:npt=0-7.741000
      a=length:npt=7.741000
      a=rtpmap:96 MP4V-ES/5544
      a=mimetype:string;"video/MP4V-ES"
      a=AvgBitRate:integer;304018
      a=StreamName:string;"hinted video track"
      m=audio 0 RTP/AVP 97
      a=control:streamid=1
      a=range:npt=0-7.712000
      a=length:npt=7.712000
      a=rtpmap:97 mpeg4-generic/32000/2
      a=mimetype:string;"audio/mpeg4-generic"
      a=AvgBitRate:integer;65790
      a=StreamName:string;"hinted audio track"


SETUP 请求

SETUP请求指定如何传输单个媒体流。这必须在发送PLAY请求之前完成。请求包含媒体流URL和传输说明符。该说明符通常包括用于接收RTP数据(音频或视频)的本地端口,另一个用于RTCP数据(元信息))。服务器回复通常会确认所选参数,并填写缺少的部分,例如服务器选择的端口。必须在发送聚合播放请求之前,使用SETUP配置每个媒体流。

C->S: SETUP rtsp://example.com/media.mp4/streamid=0 RTSP/1.0CSeq: 3Transport: RTP/AVP;unicast;client_port=8000-8001S->C: RTSP/1.0 200 OKCSeq: 3Transport: RTP/AVP;unicast;client_port=8000-8001;server_port=9000-9001;ssrc=1234ABCDSession: 12345678


Play 播放请求

Play 播放请求 将导致播放一个或所有媒体流。可以通过发送多个播放请求来堆叠播放请求。URL可以是聚合URL(播放所有媒体流)或单个媒体流URL(仅播放该流)。可以指定范围。如果没有指定范围,流将从头开始播放,并播放到最后,或者如果流暂停,则在暂停点恢复播放。

C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0CSeq: 4Range: npt=5-20Session: 12345678S->C: RTSP/1.0 200 OKCSeq: 4Session: 12345678RTP-Info: url=rtsp://example.com/media.mp4/streamid=0;seq=9810092;rtptime=3450012


PAUSE 暂停请求

PAUSE 暂停请求 暂时停止一个或所有媒体流,因此稍后可以通过播放请求恢复。请求包含聚合或媒体流URL。PAUSE请求中的范围参数指定何时暂停。当省略范围参数时,暂停会立即无限期地发生。

C->S: PAUSE rtsp://example.com/media.mp4 RTSP/1.0CSeq: 5Session: 12345678S->C: RTSP/1.0 200 OKCSeq: 5Session: 12345678


RECORD 记录请求

RECORD 该方法根据呈现描述开始记录一系列媒体数据。时间戳反映开始和结束时间(UTC)。如果没有给定时间范围,请使用演示文稿描述中提供的开始或结束时间。如果会话已经开始,请立即开始录制。服务器决定是否将记录的数据存储在请求URI或其他URI下。如果服务器不使用请求URI,则响应应为201,并包含描述请求状态并引用新资源的实体以及Location头。

C->S: RECORD rtsp://example.com/media.mp4 RTSP/1.0CSeq: 6Session: 12345678S->C: RTSP/1.0 200 OKCSeq: 6Session: 12345678


ANNOUNCE 发布请求

ANNOUNCE 发布方法有两个目的:

从客户端发送到服务器时,ANNOUNCE将请求URL标识的演示文稿或媒体对象的描述发布到服务器。当从服务器发送到客户端时,ANNOUNCE会实时更新会话描述。如果新的媒体流被添加到演示文稿中(例如,在实时演示中),则应该再次发送整个演示文稿描述,而不仅仅是附加的组件,以便可以删除组件。(下面邮箱'#'号替换成'@')

C->S: ANNOUNCE rtsp://example.com/media.mp4 RTSP/1.0CSeq: 7Date: 23 Jan 1997 15:35:06 GMTSession: 12345678Content-Type: application/sdpContent-Length: 332v=0o=mhandley 2890844526 2890845468 IN IP4 126.16.64.4s=SDP Seminari=A Seminar on the session description protocolu=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.pse=mjh#isi.edu (Mark Handley)c=IN IP4 224.2.17.12/127t=2873397496 2873404696a=recvonlym=audio 3456 RTP/AVP 0m=video 2232 RTP/AVP 31S->C: RTSP/1.0 200 OKCSeq: 7


TEARDOWN 停止发布流请求

TEARDOWN 请求用于终止会话。它停止所有媒体流,并释放所有与会话相关的数据在服务器上。

C->S: TEARDOWN rtsp://example.com/media.mp4 RTSP/1.0CSeq: 8Session: 12345678S->C: RTSP/1.0 200 OKCSeq: 8


GET_PARAMETER 获取参数请求

GET_PARAMETER 请求检索在URI中指定的呈现或流的参数的值。答复和回复的内容留给实施。没有实体的GET_PARAMETER可能用于测试客户端或服务器活动(“ping”)。

S->C: GET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0CSeq: 9Content-Type: text/parametersSession: 12345678Content-Length: 15packets_receivedjitterC->S: RTSP/1.0 200 OKCSeq: 9Content-Length: 46Content-Type: text/parameterspackets_received: 10jitter: 0.3838


SET_PARAMETER 设置参数请求

SET_PARAMETER 此方法请求设置由URI指定的演示文稿或流的参数值。

C->S: SET_PARAMETER rtsp://example.com/media.mp4 RTSP/1.0CSeq: 10Content-length: 20Content-type: text/parametersbarparam: barstuffS->C: RTSP/1.0 451 Invalid ParameterCSeq: 10Content-length: 10Content-type: text/parametersbarparam


REDIRECT 重定向请求

REDIRECT 请求通知客户端它必须连接到另一个服务器位置。它包含强制性头文件位置,表示客户端应发出该URL的请求。它可能包含参数Range,它指示重定向何时生效。如果客户端希望继续发送或接收此URI的媒体,则客户端必须向指定的主机发出针对当前会话的TEARDOWN请求和新会话的SETUP。

S->C: REDIRECT rtsp://example.com/media.mp4 RTSP/1.0CSeq: 11Location: rtsp://bigserver.com:8001Range: clock=19960213T143205Z-


嵌入式(交错式)二进制数据

某些防火墙设计和其他情况可能会强制服务器交叉RTSP方法和流数据。通常应避免这种交错,除非有必要,因为它会使客户端和服务器操作复杂化,并增加额外的开销。交叉二进制数据只能在RTSP通过TCP传输时使用。诸如RTP数据包之类的流数据由ASCII码符号(24个十六进制)封装,后跟一个字节的信道标识符,后面是封装二进制数据的长度,以二进制字节为单位,以网络字节顺序排列。流数据紧随其后,没有CRLF,但包括上层协议头。每个$块只包含一个上层协议数据单元,例如一个RTP包。

C->S: SETUP rtsp://example.com/media.mp4 RTSP/1.0CSeq: 3Transport: RTP/AVP/TCP;interleaved=0-1S->C: RTSP/1.0 200 OKCSeq: 3Date: 05 Jun 1997 18:57:18 GMTTransport: RTP/AVP/TCP;interleaved=0-1Session: 12345678C->S: PLAY rtsp://example.com/media.mp4 RTSP/1.0CSeq: 4Session: 12345678S->C: RTSP/1.0 200 OKCSeq: 4Session: 12345678Date: 05 Jun 1997 18:59:15 GMTRTP-Info: url=rtsp://example.com/media.mp4;seq=232433;rtptime=972948234S->C: $\000{2 byte length}{"length" bytes data, w/RTP header}
S->C: $\000{2 byte length}{"length" bytes data, w/RTP header}
S->C: $\001{2 byte length}{"length" bytes RTCP packet}


速率适配

使用RTP和RTCP的RTSP允许实现速率适配。[4]

已经成功实现的

服务端


  • Darwin Streaming Server: Open-sourced version of QuickTime Streaming Server maintained by Apple.
  • Erlyvideo[5] has RTSP client and can restream video to other protocols.
  • Feng: Lean and mean streaming server with focus on rfc compliance.
  • FFmpeg: includes ffserver a GPL or LGPL RTSP streaming server.
  • GStreamer based RTSP Server and client.
  • Helix DNA Server: RealNetworks' streaming server. Comes in both open-source and proprietary flavors.
  • Helix Universal Server: RealNetworks commercial streaming server for RTSP, RTMP, iOS, Silverlight and HTTP streaming media clients
  • LEADTOOLS Media Streaming Server SDK from LEAD Technologies supports RTSP/RTP, RTSP/RTP (MPEG-2 Transport), RTSP/RTP over HTTP.
  • LIVE555 liveMedia / openRTSP: Open source C++ server and client libraries used in well-known clients like VLC and mplayer.
  • Managed Media Aggregation: .NET C# RFC compliant implementation of RTSP written in completely managed code.
  • Nimble Streamer supports RTSP pull and announce input with TCP interleaved playback output.
  • pvServer: Formerly called PacketVideo Streaming Server, this is Alcatel-Lucent's streaming server product.
  • QuickTime Streaming Server: Apple's closed-source streaming server that ships with Mac OS X Server.
  • SharpRTSP: Open sourceC# RTSP streaming server.
  • ViaMotion: Integrated RTSP server for Video On Demand by Anevia
  • VideoLAN: Open source media player and streaming server.
  • VX30: Streaming video server and embedded Java client from Maui X-Stream.
  • Windows Media Services: Microsoft streaming server previously included with Windows Server that uses RTSP modified with Windows Media extensions
  • Wowza Streaming Engine: Multi-format streaming server for RTSP/RTP, RTMP, MPEG-TS, ICY, HTTP (HTTP Live Streaming, HTTP Dynamic Streaming, Smooth Streaming, MPEG-DASH), WebRTC
  • Xenon Streaming Server: 来自Vidiator Technology(US)Inc.的移动流服务器
  • YouTube: 在桌面上通过移动HTTPS版本查看网站时,可以使用流媒体选项。

客户端


  • Astra
  • cURL (从7.20.0版本2010年2月9日 [6])
  • FFmpeg[7]
  • GStreamer
  • JetAudio
  • LIVE555 liveMedia / openRTSP:开源,C++服务器和客户端库,如VLC和mplayer等知名客户端使用。
  • Media Player Classic
  • MPlayer
  • MythTV via Freebox
  • Managed Media Aggregation: .NET C# RFC compliant implementation of RTSP written in completely managed code.
  • omxplayer
  • QuickTime
  • RealPlayer
  • SharpRTSP: 开源,C# 编写的RTSP流客户端。
  • Skype
  • Spotify
  • VLC media player
  • Winamp
  • Windows Media Player
  • xine

参考
  1. ^ InfoWorld Media Group, Inc. InfoWorld. InfoWorld Media Group, Inc. 2 March 1998: 18. ISSN 0199-6649.
  2. ^ Rafael Osso. Handbook of Emerging Communications Technologies: The Next Decade. CRC Press. 1999: 42. ISBN 978-1-4200-4962-6.
  3. ^ 跳转至:3.0 3.1 RFC 2326, Real Time Streaming Protocol (RTSP), IETF, 1998
  4. ^ Rate Adaption Techniques for WebTV, [2016-09-20]
  5. ^ erlyvideo website. [2017-05-10]. (原始内容存档于2016-04-09).
  6. ^ cURL - Changes. [2017-05-10]. (原始内容存档于2011-08-14).
  7. ^ FFmpeg Documentation. The FFmpeg project. Section 20.19. September 11, 2012 [2012-09-11]. (原始内容存档于2018-07-26).

外部链接
  • 有關RTSP更詳細的介紹[永久失效連結]
  • 關於RTSP的RFC文件
  • RTSP RTP RTCP相關資料


推荐阅读
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • java drools5_Java Drools5.1 规则流基础【示例】(中)
    五、规则文件及规则流EduInfoRule.drl:packagemyrules;importsample.Employ;ruleBachelorruleflow-group ... [详细]
author-avatar
叶子美容美体养生馆os
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有