RTSP建立命令告诉服务器客户端用于接收媒体数据

2019-09-15 14:10栏目:大奖888官网登录
TAG:

第三步:启动Onvif

启动Onvif后,在这个网段中,让其他设备来发现Onvif智能设备

TEARDOWN

客户端发起关闭请求:

TEARDOWN rtsp://192.168.20.136:5000/xxx666 RTSP/1.0 
CSeq: 6
Session: 6310936469860791894 
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10) 

服务器回应:

RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1 
Cseq: 6
Session: 6310936469860791894 
Connection: Close 

SDP协议

一、        SDP协议概述

SDP(Session Description Protocol )会话描述协议,用于描述多媒体会话,它为会话通知、会话初始和其它形式的多媒体会话初始等操作提供服务。

SDP 的设计宗旨是通用性协议,所有它可以应用于很大范围的网络环境和应用程序,但 SDP不支持会话内容或媒体编码的协商操作。

SDP信息包括:

  • 会话名称和目标;
  • 会话活动时间;
  • 构成会话的媒体;
  • 有关接收媒体的信息、地址等。

二、        SDP格式

SDP 信息是文本信息,UTF-8 编码采用 ISO 10646 字符设置。SDP 会话描述如下(标注*符号的表示可选字段):

  • v= (协议版本)
  • o= (所有者/创建者和会话标识符)
  • s= (会话名称)
  • i=* (会话信息)
  • u=* (URI 描述)
  • e=* (Email 地址)
  • p=* (电话号码)
  • c=* (连接信息 ― 如果包含在所有媒体中,则不需要该字段)
  • b=* (带宽信息)

  一个或更多时间描述(如下所示):

  • z=* (时间区域调整)
  • k=* (加密密钥)
  • a=* (0个或多个会话属性线路)
  • 0个或多个媒体描述(如下所示)

  时间描述

  • t= (会话活动时间)
  • r=* (0或多次重复次数)

  媒体描述

  • m= (媒体名称和传输地址)
  • i=* (媒体标题)
  • c=* (连接信息 — 如果包含在会话层则该字段可选)
  • b=* (带宽信息)
  • k=* (加密密钥)
  • a=* (0个或多个会话属性线路)

三、        SDP示例

v=0

o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4

s=SDP Seminar

i=A Seminar on the session description protocol

u=

e=mjh@isi.edu (Mark Handley)

c=IN IP4 224.2.17.12/127

t=2873397496 2873404696

a=recvonly

m=audio 49170 RTP/AVP 0

m=video 51372 RTP/AVP 31

m=application 32416 udp wb

a=orient:portrait

 

//字段解释

V=0     ;Version 给定了SDP协议的版本

o=<username> <session id> <version> <network type> <address type>

<address>; Origin ,给定了会话的发起者信息

s=<session name> ;给定了Session Name

i=<session description> ; Information 关于Session的一些信息

u=<URI> ; URI

e=<email address>    ;Email

c=<network type> <address type> <connection address> ;Connect Data包含连接数据

t=<start time> <stop time> ;Time

a=<attribute>     ; Attribute

a=<attribute>:<value>

m=<media> <port> <transport> <fmt list> ; Media Announcements

步骤二:编译FFmpeg支持x264动态库

备注:脚本代码如下

www.88pt88.com 1www.88pt88.com 2www.88pt88.com 3

目录 [hide]

一、        RTSP协议概述

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

RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。尽管有时可以把RTSP控制信息和媒体数据流交织在一起传送,但一般情况RTSP本身并不用于转送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。

一次基本的RTSP操作过程是:首先,客户端连接到流服务器并发送一个RTSP描述命令(DESCRIBE)。流服务器通过一个SDP描述来进行反馈,反馈信息包括流数量、媒体类型等信息。客户端再分析该SDP描述,并为会话中的每一个流发送一个RTSP建立命令(SETUP),RTSP建立命令告诉服务器客户端用于接收媒体数据的端口。流媒体连接建立完成后,客户端发送一个播放命令(PLAY),服务器就开始在UDP上传送媒体流(RTP包)到客户端。 在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停等。最后,客户端可发送一个终止命令(TERADOWN)来结束流媒体会话

