1.RTSP与几个相关协议

RTSP(Real Time Streaming Protocol)实时流协议,是用来控制声音或影像的多媒体串流协议,并允许同时多个串流需求控制,传输时所用的网络通讯协定并不在其定义的范围内,服 务器端可以自行选择使用TCP或UDP来传送串流内容.用于多媒体数据流的控制,如播放,暂停等。

RTP( Real-time Transport Protocol)实时传输协议,是用于Internet上针对多媒体数据流的一种传输层协议.RTP协议和RTP控制协议RTCP一起使用,而且它是建立在UDP协议上的。
RTCP(Real- time Transpor、Control Protocol)实时传输控制协议,是实时传输协议(RTP)的一个姐妹协议.RTCP本身并不传输数据,但和RTP一起协作将多媒体数据打包和发送。 RTCP定期在流多媒体会话参加者之间传输控制数据。RTCP的主要功能是为RTP所提供的服务质量(Quality of Service)提供反馈。

SDP(Session Description Protocol)会话描述协议,

2.与http的关系

RTSP协议非常类似HTTP协议。它们都使用纯文本来发送信息,rtsp协议的语法和HTTP类似。Rtsp这样设计是为了能够兼容使用以前写的HTTP协议分析代码 。
  它们主要的区别是HTTP协议没有状态, http协议在发送一个命令后,连接会断开,而且命令之间没有依赖性。

RTSP的命令需要知道现在正处于一个什么状态,rtsp的命令总是按照顺序来发送,某个命令总在另外一个命令之前要发送。Rtsp不管处于什么状态都不会去断掉连接。
  HTTP 协议默认使用80端口,RTSP 默认使用554端口。

RTSP协议的数据发送不占用协议带宽,RTP 可也认为是介于传输层和应用层之间的,默认是把UDP作为传输协议,可以看成是传输层的一个子层。

2.TCP与UDP

UDP 无连接,不保证包的顺序和质量,适用于实时数据

TCP 有连接,三次握手,保证顺序质量
这个关系简单的说可以理解成:
IP--->TCP--->TCP应用层,如http,ftp,telnet等,保证可靠传输
IP--->UDP--->RTP--->应用层,如用在IP电话的音视频流传输。
如果您的应用程序并不关心损坏或丢失的数据包,你不必承担额外的开销,提供额外的可靠性,您可以选择的UDP代替。

RTP/RTCP/UDP
用于音频

视频媒体,而

TCP

用于数据和控制信令的传输

RTP/RTCP相对于底层传输层,和RTSP,SIP等上层协议一起可以实现视频会议,视频直播等应用。

rtsp发起/终结流媒体(通过sdp) 
rtp传输流媒体数据 
rtcp对rtp进行控制,同步。
RTSP的请求主要有DESCRIBE,SETUP,PLAY,PAUSE,TEARDOWN,OPTIONS等,顾名思义可以知道起对话和控制作用 
RTP/RTCP是实际传输数据的协议 
RTP传输音频/视频数据,如果是PLAY,Server发送到Client端,如果是RECORD,可以由Client发送到Server 
RTCP包括Sender Report和Receiver Report,用来进行音频/视频的同步以及其他用途,是一种控制协议
RTSP的对话过程中SETUP可以确定RTP/RTCP使用的端口,PLAY/PAUSE/TEARDOWN可以开始或者停止RTP的发送,等等
RTSP响应头中
Content-Type: application/sdp表示响应体是sdp协议数据.

SDP协议学习笔记

http://www.rosoo.net/a/201005/9494.html

m=video 0 RTP/AVP 96

m=audio 0 RTP/AVP 97

symbian live5555 & rtsp & rtp & tcp & sdp & udp汇总

http://blog.csdn.net/linzhiji/archive/2010/11/19/6022141.aspx

RFC2326(中文版)-实时流协议(RTSP) 第10章

http://www.myfavor.org/e/DoPrint/?classid=3&id=37

