流媒体Live555学习(一)
来源:互联网 发布:上海快3遗漏数据查询 编辑:程序博客网 时间:2024/04/30 10:12
1、UsageEnvironment
UsageEnvironment代表了整个程序的运行环境,其中保存了一些全局变量,定义了一些输出函数(纯虚函数)。从这些输出函数就可以看出该类主要用于充当程序的全局上下文,并提供打印信息的输出。
BasicUsageEnvironment0继承自UsageEnvironment,实现了其中的纯虚函数。
BasicUsageEnvironment继承自BasicUsageEnvironment0,主要定义了一个静态的createNew()函数,用于类的实例化。继承关系如下:
2、TaskScheduler
TaskScheduler是整个程序的任务调度器,通过doEventLoop()函数实现程序的循环结构,在这里进行任务的调度,在taskScheduler中一共有三种类型的任务,sockethandler、eventhandler、delaytask。在TaskScheduler种主要定义了这三种任务的添加、删除与执行的机制,具体的实现需要子类去做。
BasicTaskSchedule0对TaskScheduler中的方法进行了初步实现,例如在doEventLoop()中实现了大循环while(1)
,同时又添加了一个虚函数SingleStep(),在这里将实现具体的事件执行步骤。
BasicTaskScheduler继承自BasicTaskScheduler0,添加了createNew()的静态方法用于实例化,实现了singleStep(),同时添加了一些对socketHandler任务的操作。在singleStep中就是对上面的三个任务进行处理,1.处理一个socketHandlers任务;2.处理一个eventHandler任务;3.处理一个delayTask任务。
- socketHandlers,这个任务用于处理socket的数据接受与发送,是整个程序中最主要的一个任务,因为在流媒体服务器中主要工作就是数据的发送与接受
- eventHandler,这个任务暂时还不知道是用来做什么的,在BasicTaskScheduler0中对进行的添加、触发等操作做了实现,但是都没有被其他地方调用
- delayTask,这个任务可以用于轮询,比如判断一个任务是否已完成,则将判断的函数加入延时,不断调用自身进行询问。
turnOnBackgroundReadHandling和turnOffBackgroundReadHandling分别控制让socket可读或不可读,里面是调用setBackgroundHandling实现的。在BasicTaskScheduler中对setBackgroundHandling做了具体的实现,会将该socket加入fHandler的队列或从中移除。
3、RTSPServer
RTSPServer负责管理具体的会话内容,包括ServerMediaSession、ServerMediaSubSession。
其中用HashTable来存储这些内容:
fServerMediaSession存储ServerMediaSession;
fClientConnections存储RTSPClientConnection;
fClientSessions存储RTSPClientSession;
还保存有用于连接的socket:fRTSPServerSocket,端口fRTSPServerPort;
方法:
addMediaSession,会先查找记录里是否存在相同名称的ServerMediaSession,删除后再添加;
closeAllClientSessionsForServerMediaSession,将指定ServerMediaSession下的所有RTSPCLientSession删除;
createNew,静态方法,初始化RTSPServer,其中会根据port创建一个socket,初始化数据存储的HashTable,然后将socket加入socket Handlers进入大循环,等待客户端的连接;
createNewClientConnection,创建RTSPClientConnection,会将自身传入变为fOurServer,还有serverSocket监听创建好的clientSocket,clientPort,这个方法就是在serverSocket监听的有客户端连接的时候进行创建的;之后将该客户socket放进大循环,读取请求
createNewClientSession,创建clientSession,在从clientConnection接到SETUP消息时使用此方法创建ClientSession,用于接下来的请求SETUP、PLAY;
deletServerMediaSession,将记录里面的指定ServerMediaSession删除;
incomingRTSPConnecionHandler,用于serverSocket大循环的回调,也就是说监听到客户端连接了,然后创建RTSPClientConnection;
lookupByName,只是用来看该RTSPServer是否已创建;
lookupServerMediaSession,从记录里查找是否存在;
lookupURLPrefix只是用来得到客户的IP地址的。。。
RTSPServerSupportingHTTPStream添加了对HTTP连接的支持,可以监听HTTP的连接请求;
DynamicRTSPServer对RTSPServer的lookupServerMediaSession进行了覆写,改变了查找机制,原来查找不到会返回空,而这里则会主动创建一个。该函数首先会在程序目录下寻找是否有对应的文件,这也就说明了为什么liveMediaServer规定文件一定要放在同一目录下了。
该类中还定义了一个全局方法createNewSMS,会根据文件名的后缀创建对应的***ServerMediaSubSession,并添加到相应的ServerMediaSession记录里。
- 流媒体Live555学习(一)
- 流媒体Live555学习(一)
- 流媒体Live555学习(二)
- 流媒体Live555学习(三)
- 流媒体Live555学习(二)
- 流媒体Live555学习(三)
- 【流媒体学习】live555学习(一):live555—VS2010 /VS2013 下live555编译、使用及测试
- 流媒体学习(一)
- 流媒体学习笔记1(live555+vs2010编译)
- 流媒体学习笔记2(live555中的Session)
- 流媒体学习笔记3(live555的source-sink)
- 【流媒体学习】live555学习(二):基础类
- Live555学习笔记(一)—— live555概述
- Red5 流媒体 学习(一)
- 流媒体学习一(RTP)
- 流媒体学习笔记(一)
- 学习live555的点点滴滴(一)
- Live555学习(一)--编译、安装、运行
- C/C++经典排序算法
- linux编程实例
- hdu 3065 史上最裸 AC 自动机 第三弹
- 指定Toast显示时长
- 字典序求全排列的下一种情况
- 流媒体Live555学习(一)
- linux编程实例1
- 友元与类的提前编译
- Android HAL实例解析
- jsp读取XML
- C语言中的选择判断语句
- linux shell编程2
- 学习 Box2D 个人笔记(五)debugDraw
- 84