二、        RTSP协议与HTTP协议区别

1.   RTSP引入了几种新的方法,比如DESCRIBE、PLAY、SETUP 等,并且有不同的协议标识符,RTSP为rtsp 1.0,HTTP为http 1.1;

2.   HTTP是无状态的协议,而RTSP为每个会话保持状态;

3.   RTSP协议的客户端和服务器端都可以发送Request请求,而在HTTPF 协议中,只有客户端能发送Request请求。

4.   在RTSP协议中,载荷数据一般是通过带外方式来传送的(除了交织的情况),及通过RTP协议在不同的通道中来传送载荷数据。而HTTP协议的载荷数据都是通过带内方式传送的,比如请求的网页数据是在回应的消息体中携带的。

5.   使用ISO 10646(UTF-8) 而不是ISO 8859-1,以配合当前HTML的国际化;

6.   RTSP使用URI请求时包含绝对URI。而由于历史原因造成的向后兼容性问题,HTTP/1.1只在请求中包含绝对路径,把主机名放入单独的标题域中;

三、        RTSP重要术语

1.   集合控制(Aggregate control ):

对多个流的同时控制。对音频/视频来讲,客户端仅需发送一条播放或者暂停消息就可同时控制音频流和视频流。

2.   实体(Entity):

作为请求或者回应的有效负荷传输的信息。由以实体标题域(entity-header field)形式存在的元信息和以实体主体(entity body)形式存在的内容组成

3.   容器文件(Container file):

可以容纳多个媒体流的文件。RTSP服务器可以为这些容器文件提供集合控制。

4.   RTSP**会话(RTSP session ):**

RTSP交互的全过程。对一个电影的观看过程,会话(session)包括由客户端建立媒体流传输机制(SETUP),使用播放(PLAY)或录制(RECORD)开始传送流,用停止(TEARDOWN)关闭流。

四、        RTSP请求消息

1.   消息格式:

方法 URI RTSP版本       CR LF

       消息头 CR LF          CR LF         

       消息体 CR LF

 

其中方法包括OPIONS、DESCRIBE、SETUP、PLAY、TEARDOWN等,URI是接受方的地址,例如:rtsp://192.168.0.1/video1.3gp。

RTSP版本一般都是 RTSP/1.0。每行后面的CR LF表示回车换行,需要接受端有相应的解析,最后一个消息头需要有两个CR LF

消息体是可选的,有的Request消息并不带消息体。

五、        RTSP回应消息

1.   消息格式:

       RTSP版本 状态码www.88pt88.com, 解释      CR LF

       消息头 CR LF          CR LF

       消息体 CR LF

其中RTSP版本一般都是RTSP/1.0,状态码是一个数值,用于表示Request消息的执行结果,比如200表示成功,解释是与状态码对应的文本解释.

六、        RTSP 重要方法

 

1.         OPTIONS:

用于得到服务器提供的可用方法;

如:

OPTIONS rtsp://192.168.20.136:5000/xxx666 RTSP/1.0

CSeq: 1        

服务器的回应信息会在Public字段列出提供的方法。如:

RTSP/1.0 200 OK

CSeq: 1         //每个回应消息的cseq数值和请求消息的cseq相对应

Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE

2.         DESCRIBE**:**

客户端向服务器端发送DESCRIBE,用于得到URI所指定的媒体描述信息,一般是SDP信息。客户端通过Accept头指定客户端可以接受的媒体述信息类型。

如:

C->S: DESCRIBE rtsp://server.example.com/fizzle/foo RTSP/1.0

CSeq: 312

Accept: application/sdp, application/rtsl, application/mheg)

 

服务器回应URI指定媒体的描述信息:

如:

S->C: RTSP/1.0 200 OK

CSeq: 312

Date: 23 Jan 1997 15:35:06 GMT

Content-Type: application/sdp  //表示回应为SDP信息

Content-Length: 376

//这里为一个空行

//以下为具体的SDP信息

v=0 

o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4

s=SDP Seminar

i=A Seminar on the session description protocol

u=

e=mjh@isi.edu (Mark Handley)

c=IN IP4 224.2.17.12/127

t=2873397496 2873404696

a=recvonly