RFC2326(中文版)-实时流协议(RTSP)

http://www.myfavor.org/network/2008-03-27/35.html

RTSP 协议详解

http://hi.baidu.com/13764969808/blog/item/268ff5fd86bb70f4fd037f79.html

RTSP 协议详解

http://blog.csdn.net/chenyanxu/article/details/2728427

基于RTSP的实现多媒体文件下载

http://www.jsembed.com/?About/biji/97.html

2.请求消息格式,CR LF表示回车换行
       方法 URI RTSP版本 CR LF
       消息头 CR LF CR LF        
       消息体 CR LF

3.OPTIONS命令, 得到服务器上可用的方法

CSeq头要从1开始,服务器针对请求命令的应答也应该有相同的CSeq头,这样可以知道是针对哪条请求发的应答。

请求示例:

OPTIONS rtsp://video.fjtu.com.cn:80/vs01/flws/flws_01.rm RTSP/1.0
CSeq: 1
User-Agent: LibVLC/1.1.11 (LIVE555 Streaming Media v2011.05.25)

响应示例:

RTSP/1.0 200 OK
CSeq: 1
Date: Tue, 29 May 2012 06:19:53 GMT
Server: Helix Server Version 11.1.0.719 (win32) (RealServer compatible)
Public: OPTIONS, DESCRIBE, ANNOUNCE, PLAY, PAUSE, SETUP, GET_PARAMETER, SET_PARAMETER, TEARDOWN
TurboPlay: 1
RealChallenge1: 1105b1d46a973db1bc7787d1adca20d6
StatsMask: 8

4.DESCRIBE 为了得到会话描述信息SDP

请求示例:

DESCRIBE rtsp://video.fjtu.com.cn:80/vs01/flws/flws_01.rm RTSP/1.0
CSeq: 2
Authorization: Basic YWRtaW4=
User-Agent: LibVLC/1.1.11 (LIVE555 Streaming Media v2011.05.25)
Accept: application/sdp

响应示例:

