Live555学习之Socket事件处理

本文介绍如何利用Live555库创建并初始化一个RTSP服务器,重点在于设置端口号为554,并将认证数据库传递给服务器。
摘要由CSDN通过智能技术生成

live555流媒体服务器初始化

  1. RTSPServer* rtspServer;
  2. portNumBits rtspServerPortNum = 554;
  3. //创建rtsp服务器,设置端口号和传入环境
  4. rtspServer = DynamicRTSPServer::createNew(*env, rtspServerPortNum, authDB);

  • DynamicRTSPServer* DynamicRTSPServer::createNew(UsageEnvironment& env, Port ourPort,UserAuthenticationDatabase* authDatabase, unsigned reclamationTestSeconds)
  • {
  •   //创建服务端socket
  •   int ourSocket = setUpOurSocket(env, ourPort);
  •   //
  •   if (ourSocket == -1) return NULL;
  •   //
  •   return new DynamicRTSPServer(env, ourSocket, ourPort, authDatabase,
  •   reclamationTestSeconds);
  •  }


    1. DynamicRTSPServer::DynamicRTSPServer(UsageEnvironment& env, int ourSocket,
    2. Port ourPort,
    3.   UserAuthenticationDatabase* authDatabase, unsigned reclamationTestSeconds)
    4. : RTSPServerSupportingHTTPStreaming(env, ourSocket, ourPort, authDatabase,
    5.   reclamationTestSeconds);



                  

    1. RTSPServerSupportingHTTPStreaming
    2. ::RTSPServerSupportingHTTPStreaming(UsageEnvironment& env, int ourSocket, Port
    3.   rtspPort,
    4. UserAuthenticationDatabase* authDatabase, unsigned reclamationTestSeconds)
    5. : RTSPServer(env, ourSocket, rtspPort, authDatabase, reclamationTestSeconds) {
    6. }

         

                RTSPServer::RTSPServer(UsageEnvironment& env,int ourSocket, Port ourPort,

    1. UserAuthenticationDatabase* authDatabase,
    2. unsigned reclamationSeconds)
    3.    : GenericMediaServer(env, ourSocket, ourPort, reclamationSeconds),
    4.     fHTTPServerSocket(-1), fHTTPServerPort(0),
    5.     fClientConnectionsForHTTPTunneling(NULL), // will get created if needed
    6.     fTCPStreamingDatabase(HashTable::create(ONE_WORD_HASH_KEYS)),
    7.     fPendingRegisterRequests(HashTable::create(ONE_WORD_HASH_KEYS)),
    8.     fRegisterRequestCounter(0),
    9.     fAuthDB(authDatabase), fAllowStreamingRTPOverTCP(True) {
    10.     }


            

    1. GenericMediaServer
    2. ::GenericMediaServer(UsageEnvironment& env, int ourSocket, Port ourPort,
    3. : Medium(env),

    4. fServerSocket(ourSocket),fServerPort(ourPort),fReclamationSeconds(reclamationSeconds),
    5. fServerMediaSessions(HashTable::create(STRING_HASH_KEYS)),
    6. fClientConnections(HashTable::create(ONE_WORD_HASH_KEYS)),
    7. fClientSessions(HashTable::create(STRING_HASH_KEYS))
    8.  {
    9. ignoreSigPipeOnSocket(fServerSocket); // so that clients on the same host that are 

    10. env.taskScheduler().turnOnBackgroundReadHandling(fServerSocket,
    11. incomingConnectionHandler, this);
    12. }

          

             

    1. void BasicTaskScheduler
        ::setBackgroundHandling(int socketNum, int conditionSet, BackgroundHandlerProc* handlerProc, void* clientData) {
        if (socketNum < 0) return;
      #if !defined(__WIN32__) && !defined(_WIN32) && defined(FD_SETSIZE)
        if (socketNum >= (int)(FD_SETSIZE)) return;
      #endif
        FD_CLR((unsigned)socketNum, &fReadSet);
        FD_CLR((unsigned)socketNum, &fWriteSet);
        FD_CLR((unsigned)socketNum, &fExceptionSet);
        if (conditionSet == 0) {
          fHandlers->clearHandler(socketNum);
          if (socketNum+1 == fMaxNumSockets) {
            --fMaxNumSockets;
          }
        } else {
    1.     //将server端接受连接的socket加入fHandlers链表,并绑定处理函数incomingConnectionHandler
          fHandlers->assignHandler(socketNum, conditionSet, handlerProc, clientData);
          if (socketNum+1 > fMaxNumSockets) {
            fMaxNumSockets = socketNum+1;
          }
          if (conditionSet&SOCKET_READABLE) FD_SET((unsigned)socketNum, &fReadSet);
          if (conditionSet&SOCKET_WRITABLE) FD_SET((unsigned)socketNum, &fWriteSet);
          if (conditionSet&SOCKET_EXCEPTION) FD_SET((unsigned)socketNum, &fExceptionSet);
        }
      }

        
    1. void GenericMediaServer::incomingConnectionHandler(void* instance, int /*mask*/) {
    2.  GenericMediaServer* server = (GenericMediaServer*)instance;
    3. //处理连接请求的 
    4. server->incomingConnectionHandler();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值