live555 實現一個最簡單的RTSP伺服器
阿新 • • 發佈:2019-01-01
用live555中的庫寫了一個最簡單的RTSPServer程式,僅用於學習目的。從下例的程式碼中,可以清析的明白RTSPServer的函式呼叫流程。
[cpp] view
plaincopyprint?
#include <BasicUsageEnvironment.hh>
#include "liveMedia.hh"
static ServerMediaSession* createNewSMS(UsageEnvironment& env, char const* fileName);
int main()
{
TaskScheduler* scheduler;
UsageEnvironment* env ;
RTSPServer* rtspServer;
ServerMediaSession* sms;
//建立任務呼叫器
scheduler = BasicTaskScheduler::createNew();
//建立互動環境
env = BasicUsageEnvironment::createNew(*scheduler);
//建立RTSP伺服器
rtspServer = RTSPServer::createNew(*env,554); //使用554埠
if(rtspServer == NULL)
{
rtspServer = RTSPServer::createNew(*env,8554); //554埠被佔用,就使用8554埠
}
//列印伺服器地址
*env << "Play streams from this server using the URL\n\t"
<< rtspServer->rtspURLPrefix() << "<filename>.\n";
//建立session
sms = createNewSMS(*env, "test.mpg");
rtspServer->addServerMediaSession(sms);
//新增其它檔案對應的session...
//進行事件迴圈
env->taskScheduler().doEventLoop(); // does not return
return 0;
}
static ServerMediaSession* createNewSMS(UsageEnvironment& env, char const* fileName)
{
char const* extension = strrchr(fileName, '.');
ServerMediaSession* sms = NULL;
Boolean reuseSource = False; //不重用source
sms = ServerMediaSession::createNew(env, fileName); //建立一個session
//
//在session中新增subssesion
//
if(strcmp(extension, ".aac") == 0)
{
sms->addSubsession(ADTSAudioFileServerMediaSubsession::createNew(env, fileName, reuseSource));
}
else if(strcmp(extension, ".264") == 0)
{
sms->addSubsession(H264VideoFileServerMediaSubsession::createNew(env, fileName, reuseSource));
}
else if(strcmp(extension, ".mpg") == 0)
{
MPEG1or2FileServerDemux* demux
= MPEG1or2FileServerDemux::createNew(env, fileName, reuseSource);
sms->addSubsession(demux->newVideoServerMediaSubsession());
sms->addSubsession(demux->newAudioServerMediaSubsession());
}
//新增其它媒體格式支援...
return sms;
}
FROM: http://blog.163.com/zsy_19880518/blog/static/18525812720130811024799/