Live555研究之一mediaServer主循环

mediaServer工程中的live555MediaServer.cpp提供一个main函数,里面创建了一个DynamicRTSPServer对象,DynamicRTSPServer从RTSPServerSupportingHTTPStreaming派生下来,RTSPServerSupportingHTTPStreaming从RTSPServer派生下来,RTSPServerSupportingHTTPStreaming在liveMedia工程里面。Live555里将构造函数声明为protected,从而避免外部直接调用构造函数,提供了静态的createNew()来创建对象,类似于工厂方法。

RTSPServer类内部定义了子类RTSPClientConnection,用于保存TCP客户端连接的状态。RTSPServerSupportingHTTPStreaming提供了基于HTTP协议进行流传输的相关网络操作函数。在Live555里面很少看到加锁的地方,这样是为了避免等待锁,而导致效率低下。handleHTTPCmd_StreamingGET会去RTSPServer的Hashtable里查找会话名,如果找不到会调用RTSPServer::RTSPClientConnection::handleHTTPCmd_notFound()函数,该函数会打印出响应的信息。

在handleHTTPCmd_StreamingGET()函数中处理客户端请求:
获取流参数,定位流,构造响应信息。send响应信息给Client。
ServerMediaSubsession含有一个getStreamSource()函数用于提供流媒体数据源,每次调用
返回一个FramedSource对象指针mediaSource,用于获取帧数据。
若mediaSource不会空,并且fTCPSink为空,将会创建一个TCPStreamSink对象。

一个TCPStreamSink用来表示一个TCP输出流,调用fTCPSink->startPlaying()函数开始播放。
在上述循环结束之后,需要构造播放列表。发送响应信息给Client。
如果已有fPlaylistSource,则需要停止它。再创建一个ByteStreamMemoryBufferSource对象。再调用
fTCPSink->startPlaying,播放Stream。handleHTTPCmd_StreamingGET()是一个virtual函数,基类调用的时候,将会调用到派生类的函数。
RTSPClientConnectionSupportingHTTPStreaming::afterStreaming 用于销毁Client连接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值