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连接。

  • 相关阅读:
    【声纹识别】 kaldi callhome diarization
    python3 类型提示
    公钥私钥,HTTPS,HTTP通俗讲解
    一图学会MySQL的JOIN
    链表翻转(看图学)
    如何理解 Python 的赋值逻辑
    Python十大排序算法
    Python-functools (reduce,偏函数partial,lru_cache)
    Python-类型注解(3.5引入)
    Python-装饰器
  • 原文地址:https://www.cnblogs.com/ityujian/p/3137109.html
Copyright © 2011-2022 走看看