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

[live555]live555直播rtsp流

时间:2015-12-23 08:41酷播
使用 ffplay.exe rtsp://www.cuplayer.com:8554/h264ESVideoTest 可以播放test.264的视频

使用 ffplay.exe rtsp://www.cuplayer.com:8554/h264ESVideoTest 可以播放test.264的视频

  1. testOnDemandRTSPServer.cpp 
  2.  
  3. /********** 
  4. This library is free software; you can redistribute it and/or modify it under 
  5. the terms of the GNU Lesser General Public License as published by the 
  6. Free Software Foundation; either version 2.1 of the License, or (at your 
  7. option) any later version. (See <http://www.gnu.org/copyleft/lesser.html>.) 
  8.  
  9. This library is distributed in the hope that it will be useful, but WITHOUT 
  10. ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 
  11. FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for 
  12. more details. 
  13.  
  14. You should have received a copy of the GNU Lesser General Public License 
  15. along with this library; if not, write to the Free Software Foundation, Inc., 
  16. Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA 
  17. **********/ 
  18. // Copyright (c) 1996-2012, Live Networks, Inc.  All rights reserved 
  19. // A test program that demonstrates how to stream - via unicast RTP 
  20. // - various kinds of file on demand, using a built-in RTSP server. 
  21. // main program 
  22. #include "H264LiveVideoServerMediaSubssion.hh" 
  23. #include "H264FramedLiveSource.hh" 
  24. #include "liveMedia.hh" 
  25. #include "BasicUsageEnvironment.hh" 
  26.   
  27. #pragma comment (lib, "Ws2_32.lib")   
  28. #pragma comment (lib, "BasicUsageEnvironment.lib") 
  29. #pragma comment (lib, "groupsock.lib") 
  30. #pragma comment (lib, "liveMedia.lib") 
  31. #pragma comment (lib, "UsageEnvironment.lib") 
  32. UsageEnvironment* env; 
  33.  
  34. // To make the second and subsequent client for each stream reuse the same 
  35. // input stream as the first client (rather than playing the file from the 
  36. // start for each client), change the following "False" to "True": 
  37. Boolean reuseFirstSource = False
  38.  
  39. // To stream *only* MPEG-1 or 2 video "I" frames 
  40. // (e.g., to reduce network bandwidth), 
  41. // change the following "False" to "True": 
  42. Boolean iFramesOnly = False
  43.  
  44. static void announceStream(RTSPServer* rtspServer, ServerMediaSession* sms, 
  45.                char const* streamName, char const* inputFileName); // fwd 
  46.  
  47. static char newMatroskaDemuxWatchVariable; 
  48. static MatroskaFileServerDemux* demux; 
  49. static void onMatroskaDemuxCreation(MatroskaFileServerDemux* newDemux, void* /*clientData*/) { 
  50.   demux = newDemux
  51.   newMatroskaDemuxWatchVariable = 1
  52.  
  53. int main(int argc, char** argv) { 
  54.   // Begin by setting up our usage environment: 
  55.   TaskScheduler* scheduler = BasicTaskScheduler::createNew(); 
  56.   env = BasicUsageEnvironment::createNew(*scheduler); 
  57.  
  58.   UserAuthenticationDatabase* authDB = NULL
  59. #ifdef ACCESS_CONTROL 
  60.   // To implement client access control to the RTSP server, do the following: 
  61.   authDB = new UserAuthenticationDatabase; 
  62.   authDB->addUserRecord("username1", "password1"); // replace these with real strings 
  63.   // Repeat the above with each <username><password> that you wish to allow 
  64.   // access to the server. 
  65. #endif 
  66.  
  67.   // Create the RTSP server: 
  68.   RTSPServer* rtspServer = RTSPServer::createNew(*env, 8554, authDB); 
  69.   if (rtspServer == NULL) { 
  70.     *env << "Failed to create RTSP server: " << env->getResultMsg() << "\n"; 
  71.     exit(1); 
  72.   } 
  73.  
  74.   char const* descriptionString 
  75.     = "Session streamed by \"testOnDemandRTSPServer\""; 
  76.  
  77.   // Set up each of the possible streams that can be served by the 
  78.   // RTSP server.  Each such stream is implemented using a 
  79.   // "ServerMediaSession" object, plus one or more 
  80.   // "ServerMediaSubsession" objects for each audio/video substream. 
  81.  
  82.   
  83.   // A H.264 video elementary stream: 
  84.   { 
  85.     char const* streamName = "h264ESVideoTest"
  86.     char const* inputFileName = "test.264"
  87.     ServerMediaSession* sms 
  88.       = ServerMediaSession::createNew(*env, streamName, streamName, 
  89.                       descriptionString); 
  90.     sms->addSubsession(H264LiveVideoServerMediaSubssion 
  91.                ::createNew(*env, inputFileName, reuseFirstSource));//修改为自己实现的servermedia  H264LiveVideoServerMediaSubssion 
  92.     rtspServer->addServerMediaSession(sms); 
  93.  
  94.     announceStream(rtspServer, sms, streamName, inputFileName); 
  95.   } 
  96.  
  97.  
  98.  
  99.   // Also, attempt to create a HTTP server for RTSP-over-HTTP tunneling. 
  100.   // Try first with the default HTTP port (80), and then with the alternative HTTP 
  101.   // port numbers (8000 and 8080). 
  102.  
  103.   //if (rtspServer->setUpTunnelingOverHTTP(80) || rtspServer->setUpTunnelingOverHTTP(8000) || rtspServer->setUpTunnelingOverHTTP(8080)) { 
  104.   //  *env << "\n(We use port " << rtspServer->httpServerPortNum() << " for optional RTSP-over-HTTP tunneling.)\n"; 
  105.   //} else { 
  106.   //  *env << "\n(RTSP-over-HTTP tunneling is not available.)\n"; 
  107.   //} 
  108.  
  109.   env->taskScheduler().doEventLoop(); // does not return 
  110.  
  111.   return 0; // only to prevent compiler warning 
  112.  
  113. static void announceStream(RTSPServer* rtspServer, ServerMediaSession* sms, 
  114.                char const* streamName, char const* inputFileName) { 
  115.   char* url = rtspServer->rtspURL(sms); 
  116.   UsageEnvironment& env = rtspServer->envir(); 
  117.   env << "\n\"" << streamName << "\" stream, from the file \"" 
  118.       << inputFileName << "\"\n"; 
  119.   env << "Play this stream using the URL \"" << url << "\"\n"; 
  120.   delete[] url; 

使用 ffplay.exe rtsp://www.cuplayer.com:8554/h264ESVideoTest 可以播放test.264的视频.

相关配置:live555的四个库放在lib文件夹下。

库目录:G:\workspace\avs\live555test\live555test\lib

包含目录:G:\workspace\avs\live555test\live555test\BasicUsageEnvironment \include;G:\workspace\avs\live555test\live555test\UsageEnvironment\include;G:\workspace\avs\live555test\live555test\liveMedia\include;G:\workspace\avs\live555test\live555test\groupsock\include

热门文章推荐

请稍候...

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

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