文章目录
什么是RTSP协议
RTSP 是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP 协议与HTTP协议类似。
RTSP 被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。尽管有时可以把RTSP控制信息和媒体数据流交织在一起传送,但一般RTSP本身并不用于传送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。
使用live555
搭建RTSP 流服务器
-
下载live555的源码
-
./genMakefiles <os-platform> # <os-platform>是运行的目标平台。可用是“linux” 或者 “solaris”,亦或者是 config.<os-platform> 文件 make
-
编译完成后,会生成文件
mediaServer/live555MediaServer
-
执行结果
-
将准备好的视频文件放到和
live555MediaServer
同级目录 -
然后通过
VLC
,打开网络串流,输入地址,即可播放
7. 在使用live555MediaServer
有一些坑需要注意。- 它不支持FLV 格式
- 如果你的视频文件后缀为
.h264
,将修改后缀名为.264
RTSP 客户端和服务器交互过程
下面使用wireshark
进行抓包捕获出来的数据
OPTION
目的得到服务器提供的可用方法
OPTIONS rtsp://192.168.0.104:8554/cuc_ieschool.mkv RTSP/1.0
CSeq: 2
User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28)
服务器返回指令
RTSP/1.0 200 OK
CSeq: 2
Date: Fri, Nov 20 2020 06:18:23 GMT
Public: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER
DESCRIBE
客户端向服务器请求媒体会话的描述信息(SDP)
DESCRIBE rtsp://192.168.0.104:8554/cuc_ieschool.mkv RTSP/1.0
CSeq: 3
User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28)
Accept: application/sdp
服务器回应媒体的描述信息
RTSP/1.0 200 OK
CSeq: 3
Date: Fri, Nov 20 2020 06:18:23 GMT
Content-Base: rtsp://192.168.0.104:8554/cuc_ieschool.mkv/
Content-Type: application/sdp
Content-Length: 921
v=0
o=- 1605853103856016 1 IN IP4 192.168.0.104
s=Matroska video+audio+(optional)subtitles, streamed by the LIVE555 Media Server
i=cuc_ieschool.mkv
t=0 0
a=tool:LIVE555 Streaming Media v2020.11.20
a=type:broadcast
a=control:*
a=range:npt=0-34.233
a=x-qt-text-nam:Matroska video+audio+(optional)subtitles, streamed by the LIVE555 Media Server
a=x-qt-text-inf:cuc_ieschool.mkv
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:500
a=rtpmap:96 H265/90000
a=fmtp:96 profile-space=0;profile-id=1;tier-flag=0;level-id=63;interop-constraints=800000000000;sprop-vps=QAEMAf//AWAAAAMAgAAAAwAAAwA/lcCQ;sprop-sps=QgEBAWAAAAMAgAAAAwAAAwA/oAQCASFlleSTK8BAQAAAAwBAAAADA8I=;sprop-pps=RAHBc9GJ
a=control:track1
m=audio 0 RTP/AVP 97
c=IN IP4 0.0.0.0
b=AS:96
a=rtpmap:97 MPEG4-GENERIC/44100/2
a=fmtp:97 streamtype=5;profile-level-id=1;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1210
a=control:track2
SETUP
客户端提醒服务器建立会话,并确定传输方式
SETUP rtsp://192.168.0.104:8554/cuc_ieschool.mkv/track1 RTSP/1.0
CSeq: 4
User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28)
Transport: RTP/AVP;unicast;client_port=64272-64273
服务器回应请求的信息
RTSP/1.0 200 OK
CSeq: 4
Date: Fri, Nov 20 2020 06:18:23 GMT
Transport: RTP/AVP;unicast;destination=192.168.0.106;source=192.168.0.104;client_port=64272-64273;server_port=6970-6971
Session: 7E144F3E;timeout=65
PLAY
客户端发起播放请求
PLAY rtsp://192.168.0.104:8554/cuc_ieschool.mkv/ RTSP/1.0
CSeq: 6
User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28)
Session: 7E144F3E
Range: npt=0.000-
服务器回应播放动作
RTSP/1.0 200 OK
CSeq: 6
Date: Fri, Nov 20 2020 06:18:23 GMT
Range: npt=0.000-
Session: 7E144F3E
RTP-Info: url=rtsp://192.168.0.104:8554/cuc_ieschool.mkv/track1;seq=3511;rtptime=3738703622,url=rtsp://192.168.0.104:8554/cuc_ieschool.mkv/track2;seq=23953;rtptime=1552829022
PAUSE
客户端请求服务器暂停
PAUSE rtsp://192.168.0.104:8554/cuc_ieschool.mkv/ RTSP/1.0
CSeq: 118
User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28)
Session: 7E144F3E
服务器收到并回复
RTSP/1.0 200 OK
CSeq: 118
Date: Fri, Nov 20 2020 08:13:07 GMT
Session: 7E144F3E
TEARDOWN
客户端发起关闭请求
TEARDOWN rtsp://192.168.0.104:8554/cuc_ieschool.mkv/ RTSP/1.0
CSeq: 137
User-Agent: LibVLC/3.0.11 (LIVE555 Streaming Media v2016.11.28)
Session: 7E144F3E
服务器响应客户端
RTSP/1.0 200 OK
CSeq: 137
Date: Fri, Nov 20 2020 08:30:01 GMT
RTSP 重要头字段参数
Accept
用于指定客户端可用接受的媒体描述信息类型
CSeq
指定了RTSP 请求/回应的序列号,在每个请求或回应中都必须包含这个头字段。对每个包含一个给定序列号的请求消息,都会有一个相同序列号的回应消息。
Rang
用于指定一个时间范围
Session
Session 头字段标识了一个RTSP 会话。Session ID 是由服务器在SETUP 的回应中选择的,客户端一当得到 Session ID 后,在以后的对Session 的操作请求中都要包含 Session ID。
Transport
Transport 头字段包含客户端可用接受的传输选项列表,包括传输协议,地址端口