zoukankan      html  css  js  c++  java
  • 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连接。

  • 相关阅读:
    Invoice Helper
    Product Helper
    Order Helper
    Case Helper
    Quote Helper
    C# 工厂模式示例
    若今生长剑浣花,生死无涯
    古代美到窒息的谎言
    C#解决微信支付Exception has been thrown by the target of an invocation(调用的目标发生了异常)的问题
    文能提笔控萝莉,转载自网上
  • 原文地址:https://www.cnblogs.com/ityujian/p/3137109.html
Copyright © 2011-2022 走看看