RTSP/1.0 200 OK
CSeq: 2
Date: Tue, 29 May 2012 06:48:38 GMT
Set-Cookie: cbid=efjgfmdicjckhldmeorrgplqmojrktluekjgkidlegcfdlplmnmrqprtqrrsltmudfhjjmhl;path=/;expires=Thu,31-Dec-2037 23:59:59 GMT
vsrc: http://video.fjtu.com.cn:80/viewsource/template.html?nuyhtgfcswz6bdE057Axc8chvqrEsfaba5E6qvm6wfy23p4efqDCr4x3gEf6Bs9wr4enf6r4ovCoa7Dqjlh87pp257e5w48bjd2hA1
Last-Modified: Thu, 10 Apr 2003 02:16:54 GMT
Content-base: rtsp://video.fjtu.com.cn:80/vs01/flws/flws_01.rm/
Vary: User-Agent, ClientID
Content-type: application/sdp
x-real-usestrackid: 1
Content-length: 2207
(以下都是SDP信息)
v=0
o=- 1049941014 1049941014 IN IP4 210.34.46.23
s=·¨ÂÉÎÄÊé  µÚÒ»½²
i=¸£½¨Ê¦·¶´óѧÍøÂçѧԺ ¸£½¨Ê¦·¶´óѧÍøÂçѧԺ
c=IN IP4 0.0.0.0
t=0 0
a=SdpplinVersion:1610641560
a=StreamCount:integer;2
a=control:*
a=Flags:integer;11
a=IsRealDataType:integer;1
a=Author:buffer;"uKO9qMqmt7a089GnzfjC59Gn1LoA"
a=Copyright:buffer;"uKO9qMqmt7a089GnzfjC59Gn1LoA"
a=Title:buffer;"t6jCyc7EyukgILXa0ru9sgA="
a=range:npt=0-2672.331000
m=audio 0 RTP/AVP 101  //这里指示音频流
b=AS:8
b=RR:243
b=RS:81
a=control:streamid=0
a=range:npt=0-2672.331000
a=length:npt=2672.331000
a=rtpmap:101 x-pn-realaudio/1000
a=fmtp:101
a=mimetype:string;"audio/x-pn-realaudio"
a=Helix-Adaptation-Support:1
a=ActualPreroll:integer;1713
a=AvgBitRate:integer;6500
a=AvgPacketSize:integer;232
a=EndOneRuleEndAll:integer;1
a=EndTime:integer;2671699
a=MaxBitRate:integer;6500
a=MaxPacketSize:integer;232
a=Preroll:integer;3426
a=OpaqueData:buffer;"LnJh/QAEAAAucmE0ZgVhxwAEAAAAOQAAAAAA6AAg7CAAALzN+fn5+QAGAOgAAAAAH0AAAAAQAAEEc2lwcgRzaXByAQcAAAAAAA=="
a=RMFF 1.0 Flags:buffer;"AAIAAgAA"
a=ASMRuleBook:string;"priority=5,averagebandwidth=6500,PNMKeyFrameRule=T;priority=5,averagebandwidth=0,PNMNonKeyFrameRule=T,OnDepend=\"0\",OffDepend=\"0\";"
a=intrinsicDurationType:string;"intrinsicDurationContinuous"
a=StreamName:string;"Audio Stream"
m=video 0 RTP/AVP 101   //这里指示视频流
b=AS:15
b=RR:506
b=RS:168
a=control:streamid=1
a=range:npt=0-2671.546000
a=length:npt=2671.546000
a=rtpmap:101 x-pn-realvideo/1000
a=fmtp:101
a=mimetype:string;"video/x-pn-realvideo"
a=Helix-Adaptation-Support:1
a=AvgBitRate:integer;13500
a=AvgPacketSize:integer;506
a=EndOneRuleEndAll:integer;1
a=MaxBitRate:integer;13500
a=MaxPacketSize:integer;607
a=Preroll:integer;3539
a=OpaqueData:buffer;"AAAAJlZJRE9SVjMwAPgAyAAMAAAAAAAPAAABCpAwMCAgAiwkPjI="
a=RMFF 1.0 Flags:buffer;"AAMAAgAAAAI="
a=ASMRuleBook:string;"#($Bandwidth >= 13500),priority=9,averagebandwidth=13500,PNMKeyFrameRule=T;#($Bandwidth >= 13500),OnDepend=\"0\",priority=5,averagebandwidth=0,PNMNonKeyFrameRule=T;#($Bandwidth < 13500),priority=9,timestampdelivery=T,DropByN=T,PNMThinningRule=T;"
a=intrinsicDurationType:string;"intrinsicDurationContinuous"
a=StreamName:string;"Video Stream"

SDP文本说明:

v=0 //指示协议的版本。

o=- 1049941014 1049941014 IN IP4 210.34.46.23 //与会话所有者有关的六个参数:

第一个参数表明会话发起者的名称,该参数可不填写,如填写和SIP消息中,from消息头的内容一致。
第二个参数为主叫方的会话标识符。
第三个参数为主叫方会话的版本,会话数据有改变时,版本号递增。
第四个参数定义了网络类型,IN表示Internet网络类型,目前仅定义该网络类型。
第五个参数为地址类型,目前支持IPV4和IPV6两种地址类型。
第六个参数为地址:表明会话发起者的IP地址,该地址为信令面的IP地址,信令PDP激活时为手机分配。

s=SDP Seminar  //表明本次会话的标题,或会话的名称。
  i=A Seminar on the session description protocol//会话的描述
  u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps//会话的URI,通过该地址可以查阅到会话的更多内容。
  e=mjh@isi.edu (Mark Handley)//会话责任人的EMIAL地址

c=IN IP4 224.2.17.12/127 //C行包含为多媒体会话而建立的连接的信息,其中指出了真正的媒体流使用的IP地址。
第一个参数为网络类型,目前仅定义INTERNET网络类型。用“IN”表示。
第二个参数为地址类型,目前支持两种地址类型:IPV4和IPV6。
第三个参数为地址,该地址为多媒体流使用的IP地址。

