利用它我們只要短短幾行程式碼即可建立自己的串流伺服器。
範例程式碼如下:
#include <liveMedia.hh>
#include <BasicUsageEnvironment.hh>
static void announceStream(RTSPServer* rtspServer, ServerMediaSession* sms,
char const* streamName, char const* inputFileName);
int main(int argc, char** argv)
{
UsageEnvironment* env;
TaskScheduler* scheduler = BasicTaskScheduler::createNew();
env = BasicUsageEnvironment::createNew(*scheduler);
// 1. Create the RTSP server:
RTSPServer* rtspServer = RTSPServer::createNew(*env, 8554, NULL);
if (rtspServer == NULL) {
*env << "Failed to create RTSP server: " << env->getResultMsg() << "\n";
exit(1);
}
// 2. Add a H.264 video elementary stream to RTSP server
{
char const* streamName = "h264";
char const* inputFileName = "test.h264";
ServerMediaSession* sms = ServerMediaSession::createNew(*env,
streamName,
streamName,
"H.264 video");
sms->addSubsession(H264VideoFileServerMediaSubsession::createNew(*env,
inputFileName,
False));
rtspServer->addServerMediaSession(sms);
announceStream(rtspServer, sms, streamName, inputFileName);
}
// 3. Kick-off the server
env->taskScheduler().doEventLoop(); /* Never return */
/* Unreachable */
return 0;
}
static void announceStream(RTSPServer* rtspServer, ServerMediaSession* sms,
char const* streamName, char const* inputFileName)
{
char* url = rtspServer->rtspURL(sms);
UsageEnvironment& env = rtspServer->envir();
env << "\n\"" << streamName << "\" stream, from the file \""
<< inputFileName << "\"\n";
env << "Play this stream using the URL \"" << url << "\"\n";
delete[] url;
}
由範例可知,live555的使用方式十分簡單易懂,函式庫編譯連結後的執行檔也非常小巧,比較遺憾的是因為它目前沒有提供與外部編碼器(encoder)連結的功能以致無法擷取即時影音做即時串流,僅能播放預錄的影音檔,這部份的功能有賴函式庫使用者者自行撰寫。這是與GStreamer提供的RTSP server相比較為美中不足的地方,但是對一般使用者來說應該綽綽有餘了。
No comments:
Post a Comment