流媒体Live555学习(一)

来源:互联网 发布:上海快3遗漏数据查询 编辑:程序博客网 时间:2024/04/30 10:12

1UsageEnvironment

 

UsageEnvironment代表了整个程序的运行环境,其中保存了一些全局变量,定义了一些输出函数(纯虚函数)。从这些输出函数就可以看出该类主要用于充当程序的全局上下文,并提供打印信息的输出。

BasicUsageEnvironment0继承自UsageEnvironment,实现了其中的纯虚函数。

BasicUsageEnvironment继承自BasicUsageEnvironment0,主要定义了一个静态的createNew()函数,用于类的实例化。继承关系如下:


2TaskScheduler

 

TaskScheduler是整个程序的任务调度器,通过doEventLoop()函数实现程序的循环结构,在这里进行任务的调度,在taskScheduler中一共有三种类型的任务,sockethandlereventhandlerdelaytask。在TaskScheduler种主要定义了这三种任务的添加、删除与执行的机制,具体的实现需要子类去做。

BasicTaskSchedule0TaskScheduler中的方法进行了初步实现,例如在doEventLoop()中实现了大循环while(1)

,同时又添加了一个虚函数SingleStep(),在这里将实现具体的事件执行步骤。

BasicTaskScheduler继承自BasicTaskScheduler0,添加了createNew()的静态方法用于实例化,实现了singleStep(),同时添加了一些对socketHandler任务的操作。在singleStep中就是对上面的三个任务进行处理,1.处理一个socketHandlers任务;2.处理一个eventHandler任务;3.处理一个delayTask任务。

 

  • socketHandlers,这个任务用于处理socket的数据接受与发送,是整个程序中最主要的一个任务,因为在流媒体服务器中主要工作就是数据的发送与接受
  • eventHandler,这个任务暂时还不知道是用来做什么的,在BasicTaskScheduler0中对进行的添加、触发等操作做了实现,但是都没有被其他地方调用
  • delayTask,这个任务可以用于轮询,比如判断一个任务是否已完成,则将判断的函数加入延时,不断调用自身进行询问。

 


turnOnBackgroundReadHandlingturnOffBackgroundReadHandling分别控制让socket可读或不可读,里面是调用setBackgroundHandling实现的。在BasicTaskScheduler中对setBackgroundHandling做了具体的实现,会将该socket加入fHandler的队列或从中移除。

 

3RTSPServer

RTSPServer负责管理具体的会话内容,包括ServerMediaSessionServerMediaSubSession

其中用HashTable来存储这些内容:

fServerMediaSession存储ServerMediaSession

fClientConnections存储RTSPClientConnection;

fClientSessions存储RTSPClientSession

还保存有用于连接的socketfRTSPServerSocket,端口fRTSPServerPort

方法:

addMediaSession,会先查找记录里是否存在相同名称的ServerMediaSession,删除后再添加;

closeAllClientSessionsForServerMediaSession,将指定ServerMediaSession下的所有RTSPCLientSession删除;

createNew,静态方法,初始化RTSPServer,其中会根据port创建一个socket,初始化数据存储的HashTable,然后将socket加入socket Handlers进入大循环,等待客户端的连接;

createNewClientConnection,创建RTSPClientConnection,会将自身传入变为fOurServer,还有serverSocket监听创建好的clientSocketclientPort,这个方法就是在serverSocket监听的有客户端连接的时候进行创建的;之后将该客户socket放进大循环,读取请求

createNewClientSession,创建clientSession,在从clientConnection接到SETUP消息时使用此方法创建ClientSession,用于接下来的请求SETUPPLAY

deletServerMediaSession,将记录里面的指定ServerMediaSession删除;

incomingRTSPConnecionHandler,用于serverSocket大循环的回调,也就是说监听到客户端连接了,然后创建RTSPClientConnection

lookupByName,只是用来看该RTSPServer是否已创建;

lookupServerMediaSession,从记录里查找是否存在;

lookupURLPrefix只是用来得到客户的IP地址的。。。

 

RTSPServerSupportingHTTPStream添加了对HTTP连接的支持,可以监听HTTP的连接请求;

 

DynamicRTSPServerRTSPServerlookupServerMediaSession进行了覆写,改变了查找机制,原来查找不到会返回空,而这里则会主动创建一个。该函数首先会在程序目录下寻找是否有对应的文件,这也就说明了为什么liveMediaServer规定文件一定要放在同一目录下了。

该类中还定义了一个全局方法createNewSMS,会根据文件名的后缀创建对应的***ServerMediaSubSession,并添加到相应的ServerMediaSession记录里。


 

原创粉丝点击