live555之openRTSP-----流程分析

原创 2016年08月31日 11:58:46

流程分析也可参照 http://blog.csdn.net/xu_fu/article/details/9318905 ,这篇博客的排版很清晰。
下面是我自己总结的内容:(我这个rtsp客户端实现结果,不是获取视频保存到本地文件,而是直接解码播放)

int main(int argc,char *argv[]){
    BasicTaskschedular::createNew();
    BasicUsageEnvironment::createNew();//创建BasicUsageEnvironment对象,该对象包含任务调度,和打印等基础功能
    .........................
    ourClient = createClient(*env, streamURL, verbosityLevel, progName);//streamURL是rtsp的url,progName是保存文件的名字,我随便填的
    if (sendOptionsRequest) {//开始与sever通过RTSP协商,从这里开始。下面在详细讲解
    getOptions(continueAfterOPTIONS);//第一次会执行这个函数
  } else {
    continueAfterOPTIONS(NULL, 0, NULL);
  }
    env->taskScheduler().doEventLoop(&chrEventLoopFlag); //  启动任务引擎,会不停歇的检测有没有要处理的任务。
}

现在来解析getOptions(continueAfterOPTIONS);

getOptions(continueAfterOPTIONS);
      |---sendOptionsCommand(afterFunc, ourAuthenticator);//1
.........|---sendRequest(new..RequestRecord(++fCSeq,"OPTIONS",responseHandler));//2
.................|---openConnection();//3
.........................|---connectToServer()//4
..................................|---connect()//5
..................................|---taskScheduler().setBackgroundHandling(connectionHandler);//6
.........................|---taskScheduler().setBackgroundHandling(incomingDataHandler);//7
.................|---send(fOutputSocketNum, cmd, strlen(cmd), 0)//8
.................|---fRequestsAwaitingResponse.enqueue(request);//9

2:RTSP第一步,发送OPTIONS包。并将continueAfterOPTIONS回调函数一同传入,通过这些参数构建一个RequestRecord对象,这些传入的参数通过这个对象管理
3:第一次使用RTSP协议首先要建立一个TCP连接, fInputSocketNum = fOutputSocketNum = setupStreamSocket(envir(), 0);先建立socket,然后调用4 connect连接。因为这个套接字并不是阻塞的,所以connect之后可能握手还没有完成就返回了。所以这是要添加connectionHandler到任务中,完成connect操作,一次就好。7:建立完成之后将接受消息处理函数添加到后台任务中。incomin–Data–Handler
8:前期准备都做好了然后发送OPTIONS命令,等待sever返回,
9:将开始生成的RequestRecord对象添加到等待队列中,其中包含了“OPTIONS”和处理函数“continueAfterXXXXX”

注:在发送OPTIONS时建立好了TCP连接,并添加好了处理函数
然后程序会进入singleEvent()循环,检查任务。
当检测到该socket有可读信息时,调用incomingDataHandler

  int bytesRead = readSocket(...);
  handleResponseBytes(bytesRead);

在handleResponseBytes中先解析返回的信息,然后取出 fRequestsAwaitingResponse队列里的RequestRecord对象,上面已经说了,该对象保存了接受完OPTIONS之后的处理函数continueAfterOPTIONS。
然后进入 foundRequest->handler()

然后依次类推;在continueAfterOPTIONS-》 getSDPDescription(continueAfterDESCRIBE);
然后接受DESCRIBE之后进入continueAfterDESCRIBE-》setupStreams-》setupSubsession(continueAfterSETUP);
然后接受SETUP返回之后进入continueAfterSETUP-》setupStreams-》startPlayingSession(continueAfterPLAY);

经过上面完整的过程RTSP协议client–sever之间就已经协商好了。剩下的就是接受rtp/rtcp了。

因为接受OPTIONS之后并没有太多的其他初始化,所以 下一篇在讲一下接收到DESCRIBE之后的其他的一些初始化操作。

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

openRTSP是对RTSPClient的实现,与服务器对应的客户端功能 1、初始化 BasicTaskschedular::createNew() BasicUsageEnviro...
  • liuhongxiangm
  • liuhongxiangm
  • 2013年07月26日 10:13
  • 1009

通过live555实现H264 RTSP直播

前面的文章中介绍了《H264视频通过RTMP流直播》,下面将介绍一下如何将H264实时视频通过RTSP直播。       实现思路是将视频流发送给live555, 由live555来实现H264...
  • xipiaoyouzi
  • xipiaoyouzi
  • 2017年01月19日 16:13
  • 2601

通过live555实现H264 RTSP直播(Windows版)

为何标明“Windows版”,因为firehood大神已经实现了linux版:通过live555实现H264 RTSP直播 相关文章: 【1】Win7(Windows 7)下用VS2013(Visua...
  • caoshangpa
  • caoshangpa
  • 2016年11月17日 15:22
  • 6662

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

openRTSP是对RTSPClient的实现,与服务器对应的客户端功能 1、初始化 BasicTaskschedular::createNew() BasicUsageEnvironment:...
  • leiych
  • leiych
  • 2013年12月10日 18:35
  • 863

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

openRTSP是对RTSPClient的实现,与服务器对应的客户端功能 1、初始化 BasicTaskschedular::createNew() BasicUsageEnvironment:...
  • xu_fu
  • xu_fu
  • 2013年07月13日 15:34
  • 6197

live555简介、整体框架 、openRTSP客户端流程

live555简介 Live555 是一个为流媒体提供解决方案的跨平台的C++开源项目,它实现了对标准流媒体传输协议如RTP/RTCP、RTSP、SIP等的支持。Live555实现了对多种音视频编码...
  • a7281080
  • a7281080
  • 2012年05月22日 21:37
  • 2671

[RTSP]live555-openRTSP客户端流程

1、创建TaskScheduler和BasicUsageEnvironment类; 2、命令行解析,获取流媒体地址和其他选项; 3、创建RTSPClient对象; 4、如果需要,RTSPClie...
  • faihung
  • faihung
  • 2017年06月03日 07:21
  • 583

live555 分析—— OpenRtsp

通过分析live库提供的例子程序 OpenRTSP,可以清晰地了解客户端接收来自网络上媒体数据的过程。注意,RTP协议和RTCP协议接收的数据分别是视音频数据和发送/接收状况的相关信息,其中,RTP协...
  • leixiaohua1020
  • leixiaohua1020
  • 2013年10月15日 12:38
  • 10988

LIVE555再学习 -- OpenRTSP 源码分析

看了很多东西,感觉有点杂。源码分析部分也看了,讲的也就那样。现在有点不知道从哪讲起了。参看:nkmnkm的专栏-流媒体参看:smilestone322的专栏-live555...
  • qq_29350001
  • qq_29350001
  • 2017年09月18日 14:27
  • 742

live555 分析- openRtsp

通过分析live库提供的例子程序 OpenRTSP,可以清晰地了解客户端接收来自网络上媒体数据的过程。注意,RTP协议和RTCP协议接收的数据分别是视音频数据和发送/接收状况的相关信息,其中,RTP协...
  • weiwei2012start
  • weiwei2012start
  • 2013年12月22日 19:44
  • 693
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:live555之openRTSP-----流程分析
举报原因:
原因补充:

(最多只允许输入30个字)