使用live555 streaming media建立RTSP串流伺服器

http://dbmibu.blogspot.com/2011/06/live555-media-serverrtsp.html
Live555 Streaming Media是一套優秀的開放程式碼函示庫,擁有完整的RTSP/RTP實作,除了支援RTP over UDP外,尚支援RTP over RTSP以及RTP/RTSP over HTTP,可用於傳輸多種主流的影音壓縮格式如:H.264、MPEG4、MP3....等。知名的播放軟體VLC的串流功能就是基於此函式庫開發。
利用它我們只要短短幾行程式碼即可建立自己的串流伺服器。

範例程式碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#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相比較為美中不足的地方,但是對一般使用者來說應該綽綽有餘了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值