t=2873397496 2873404696  //表示会话的开始时间和结束时间。
第一个参数表明会话的开始时间,数字表明从1900年1月1日00:00以来所经过的秒数。
第二个参数表明会话的结束时间,数字表明从1900年1月1日00:00以来所经过的秒数。

m=audio 3458  RTP/AVP  0   96   97   //m行又称媒体行,描述了发送方所支持的媒体类型等信息。
  第一个参数为媒体名称:表明支持音频类型。
  第二个参数为端口号,表明UE在本地端口为3458上发送音频流。
  第三个参数为传输协议,一般为RTP/AVP协议。
  四-七参数为所支持的四种净荷类型编号。

m=指示在媒体数据中都有哪些流,及其类型,如
m=audio 0 RTP/AVP 101  //指示音频流
m=video 0 RTP/AVP 101   //指示视频流
m=application 0 RTP/AVP 96 //控制流,不携带媒体内容

a=control:后的值表示流的标识,如 a=control:streamid=1,a=control:trackID=0

a=rtpmap:0   PCMU
       a=rtpmap:96  G726-32/8000
       a=rtpmap:97  AMR-WB
    a行为媒体的属性行,以属性的名称:属性值的方式表示。
    格式为:a=rtpmap:<净荷类型><编码名称>
l净荷类型0固定分配给了PCMU,
l净荷类型96对应的编码方案为G.726,为动态分配的。
l净荷类型97对应的编码方式为自适应多速率宽带编码(AMR-WB),为动态分配的。

5.SETUP  客户端提醒服务器建立会话,并确定传输模式

请求示例:

SETUP rtsp://video.fjtu.com.cn:80/vs01/flws/flws_01.rm/streamid=1 RTSP/1.0
CSeq: 3
Transport: RTP/AVP;unicast;client_port=0

响应示例:

解释:

uri中 带有trackID=0,表示对该通道进行设置。

Transport参数设置了传输模式,包的结构。

RTP/AVP表示默认使用UDP传输RTP包,RTP/AVP/TCP表示通过TCP传输RTP包。

unicast表示单一传播。

client_port值中-前的表示客户端的接收RTP包的端口,-后的表示客户端的接收RTCP包的端口。

如果采用TCP方式传送,传送的RTP,RTCP包都在同一个链路上,需要区分,所以有了interleaved,0表示是RTP的通道,1表示是RTCP的通道,interleaved值有两个:0和1,0表示RTP包,1表示RTCP包,接收端根据interleaved的值来区别是哪种数据包。

2. 使用AsyncSocket实现RTSP协议

http://www.cnblogs.com/foxmin/archive/2012/03/12/2392523.html

3. 一个在线的RTSP流3GP地址,可以做测试用

rtsp://v.starv.tv/later.3gp

4.FFMPEG框架代码阅读
http://www.ffmpeg.com.cn/index.php/SDK%E4%B9%8B%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8

5.iFrameExtractor

http://www.codza.com/extracting-frames-from-movies-on-iphone

http://www.emsym.com/blog/?p=377

