流媒体Live555(五)——openRTSP流程分析

openRTSP是对RTSPClient的实现,与服务器对应的客户端功能

1、初始化

BasicTaskschedular::createNew()

BasicUsageEnvironment::createNew()

解析输入streamURL

ourClient= createClient(streamURL)

\_ourRTSPClient = RTSPClient::createNew()

\_new RTSPClient()

\_setBaseURL(rtspURL)

2、发送请求与接收

RTSPClient的请求是连续发送的,在发出一个请求后,回调函数处理返回信息,处理结束后会发出另一个请求。

发送请求都是通过sendRequest方法,将请求封装为RequestRecord,传入回调函数。

2.1 continueAfterDESCRIBE()

continueAfterDESCRIBE(sdpString)

|---session =MediaSession::createNew(sdp) 根据sdp信息创建MediaSessionMediasubSession

|---foreachsubSession->initiate(simpleRTPoffsetArg) 这里会创建具体的数据接收方式,如文件等

|---setupStream(), 发送setup请求

MediaSession::createNew(sdp)

|---new MediaSession()

|---session->initializeWithSDP(sdp)

|---循环parseSDPLine,直到sdp描述中的“m=……”行

|---解析sdpLine,创建MediaSubsession

|---MediaSubsession* subsession =createNewMediaSubsession() 其中会对MediaSubsession中各个变量初始化

|---加入fSubsessionTail这个链表

|---subsession->parseSDPLine 解析subSession具体的信息

MediaSubsession::initiate()

|---fRTPSocketfRTCPSocket

|---createSourceObjects 创建fReadSourcefRTPSource

|---fReadSource = fRTPSource = H264VideoRTPSource::createNew

|---fRTCPInstance = RTCPInstance::createNew(fRTPSource)

2.2setupStream

setupStream()

|---foreach subsession, setupSubsession()

|---foreach subsession, fileSink = H264VideoFileSink::createNew

|---subsession->sink->startPlaying(readSource,subsessionAfterPlaying, subsession)

|---startPlayingsession(continueAfterPLAY)发送Play请求

 

RTSPClient

通过sendRequest发送请求命令,第一次请求时会发现还没有socket,因此会调openConnection进行连接,之后根据命令类型构造请求命令字串,send发送请求。

openConnection()

|---parseRTSPURL 解析输入的fBaseURL,得到server地址和端口

|---setupStreamSocket 建立socket赋值给fInputSocket,fOutputSocket

|---connectToServer 连接到serverconnect方法,根据连接结果会分两种情况:

1、正常,返回1,之后会在socketHandler中添加一个读任务,用于接收server返回的数据,这个任务将在之后循环接收数据

2、延迟,返回0,在socketHandler中添加一个写任务,并且不会在之后添加读任务,读任务会在回调函数中添加

sendRequest

|--openConnection返回连接结果,如果为0,说明读操作延迟,connectionIsPending = true,下面就调用延迟处理,如果为1,则说明正常,构造命令后send发送

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值