m=audio 3456 RTP/AVP 0

m=video 2232 RTP/AVP 31

m=whiteboard 32416 UDP WB

a=orient:portrait

 

媒体初始化是任何基于RTSP系统的必要条件,但RTSP规范并没有规定它必须通过DESCRIBE方法完成。RTSP客户端可以通过以下方法来接收媒体描述信息:

a)   通过DESCRIBE方法;

b)   其它一些协议(HTTP,email附件,等);

c)   通过命令行或标准输入设备

3.         SETUP**:**

用于确定转输机制,建立RTSP会话。客户端能够发出一个SETUP请求为正在播放的媒体流改变传输参数,服务器可能同意这些参数的改变。若是不同意,它必须响应错误"455 Method Not Valid In This State"。

Request 中的Transport头字段指定了客户端可接受的数据传输参数;Response中的Transport头字段包含了由服务器选出的传输参数。

如:

C->S: SETUP rtsp://example.com/foo/bar/baz.rm RTSP/1.0

CSeq: 302

Transport: RTP/AVP;unicast;client_port=4588-4589

 

服务器端对SETUP Request产生一个Session Identifiers。

如:

S->C: RTSP/1.0 200 OK

CSeq: 302

Date: 23 Jan 1997 15:35:06 GMT

Session: 47112344  //产生一个Session ID

Transport: RTP/AVP;unicast;

client_port=4588-4589;server_port=6256-6257

 

4.         PLAY**:**

PLAY方法告知服务器通过SETUP中指定的机制开始发送数据 。在尚未收到SETUP请求的成功应答之前,客户端不可以发出PLAY请求。

PLAY请求将正常播放时间(normal play time)定位到指定范围的起始处,并且传输数据流直到播放范围结束。PLAY请求可能被管道化(pipelined),即放入队列中(queued);服务器必须将PLAY请求放到队列中有序执行。也就是说,后一个PLAY请求需要等待前一个PLAY请求完成才能得到执行。

比如,在下例中,不管到达的两个PLAY请求之间有多紧凑,服务器首先play第10到15秒,然后立即第20到25秒,最后是第30秒直到结束。

C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0

CSeq: 835

Session: 12345678

Range: npt=10-15

 

C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0

CSeq: 836

Session: 12345678

Range: npt=20-25

 

C->S: PLAY rtsp://audio.example.com/audio RTSP/1.0

CSeq: 837

Session: 12345678

Range: npt=30-

 

Range头可能包含一个时间参数。该参数以UTC格式指定了播放开始的时间。如果在这个指定时间后收到消息,那么播放立即开始。时间参数可能用来帮助同步从不同数据源获取的数据流。

不含Range头的PLAY请求也是合法的。它从媒体流开头开始播放,直到媒体流被暂停。如果媒体流通过PAUSE暂停,媒体流传输将在暂停点(the pause point)重新开始。

如果媒体流正在播放,那么这样一个PLAY请求将不起更多的作用,只是客户端可以用此来测试服务器是否存活。

5.         PAUSE**:**

PAUSE请求引起媒体流传输的暂时中断。如果请求URL中指定了具体的媒体流,那么只有该媒体流的播放和记录被暂停(halt)。比如,指定暂停音频,播放将会无声。如果请求URL指定了一组流,那么在该组中的所有流的传输将被暂停。如:

C->S: PAUSE rtsp://example.com/fizzle/foo RTSP/1.0

CSeq: 834

Session: 12345678

 

S->C: RTSP/1.0 200 OK

CSeq: 834

Date: 23 Jan 1997 15:35:06 GMT

 

PAUSE请求中可能包含一个Range头用来指定何时媒体流暂停,我们称这个时刻为暂停点(pause point)。该头必须包含一个精确的值,而不是一个时间范围。媒体流的正常播放时间设置成暂停点。当服务器遇到在任何当前挂起(pending)的PLAY请求中指定的时间点后,暂停请求生效。如果Range头指定了一个时间超出了任何一个当前挂起的PLAY请求,将返回错误"457 Invalid Range" 。如果一个媒体单元(比如一个音频或视频禎)正好在一个暂停点开始,那么表示将不会被播放或记录。如果Range头缺失,那么在收到暂停消息后媒体流传输立即中断,并且暂停点设置成当前正常播放时间。