RTSP协议的更多相关文章

  1. RTSP协议媒体数据发包相关的细节

    最近完成了一RTSP代理网关,这是第二次开发做RTSP协议相关的开发工作了,相比11年的简单粗糙的版本,这次在底层TCP/IP通讯和RTSP协议上都有了一些新的积累,这里记录一下.基本的RTSP协议交 ...

  2. HTTP协议/RTSP协议/RTMP协议的区别

    RTSP. RTMP.HTTP的共同点.区别 共同点: 1:RTSP RTMP HTTP都是在应用应用层. 2: 理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP, ...

  3. 从RTSP协议SDP数据中获得二进制的SPS、PPS

    在RTSP协议的交互过程中,第二步客户端发送DESCRIBE请求之后,服务端会返回SDP内容,该SDP内容中有关于媒体和会话的描述,本篇文章主要给出如何从SDP字符串中得到H264视频信息中的sps. ...

  4. RTSP协议详解

        RTSP(Real Time Streaming Protocol)是由Real Network和Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议.RTSP对流媒体提 ...

  5. RTSP 协议分析

    RTSP 协议分析1.概述: RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwor ...

  6. RTSP协议、RTMP协议、HTTP协议的区别

    理论上RTSP RTMPHTTP都可以做直播和点播,但一般做直播用RTSP RTMP,做点播用HTTP.做视频会议的时候原来用SIP协议,现在基本上被RTMP协议取代了. RTSP. RTMP.HTT ...

  7. RTSP协议学习笔记

    一.        RTSP协议概述 RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似. RTSP ...

  8. 【转】RTSP协议学习笔记

    第一部分:RTSP协议 一. RTSP协议概述 RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似. ...

  9. RTSP协议分析

    RTSP 协议分析 1.概述:  RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetw ...

  10. Html5 <video>实现摄像头监控问题:html5并不支持rtsp协议,所以使用vlc进行转码,将rtsp转http流,这样<video>才可以直接播放

    今天在写html5中播放旷视C2摄像头视频监控的功能,查了很多资料,才发现Html5 <video>并不支持rtsp协议.后来查到使用第三方转码才得以实现. 这里把方法写下来分享给大家. ...

随机推荐

  1. 结构体定义:struct与typedef struct

    https://blog.csdn.net/haiou0/article/details/6877718?tdsourcetag=s_pcqq_aiomsg https://blog.csdn.net ...

  2. 模拟IE各种版本的方法

    下载360极速浏览器.开启“兼容模式” 默认会是IE7.可以通过控制台(Ctrl + shift + I)调整各个版本

  3. CPU调度算法

    批处理系统中的调度算法: *需要考虑的因素: 1. 吞吐量 2. cpu利用率 3. 周转时间 4. 公平性* 1.先来先服务: FCFS: 优点:实现简单 缺点:可能造成周转时间长 2.最短作业优先 ...

  4. php解码“&#”编码的中文用函数html_entity_decode()

    遇到类似 ' 这种编码的字,我们可以用html_entity_decode()函数来解码. html_entity_decode() 函数把 HTML 实体转换为字符. 语法 html_entity_ ...

  5. JS中的call_user_func封装

    PHP常见的call_user_func方法,在JS中有时候会用到,比如你想根据某个动态变量去执行方法. 以前遇到过类似的问题没有解决,现在不太记得具体案例了.今天无意中看到类似文章,学到了.代码如下 ...

  6. LINUX线程初探

     LINUX程序设计最重要的当然是进程与线程.本文主要以uart程序结合键盘输入控制uart的传输. 硬件平台:树莓派B+ 软件平台:raspberry 须要工具:USB转TTL(PL2303)+ ...

  7. mongo 的逻辑存储和物理存储

    逻辑存储空间与物理存储空间有差距的主要原因 存储引擎存储时,需要记录一些额外的元数据信息,这会导致物理空间总和比逻辑空间略大 存储引擎可能支持数据压缩,逻辑的数据块存储到磁盘时,经过压缩可能比逻辑数据 ...

  8. XMPP资源绑定(Resource Binding)

    一个XMPP的账号由三部分组成: 用户名(user/node),域名(domain)和资源(resource) .例如 alice@xmpp.irusher.com/mobile ,user部分(或n ...

  9. Oracle exp使用正則表達式导出部分表

    假设数据库中有许多张表,而我们又仅仅想导出须要的那几张能够使用例如以下命令 --仅仅导出test1.test2表 exp myname/mypassword@orcl file = d:\my.dmp ...

  10. Maven 编译

    pom.xml 添加插件 <build> <plugins> <plugin> <groupId>org.apache.maven.plugins< ...