//
|
// 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
|
}
|
}
|