rtsp协议作用
流媒体播放控制
以URL形式向客户端发布流媒体文件信息
Rtsp报文顺序
OPTION
DESCRIBE
SETUP
PLAY
TEARDOWN
OPTION 获取服务器/客户端支持的能力集
DESCRIBE ip地址+端口+文件路径+rtsp版本
从服务器获取流媒体文件格式信息一般是sdp
从服务器获取流媒体文件传输信息一般是sdp长度
Setup与服务器协商流媒体传输方式(tcp/udp),建立RTP通道
Play与服务器协商流媒体播放
播放时间
播放速度
TEARDOWN
拆除连接
SDP(Session DescriptionProtocol)
多媒体应用层控制协议
基于文本
会话建立过程中的媒体类型和编码方案的协商
Sdp格式
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 个或多个媒体属性行)
RTSP(Real Time StreamingProtocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议。
SIP(Session Initiation Protocol)是一个应用层的信令控制协议。用于创建、修改和释放一个或多个参与者的会话。
Sip可以rtsp相互转换。
sip和rtsp都是应用层的控制协议,负责一次通信过程的建立和控制和结束,不负责中间的传输部分。他们都是基于纯文本的信令协议,穿墙性能良好。支持tcp、udp,支持多方通信。他们都需要服务器支持,都支持会话中重定向。sip和rtsp 都使用sdp协议来传送媒体参数,使用rtp(rtcp)协议来传输媒体流。
区别:rtsp是专门为流媒体制定的协议,在多个媒体流的时间同步方面比sip强大。rtsp还提供网络负载均衡的功能,减轻服务器压力和网络带宽要求。sip一般用来创建一次音频、视频通话(双向),而rtsp一般用来做视频点播、视频监控等(单向)。Sip一般用来做双向的。
Rtsp代码地址
http://blog.csdn.net/dxpqxb/article/details/7991684
在MSRP协议中,涉及到了SDP协议。
SDP协议:
"m=..."表示一个需要传送的文件,如果需要有多个文件,就需要多行这个内容。如果在多行内容的情况下,文件接收者,可以把不想要的文件
的行,端口号设置成零,就可以通知发送者不传送啦。
还可以包含filetype,filesize,hash,filename,icon,disposition等扩展信息。
"i=..."是一个可以看得懂的文字信息。
对于一个文件的接收者,它必须在SDP协议中包含recvonly属性,而对于一个文件送者,必须包含sendonly属性。
文件选择器(file selector),必须包含'hash', 'filename', 'filesize', or 'filetype'其中一个。在文件传送的倡议者打的SDP协议中,也
必须包含其中之一。
如果响应者是一个文件接收者,则在收到发起者发送过来的信息后,必须要创建一个SDP回应包,其中必须包含recvonly,而且如果发起者包里
面有'filetype', 'filesize',or 'filename'属性,在SDP回应包里面也要包含相同内容,表示同意。但是不能包含'icon', 'hash', or 'disposition'属性。
但是如果响应者是一个文件发送者,则在创建SDP回应包时,必须包含sendonly,可以包含所有的文件相关属性。如果根据请求者检索出来的文件数多于一个,则拒绝文件传送,这是SDP协议要求,后续的SDP可能会支持多文件。
SDP:
Session description
v= (protocol version)
o= (owner/creator and sessionidentifier)
s= (session name)
i=* (session information)
u=* (URI of description)
e=* (email address)
p=* (phone number)
c=* (connection information - not required if included in
all media)
b=* (zero or more bandwidth information lines)
One or more time descriptions ("t=" and "r=" lines,see below)
z=* (time zone adjustments)
k=* (encryption key)
a=* (zero or more session attribute lines)
Zero or more media descriptions
Time description
t= (time the session is active)
r=* (zero or more repeat times)
Media description, if present
m= (media name and transportaddress)
i=* (media title)
c=* (connection information - optional if included at
session-level)
b=* (zero or more bandwidth information lines)
k=* (encryption key)
a=* (zero or more media attribute lines)
以上带"*"号的是可选的,其余的是必须的。一般顺序也按照上面的顺序来排列。
a=*是sdp协议扩展属性定义,除上面以外的,分解时其它的都可以扔掉。
a=charset属性指定协议使用的字符集。一般的是ISO-10646。
示例:
v=0
o=<username> <sess-id><sess-version> <nettype> <addrtype> <unicast-address>
其中:nettype是IN,代表internet,addrtype是IP4或IP6。unicast-address任务创建计算机的地址。
整个这个属性,是唯一表示一个任务。
e=123@126.com
或
p=+1 616 555-6011
对于一个任务只能两者之中的一个,表示会议控制者的联系方式。邮件地址可以是j.doe@example.com (Jane Doe)形式,括号里面的是描述联
系人的名称,或者Jane Doe <j.doe@example.com>,前面的是联系人的名称。
c=<nettype> <addrtype><connection-address>
这个连接数据,可以是传话级别的连接数据,或者是单独一个媒体数据的连接数据。在是多播时,connection-address就该是一个多播组地址
,当是单播时,connection-address就该是一个单播地址。对于addrtype是IP4的情况下,connection-address不仅包含IP地址,并且还要包含
a time to live value(TTL 0-255),如:c=IN IP4224.2.36.42/128,IP6没有这个TTL值。
还允许象这样的<base multicast address>[/<ttl>]/<number ofaddresses>格式的connection-address。如:
c=IN IP4 224.2.1.1/127/3等同于包含c=IN IP4224.2.1.1/127, c=IN IP4 224.2.1.2/127, c=IN IP4 224.2.1.3/127三行内容。
b=<bwtype>:<bandwidth> bwtype可以是CT或AS,CT方式是设置整个会议的带宽,AS是设置单个会话的带宽。缺省带宽是千比特每秒。
t=<start-time> <stop-time>,这个可以有行,指定多个不规则时间段,如果是规则的时间段,则r=属性可以使用。start-time和stop-time都
遵从NTP(Network Time Protocol),是以秒为单位,自从1900以来的时间。要转换为UNIX时间,减去2208988800。如果stop-time设置为0,则会
话没有时间限制。如果start-time也设置为0,则会话被认为是永久的。
r=<repeat-interval> <activeduration> <offsets from start-time>重复次数
在时间表示里面可以如下表示:
d - days (86400 seconds)
h - hours (3600 seconds)
m - minutes (60 seconds)
s - seconds (allowed for completeness)
z=<adjustment time> <offset><adjustment time> <offset> ....
k=<method>
k=<method>:<encryption key>
a=<attribute>
a=<attribute>:<value>
m=<media> <port> <proto><fmt> ...
m=<media> <port>/<number ofports> <proto> <fmt> ...
其中:<media>可以是,"audio","video", "text","application" and "message"。<port>是媒体传送的端口号,它依赖于c=和<proto>。
<proto> 可以是,udp,RTP/AVP和RTP/SAVP。
a=cat:<category>分类,根据分类接收者隔离相应的会话
a=keywds:<keywords>关键字,根据关键字隔离相应的会话
a=tool:<name and version of tool>创建任务描述的工具的名称及版本号
a=ptime:<packet time>在一个包里面的以毫秒为单位的媒体长度
a=maxptime:<maximum packet time>以毫秒为单位,能够压缩进一个包的媒体量。
a=rtpmap:<payload type> <encodingname>/<clock rate> [/<encoding parameters>]
a=recvonly
a=sendrecv
a=sendonly
a=inactive,
a=orient:<orientation>其可能的值,"portrait","landscape" and "seascape" 。
a=type:<conference type>,建议值是,"broadcast","meeting", "moderated", "test" and"H332"。
a=charset:<character set>
a=sdplang:<language tag>指定会话或者是媒体级别使用的语言
a=framerate:<frame rate>设置最大视频帧速率
a=quality:<quality>值是0-10
a=fmtp:<format> <format specificparameters>
在SIP协议的包含的内容是SDP时,应该把Content-Type设置成application/sdp。
Rtp已上传至论坛
rtsp流,具体步骤如下:
1. 下载安装VLC播放器(VLC播放器既可以做播放器,又可以作为流媒体服务器)
2. 选择“媒体”-->“流”,选择一种视频输入源,点击“串流”
3. “来源”部分保持默认,直接“next”
4. 在“目标设置”中,选择rtsp或者http协议,点击"添加“,设置端口号和输出流的名称,点击”next“
5. 选择视音频编码输出格式,默认为h.264+mp3格式,点击”next“
6. 最后点击”stream“即可获得http或者rtsp协议输出的流。
Rtsp开源码http://www.codeforge.cn/article/243097