6.         TEARDOWN**:**

TEARDOWN请求终止了给定URI的媒体流传输,并释放了与该媒体流相关的资源。如:

C->S: TEARDOWN rtsp://example.com/fizzle/foo RTSP/1.0

CSeq: 892

Session: 12345678

 

S->C: RTSP/1.0 200 OK

CSeq: 892

七、        RTSP重要头字段参数

1.   Accept:

用于指定客户端可以接受的媒体描述信息类型。比如:

Accept: application/rtsl, application/sdp;level=2

2.   Bandwidth:

用于描述客户端可用的带宽值。

3.         CSeq**:**

指定了RTSP请求回应对的序列号,在每个请求或回应中都必须包括这个头字段。对每个包含一个给定序列号的请求消息,都会有一个相同序列号的回应消息。

4.         Rang**:**

用于指定一个时间范围,可以使用SMPTE、NTP或clock时间单元。

5.   Session:

 Session头字段标识了一个RTSP会话。Session ID 是由服务器在SETUP的回应中选择的,客户端一当得到Session ID后,在以后的对Session 的操作请求消息中都要包含Session ID.

6.   Transport:

 Transport头字段包含客户端可以接受的转输选项列表,包括传输协议,地址端口,TTL等。服务器端也通过这个头字段返回实际选择的具体选项。如:

Transport: RTP/AVP;multicast;ttl=127;mode="PLAY",

RTP/AVP;unicast;client_port=3456-3457;mode="PLAY"

八、        简单的RTSP消息交互过程

C表示RTSP客户端,S表示RTSP服务端

1.   第一步:查询服务器端可用方法

 1.C->S:OPTION request       //询问S有哪些方法可用

1.S->C:OPTION response    //S回应信息的public头字段中包括提供的所有可用方法

2.   第二步:得到媒体描述信息

2.C->S:DESCRIBE request      //要求得到S提供的媒体描述信息

2.S->C:DESCRIBE response    //S回应媒体描述信息,一般是sdp信息

3.   第三步:建立RTSP会话

3.C->S:SETUP request             //通过Transport头字段列出可接受的传输选项,请求S建立会话

3.S->C:SETUP response          //S建立会话,通过Transport头字段返回选择的具体转输选项,并返回建立的Session ID;

4.   第四步:请求开始传送数据

4.C->S:PLAY request        //C请求S开始发送数据

4.S->C:PLAY response            //S回应该请求的信息

5.   第五步: 数据传送播放中

S->C:发送流媒体数据    // 通过RTP协议传送数据

6.   第六步:关闭会话,退出

6.C->S:TEARDOWN request      //C请求关闭会话

6.S->C:TEARDOWN response //S回应该请求

上述的过程只是标准的、友好的rtsp流程,但实际的需求中并不一定按此过程。

其中第三和第四步是必需的!第一步,只要服务器客户端约定好,有哪些方法可用,则option请求可以不要。第二步,如果我们有其他途径得到媒体初始化描述信息(比如http请求等等),则我们也不需要通过rtsp中的describe请求来完成。

步骤一:编译x264静态库

1、首先:查看库配置信息

解压x264压缩包,进入x264文件目录中执行如下命令查看配置

命令:./configure —help

www.88pt88.com 4www.88pt88.com 5

2、其次:编写脚本

www.88pt88.com 6www.88pt88.com 7

sdp的格式

v=<version> 
o=<username> <session id> <version> <network type> <address type> <address> 
s=<session name> 
i=<session description> 
u=<URI> 
e=<email address> 
p=<phone number> 
c=<network type> <address type> <connection address> 
b=<modifier>:<bandwidth-value> 
t=<start time> <stop time> 
r=<repeat interval> <active duration> <list of offsets from start-time> 
z=<adjustment time> <offset> <adjustment time> <offset> .... 
k=<method> 
k=<method>:<encryption key> 
a=<attribute> 
a=<attribute>:<value> 
m=<media> <port> <transport> <fmt list> 
v = (协议版本) 
o = (所有者/创建者和会话标识符) 
s = (会话名称) 
i = * (会话信息) 
u = * (URI 描述) 
e = * (Email 地址) 
p = * (电话号码) 
c = * (连接信息) 
b = * (带宽信息) 
z = * (时间区域调整) 
k = * (加密密钥) 
a = * (0 个或多个会话属性行) 
时间描述: 
t = (会话活动时间) 
r = * (0或多次重复次数) 
媒体描述: 
m = (媒体名称和传输地址) 
i = * (媒体标题) 
c = * (连接信息 — 如果包含在会话层则该字段可选) 
b = * (带宽信息) 
k = * (加密密钥) 
a = * (0 个或多个媒体属性行) 

