Live555源码分析

前言

Live555是一套开源的支持http的RTSP服务器,可以通过解析本地MP4,mp3,h264,等等编码的文件,如果想了解RTSP的通讯协议,和视频文件的编解码,这套代码还是值得阅读的。

正文

上一篇讲述了LIve555的任务进程管理,这里通过一个进程,通过添加任务的方式,完成了任务的调度,可是真的关于通讯和文件的解析,就没太多分析,这次我从整体结构来分析一下Live555的结构。

2.1 消息通讯过程

这里一共要通过五次信息交换,才可以实现通讯。

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 回应该请求的信息  
S->C:发送流媒体数据  
5.C->S:TEARDOWN request //C 请求关闭会话  
5.S->C:TEARDOWN response //S 回应该请求

上述的过程是标准的、友好的rtsp 流程,但实际的需求中并不一定按部就班来。其中第3和4步是必需的!第一步,只要服务器客户端约定好,有哪些方法可用,则option 请求可以不要。第二步,如果我们有其他途径得到媒体初始化描述信息(比如http 请求等等),则我们也不需要通过rtsp 中的describe 请求来完成。第五步,可以根据系统需求的设计来决定是否需要。
但是我们的live555是支持五条全部指令的,当然请求,也是按部就班的请求,我们一一回应,着前四步很重要,所有的代码逻辑都是围绕着写来的,以后我们会一一讲解这些请求和应答。

2.2 主要的请求指令

这里我介绍几种主要的通讯过程,主要是跟踪开始初始化,和传输数据,至于说后面的结束,这里当然不管了。

2.2.1 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 //服务器提供的可用的方法

2.2.2 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=000001B0F5000001B509000001000000012000C888B0E0E0FA62D
089028307
a=control:trackID=0//trackID=0表示视频流用的是通道0

2.2.3 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

2.2.4 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. 服务器的搭建
  2. DESCRIBE指令处理
  3. PLAY指令处理

后记

这里这篇博客很大程度上是复制别人的博客,我也没找到原作者,这里就不附链接,共勉加油。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值