// // LiveRTSPServer.cpp // FFmpegRTSPServer // // Created by Mina Saad on 9/22/15. // Copyright (c) 2015 Mina Saad. All rights reserved. // #include "../logger.h" #include "LiveRTSPServer.h" namespace MESAI { LiveRTSPServer::LiveRTSPServer( IEncoder * a_Encoder, int port, int httpPort ) : env(nullptr), framedSource(nullptr), m_Encoder (a_Encoder), portNumber(port), httpTunnelingPort(httpPort) { quit = 0; } LiveRTSPServer::~LiveRTSPServer() { } void LiveRTSPServer::init() { TaskScheduler* scheduler = BasicTaskScheduler::createNew(); env = BasicUsageEnvironment::createNew(*scheduler); } void LiveRTSPServer::run() { if (env == nullptr) init(); char RTSP_Address[1024]; RTSP_Address[0]=0x00; UserAuthenticationDatabase* authDB = NULL; // if (m_Enable_Pass){ // authDB = new UserAuthenticationDatabase; // authDB->addUserRecord(UserN, PassW); // } OutPacketBuffer::maxSize = 2000000; RTSPServer* rtspServer = RTSPServer::createNew(*env, portNumber, authDB); if (rtspServer == NULL) { LOG_ERROR <<"LIVE555: Failed to create RTSP server: " << env->getResultMsg() << LOG_ENDL; } else { if(httpTunnelingPort) { rtspServer->setUpTunnelingOverHTTP(httpTunnelingPort); } char const* descriptionString = "MESAI Streaming Session"; if (framedSource == nullptr) framedSource = FFmpegH264Source::createNew(*env,m_Encoder); StreamReplicator * inputDevice = StreamReplicator::createNew(*env, framedSource, false); ServerMediaSession* sms = ServerMediaSession::createNew(*env, RTSP_Address, RTSP_Address, descriptionString); sms->addSubsession(MESAI::LiveServerMediaSubsession::createNew(*env, inputDevice)); rtspServer->addServerMediaSession(sms); char* url = rtspServer->rtspURL(sms); LOG_INFO << "Play this stream using the URL " << url << LOG_ENDL; delete [] url; //signal(SIGNIT,sighandler); env->taskScheduler().doEventLoop(&quit); // does not return Medium::close(rtspServer); Medium::close(inputDevice); } env->reclaim(); //delete scheduler; // #todo } }