智能家居领域中音视频技术的应用非常之广泛,例如:猫眼、视频监控等,大量的使用音视频技术,其中音频采集、视频采集、音频编码、视频编码、音频解码、视频解码、音频传输、视频传输用的最多。那么今天给大家分享智能家居领域音视频技术中的视频编码技术深度剖析

其他方法

以上方法都是交互过程中最为常用的,其它还有一些重要的方法如:
get/set_parameter,pause,redirect等等

第四步:激活音视频

1、查询服务端可用方法

1.1 客户端请求(OPTION request)作用:询问服务器有哪些方法可用

"OPTIONS rtsp://192.168.1.122/TestSession RTSP/1.0""CSeq: 2""User-Agent: LibVLC/1.1.9 (LIVE555 Streaming Media v2011.01.06)"

1.2 服务器回应(OPTION response)

作用:回复的所有方法在Public字段

"RTSP/1.0 200 OK""CSeq: 2"{"Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE"}

注意:

最后这个也很重要,最后一个消息头需要有两个CR LF

2、得到媒体描述信息

2.1 客户端请求(DESCRIBE request)

作用:要求得到媒体描述信息

"DESCRIBE rtsp://192.168.1.122/TestSession RTSP/1.0""CSeq: 3""User-Agent: LibVLC/1.1.9 (LIVE555 Streaming Media v2011.01.06)""Accept: application/sdp"

2.2 服务器回应(DESCRIBE response)作用:回应媒体描述信息,一般是sdp信息

"RTSP/1.0 200 OK""CSeq: 3" //和请求的序号要对应{"Server: RTSP Service""Content-Base: rtsp://192.168.1.122/TestSession""Content-Type: application/sdp" //表示回应的是sdp信息"Content-Length: 367"}

然后再发送生成的sdp信息,sdp信息也可以和上面的字符串组合一起发送

3、建立RTSP会话

3.1 客户端请求(SETUP request)作用:通过Transport头字段列出可接受的传输选项,建立会话

"SETUP rtsp://192.168.1.122/TestSession/trackID=1 RTSP/1.0""CSeq: 4""User-Agent: LibVLC/1.1.9 (LIVE555 Streaming Media v2011.01.06)""Transport: RTP/AVP;unicast;client_port=2274-2275"

3.2 服务器回应(SETUP response)作用:建立会话,通过Transport头字段返回选择的具体传输选项,并返回建立的。

Session ID。 "RTSP/1.0 200 OK" "CSeq: 4""Session: 68422540987712""Transport:RTPAVP;unicast;source=192.168.1.122;server_port=8000-8001;client_port=2274-2275;ssrc=3969838262"

4、请求开始传送数据

4.1 客户端请求(PLAY request)作用:请求服务器开始发送数据

"PLAY rtsp://192.168.1.122/TestSession RTSP/1.0""CSeq: 5""User-Agent: LibVLC/1.1.9 (LIVE555 Streaming Media v2011.01.06)""Session: 68422540987712""Range: npt=0.000-"

4.2 服务器回应(PLAY response)作用:回应该请求的信息

"RTSP/1.0 200 OK""CSeq: 5""Session: 68422540987712""RTP-Info: url=rtsp://192.168.1.122/TestSession/trackID=1"

5、数据传输

服务器->客户端:发送流媒体数据, 通过RTP协议传输数据

6、关闭会话,退出

6.1 客户端请求(TEARDOWN request)作用:请求关闭会话

"TEARDOWN rtsp://192.168.1.122/TestSession RTSP/1.0""CSeq: 6""User-Agent: LibVLC/1.1.9 (LIVE555 Streaming Media v2011.01.06)""Session: 68422540987712"

