·您当前的位置:首页 > 技术教程 > live555技术 >

[LIVE555]live555 实现一个最简单的RTSP服务器

时间:2015-04-16 10:25gavinr
用live555中的库写了一个最简单的RTSPServer程序,仅用于学习目的。从下例的代码中,可以清析的明白RTSPServer的函数调用流程。

用live555中的库写了一个最简单的RTSPServer程序,仅用于学习目的。从下例的代码中,可以清析的明白RTSPServer的函数调用流程。

  1. #include <BasicUsageEnvironment.hh>   
  2. #include "liveMedia.hh"   
  3.    
  4.    
  5. static ServerMediaSession* createNewSMS(UsageEnvironment& env, char const* fileName);   
  6.    
  7.    
  8. int main()   
  9. {   
  10.     TaskScheduler* scheduler;   
  11.     UsageEnvironment* env ;   
  12.     RTSPServer* rtspServer;   
  13.     ServerMediaSession* sms;   
  14.     //创建任务调用器   
  15.     scheduler = BasicTaskScheduler::createNew();   
  16.    
  17.    
  18.     //创建交互环境   
  19.     env = BasicUsageEnvironment::createNew(*scheduler);   
  20.    
  21.    
  22.     //创建RTSP服务器   
  23.     rtspServer = RTSPServer::createNew(*env,554);    //使用554端口   
  24.     if(rtspServer == NULL)   
  25.     {   
  26.         rtspServer = RTSPServer::createNew(*env,8554);   //554端口被占用,就使用8554端口   
  27.     }   
  28.    
  29.    
  30.     //打印服务器地址   
  31.     *env << "Play streams from this server using the URL\n\t"   
  32.          << rtspServer->rtspURLPrefix() << "<filename>.\n";   
  33.    
  34.    
  35.     //创建session   
  36.     sms = createNewSMS(*env, "test.mpg");   
  37.     rtspServer->addServerMediaSession(sms);   
  38.    
  39.    
  40.     //添加其它文件对应的session...   
  41.    
  42.    
  43.     //进行事件循环   
  44.     env->taskScheduler().doEventLoop(); // does not return   
  45.    
  46.    
  47.     return 0;   
  48. }   
  49.    
  50.    
  51. static ServerMediaSession* createNewSMS(UsageEnvironment& env, char const* fileName)   
  52. {   
  53.     char const* extension = strrchr(fileName, '.');   
  54.     ServerMediaSession* sms = NULL;   
  55.     Boolean reuseSource = False;    //不重用source   
  56.    
  57.    
  58.     sms = ServerMediaSession::createNew(env, fileName);  //创建一个session   
  59.    
  60.    
  61.     //   
  62.     //在session中添加subssesion   
  63.     //   
  64.     if(strcmp(extension, ".aac") == 0)   
  65.     {   
  66.         sms->addSubsession(ADTSAudioFileServerMediaSubsession::createNew(env, fileName, reuseSource));   
  67.     }   
  68.     else if(strcmp(extension, ".264") == 0)   
  69.     {   
  70.         sms->addSubsession(H264VideoFileServerMediaSubsession::createNew(env, fileName, reuseSource));   
  71.     }   
  72.     else if(strcmp(extension, ".mpg") == 0)   
  73.     {   
  74.         MPEG1or2FileServerDemux* demux   
  75.           = MPEG1or2FileServerDemux::createNew(env, fileName, reuseSource);   
  76.         sms->addSubsession(demux->newVideoServerMediaSubsession());   
  77.         sms->addSubsession(demux->newAudioServerMediaSubsession());   
  78.     }   
  79.    
  80.    
  81.     //添加其它媒体格式支持...   
  82.    
  83.    
  84.     return sms;   
  85. }   

 

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器