6.2 服务器回应(TEARDOWN response)

"RTSP/1.0 200 OK""CSeq: 6""Session: 68422540987712""Connection: Close"

RTSP消息格式

RTSP的消息有两大类,一是请求消息(request),一是回应消息(response),两种消息的格式不同.
请求消息:

方法 URI RTSP版本 CR LF 
消息头 CR LF CR LF 
消息体 CR LF 

其中方法包括OPTION回应中所有的命令,URI是接受方的地址,例如
rtsp://192.168.20.136

RTSP版本一般都是 RTSP/1.0.每行后面的CR LF表示回车换行,需要接受端有相应的解析,最后一个消息头需要有两个CR LF
回应消息:

RTSP版本 状态码 解释 CR LF 
消息头 CR LF CR LF 
消息体 CR LF

其中RTSP版本一般都是RTSP/1.0,状态码是一个数值,200表示成功,解释是与状态码对应 的文本解释。

由互联网转向物联网的今天,智能家居将逐渐成为热门行业之一,人人都是用手机控制家里的智能设备,完成无限功能的操作,实现科技生活的便捷,人不在家也能知道家里各种场景,人不在家也能智能家里的安全情况,人不在家也能给亲朋好友开门,让小偷的警告时时监控到吓退小偷,智能手机能够操控家里的一切,人在回家的路上就可以先开空调,智能家居有着无限潜能挖掘。

DESCRIBE

C向S发起DESCRIBE请求,为了得到会话描述信息(SDP):

DESCRIBE rtsp://192.168.20.136:5000/xxx666 RTSP/1.0 

CSeq: 2 
token: 
Accept: application/sdp 
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10) 

服务器回应一些对此会话的描述信息(sdp):

RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1 
Cseq: 2 
x-prev-url: rtsp://192.168.20.136:5000 
x-next-url: rtsp://192.168.20.136:5000 
x-Accept-Retransmit: our-retransmit 
x-Accept-Dynamic-Rate: 1 
Cache-Control: must-revalidate 
Last-Modified: Fri, 10 Nov 2006 12:34:38 GMT 
Date: Fri, 10 Nov 2006 12:34:38 GMT 
Expires: Fri, 10 Nov 2006 12:34:38 GMT 
Content-Base: rtsp://192.168.20.136:5000/xxx666/ 
Content-Length: 344 
Content-Type: application/sdp 

v=0 //以下都是sdp信息 
o=OnewaveUServerNG 1451516402 1025358037 IN IP4 192.168.20.136 
s=/xxx666 
u=http:/// 
e=admin@ 
c=IN IP4 0.0.0.0 
t=0 0 
a=isma-compliance:1,1.0,1 

a=range:npt=0- 
m=video 0 RTP/AVP 96 //m表示媒体描述,下面是对会话中视频通道的媒体描述 
a=rtpmap:96 MP4V-ES/90000 
a=fmtp:96 
profile-level-id=245;config=000001B0F5000001B509000001000000012000C888B0E0E0FA62D089028307 

a=control:trackID=0//trackID=0表示视频流用的是通道0 

第一步:采集音视频帧数据

  • 1 RTSP消息格式
  • 2 简单的rtsp交互过程
  • 3 rtsp中常用方法
    • 3.1 OPTION
    • 3.2 DESCRIBE
    • 3.3 SETUP
    • 3.4 PLAY
    • 3.5 PAUSE
    • 3.6 TEARDOWN
    • 3.7 其他方法
  • 4 sdp的格式
  • 5 RTSP点播消息流程实例

步骤三:FFmpeg视频编码流程?

www.88pt88.com 8

PLAY

客户端发送播放请求:

PLAY rtsp://192.168.20.136:5000/xxx666 RTSP/1.0 
CSeq: 4 
Session: 6310936469860791894 
Range: npt=0.000- //设置播放时间的范围 
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10) 

服务器回应信息:

RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1 
Cseq: 4 
Session: 6310936469860791894 
Range: npt=0.000000- 
RTP-Info: url=trackID=0;seq=17040;rtptime=1467265309 
//seq和rtptime都是rtp包中的信息 

第二步:进行音视频编码操作

1、视频编码->H264视频压缩数据

2、音频编码->FDKAAC音频压缩数据

备注:音视频编码器都可以自己选择

简单的rtsp交互过程

C表示rtsp客户端,S表示rtsp服务端

1.C->S:OPTION request //询问S有哪些方法可用 
1.S->C:OPTION response //S回应信息中包括提供的所有可用方法 

2.C->S:DESCRIBE request //要求得到S提供的媒体初始化描述信息 
2.S->C:DESCRIBE response //S回应媒体初始化描述信息,主要是sdp 

3.C->S:SETUP request //设置会话的属性,以及传输模式,提醒S建立会话 
3.S->C:SETUP response //S建立会话,返回会话标识符,以及会话相关信息 

4.C->S:PLAY request //C请求播放 
4.S->C:PLAY response //S回应该请求的信息 

5.S->C:发送流媒体数据 

6.C->S:TEARDOWN request //C请求关闭会话 
6.S->C:TEARDOWN response //S回应该请求 

上述的过程是标准的、友好的rtsp流程,但实际的需求中并不一定按部就班来。
其中第3和4步是必需的!
第一步,只要服务器客户端约定好,有哪些方法可用,则option请求可以不要。第二步,如果我们有其他途径得到媒体初始化描述信息(比如http请求等等),则我们也不需要通过rtsp中的describe请求来完成。第五步,可以根据系统需求的设计来决定是否需要。

注意:我们使用的FFmpeg开源库,FFmpeg本身支持x264编码,但是我们需要将x264一起打包编译到FFmpeg开发动态库中,这样才可以正常使用x264,因为默认情况下这个功能是关闭的。

Real Time Streaming Protocol或者RTSP(实时流媒体协议),是由Real network 和 Netscape共同提出的如何有效地在IP网络上传输流媒体数据的应用层协议。RTSP提供一 种可扩展的框架,使能够提供可控制的,按需传输实时数据,比如音频和视频文件。源数据可以包括现场数据的反馈和存贮的文件。rtsp对流媒体提供了诸如暂停,快进等控制,而它本身并不传输数据,rtsp作用相当于流媒体服务器的远程控制。传输数据可以通过传输层的tcp,udp协议,rtsp也提供了基于rtp传输机制的一些有效的方法。

步骤四:FFmpeg视频编码实现?

1、首先:配置FFmpeg环境

第一步:新建NDK项目

第二步:导入.so动态库到AS中

第三步:在CMakeLists.txt文件中配置.so动态库,同时链接动态库

第四步:在build.gradle文件中配置FFmpeg支持手机CPU架构类型

第五步:编译测试

2、其次:代码实现与分析

www.88pt88.com 9www.88pt88.com 10www.88pt88.com 11www.88pt88.com 12www.88pt88.com 13www.88pt88.com 14www.88pt88.com 15www.88pt88.com 16www.88pt88.com 17www.88pt88.com 18

小编在这也推荐一下自己QQ群:468115610,学习氛围还行,共同学习探讨,三人行必有我师,一起为自己更好的2018!

SETUP

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

SETUP rtsp://192.168.20.136:5000/xxx666/trackID=0 RTSP/1.0 
CSeq: 3 
Transport: RTP/AVP/TCP;unicast;interleaved=0-1 
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10) 

uri中带有trackID=0,表示对该通道进行设置。Transport参数设置了传输模式,包
的结构。接下来的数据包头部第二个字节位置就是interleaved,它的值是每个通道都
不同的,trackID=0的interleaved值有两个0或1,0表示rtp包,1表示rtcp包,接受端
根据interleaved的值来区别是哪种数据包。

服务器回应信息:

RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1 
Cseq: 3 
Session: 6310936469860791894 //服务器回应的会话标识符 
Cache-Control: no-cache 
Transport: RTP/AVP/TCP;unicast;interleaved=0-1;ssrc=6B8B4567 

RTSP点播消息流程实例

客户端:VLC
RTSP服务器:LIVE555 Media Server

1)C(Client)-> M(Media Server) 
OPTIONS rtsp://192.168.1.109/1.mpg RTSP/1.0 
CSeq: 1 
user-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20) 

1)M -> C 
RTSP/1.0 200 OK 
CSeq: 1 
Date: wed, Feb 20 2008 07:13:24 GMT 
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE 

2)C -> M 
DESCRIBE rtsp://192.168.1.109/1.mpg RTSP/1.0 
CSeq: 2 
Accept: application/sdp 
User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20) 

2)M -> C 
RTSP/1.0 200 OK 
CSeq: 2 
Date: wed, Feb 20 2008 07:13:25 GMT 
Content-Base: rtsp://192.168.1.109/1.mpg/ 
Content-type: application/sdp 
Content-length: 447 
v=0 
o =- 2284269756 1 IN IP4 192.168.1.109 
s=MPEG-1 or 2 program Stream, streamed by the LIVE555 Media Server 
i=1.mpg 
t=0 0 
a=tool:LIVE555 Streaming Media v2008.02.08 
a=type:broadcast 
a=control:* 
a=range:npt=0-66.181 
a=x-qt-text-nam:MPEG-1 or Program Stream, streamed by the LIVE555 Media Server 
a=x-qt-text-inf:1.mpg 
m=video 0 RTP/AVP 32 
c=IN IP4 0.0.0.0 
a=control:track1 
m=audio 0 RTP/AVP 14 
c=IN IP4 0.0.0.0 
a=control:track2 

3)C -> M 
SETUP rtsp://192.168.1.109/1.mpg/track1 RTSP/1.0 
CSeq: 3 
Transport: RTP/AVP; unicast;client_port=1112-1113 
User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20) 

3)M -> C 
RTSP/1.0 200 OK 
CSeq: 3 
Date: wed, Feb 20 2008 07:13:25 GMT 
Transport: RTP/AVP;unicast;destination=192.168.1.222;source=192.168.1.109;client_port=1112-1113;server_port=6970-6971 
Session: 3 

4)C -> M 
SETUP rtsp://192.168.1.109/1.mpg/track2 RTSP/1.0 
CSeq: 4 
Transport: RTP/AVP; unicast;client_port=1114-1115 
Session: 3 
User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20) 

4)M -> C 
RTSP/1.0 200 OK 
CSeq: 4 
Date: wed, Feb 20 2008 07:13:25 GMT 
Transport: RTP/AVP;unicast;destination=192.168.1.222;source=192.168.1.109;client_port=1114-1115;server_port=6972-6973 
Session: 3 

5)C -> M 
PLAY rtsp://192.168.1.109/1.mpg/ RTSP/1.0 
CSeq: 5 
Session: 3 
Range: npt=0.000- 
User-Agent: VLC media player(LIVE555 Streaming Media v2007.02.20) 

5)M -> C 
RTSP/1.0 200 OK 
CSeq: 5 
Range: npt=0.000- 
Session: 3 
RTP-Info: url=rtsp://192.168.1.109/1.mpg/track1;seq=9200;rtptime=214793785,url=rtsp://192.168.1.109/1.mpg/track2;seq=12770;rtptime=31721

(开始传输流媒体…)

ref: 

PAUSE

客户端发起暂停请求:

PAUSE rtsp://192.168.20.136:5000/xxx666 RTSP/1.0 
Cseq: 5
Session: 6310936469860791894

服务器回应:

RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1 
Cseq: 5 
Session: 6310936469860791894

rtsp中常用方法

OPTION

目的是得到服务器提供的可用方法:

OPTIONS rtsp://192.168.20.136:5000/xxx666 RTSP/1.0 
CSeq: 1 //每个消息都有序号来标记,第一个包通常是option请求消息 
User-Agent: VLC media player (LIVE555 Streaming Media v2005.11.10) 

服务器的回应信息包括提供的一些方法,例如:

RTSP/1.0 200 OK 
Server: UServer 0.9.7_rc1 
Cseq: 1 //每个回应消息的cseq数值和请求消息的cseq相对应 
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, SCALE, 
GET_PARAMETER //服务器提供的可用的方法 

版权声明:本文由大奖888-www.88pt88.com-大奖888官网登录发布于大奖888官网登录,转载请注明出处:RTSP建立命令告诉服务器客户端用于接收媒体数据