Advertisement
Guest User

Untitled

a guest
Jun 23rd, 2025
20
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.84 KB | Source Code | 0 0
  1.     TaskScheduler* scheduler = BasicTaskScheduler::createNew( );
  2.     if ( scheduler == nullptr ) {
  3.         std::cerr << "Failed to create task scheduler" << std::endl;
  4.         delete v4l2Device;
  5.         return 1;
  6.     }
  7.  
  8.     UsageEnvironment* env = BasicUsageEnvironment::createNew( *scheduler );
  9.     if ( env == nullptr ) {
  10.         std::cerr << "Failed to create usage environment" << std::endl;
  11.         delete scheduler;
  12.         delete v4l2Device;
  13.         return 1;
  14.     }
  15.  
  16.     // Increase buffer size for high-resolution MJPEG
  17.     OutPacketBuffer::maxSize = 1000000;  // 1MB buffer
  18.  
  19.     // Create V4l2MJPEGSource
  20.     V4l2MJPEGSource* videoSource = V4l2MJPEGSource::createNew( *env );
  21.     if ( videoSource == nullptr ) {
  22.         std::cerr << "Failed to create V4l2MJPEGSource" << std::endl;
  23.         env->reclaim( );
  24.         delete scheduler;
  25.         delete v4l2Device;
  26.         return 1;
  27.     }
  28.     videoSource->setDevice( v4l2Device );
  29.  
  30.     // // Start streaming before creating RTSP server
  31.     // if ( !videoSource->start( ) ) {
  32.     //     std::cerr << "Failed to start V4l2Device" << std::endl;
  33.     //     V4l2MJPEGSource::close( videoSource );
  34.     //     env->reclaim( );
  35.     //     delete scheduler;
  36.     //     delete v4l2Device;
  37.     //     return 1;
  38.     // }
  39.  
  40.     // Set up RTSP server with videoSource
  41.     RTSPServer* rtspServer = RTSPServer::createNew( *env, port, NULL );
  42.     if ( rtspServer == nullptr ) {
  43.         std::cerr << "Failed to create RTSP server" << std::endl;
  44.         V4l2MJPEGSource::close( videoSource );
  45.         env->reclaim( );
  46.         delete scheduler;
  47.         delete v4l2Device;
  48.         return 1;
  49.     }
  50.  
  51.     ServerMediaSession* sms = ServerMediaSession::createNew(
  52.         *env, streamUrl.c_str( ), streamUrl.c_str( ), "GRALmarine global shutter camera" );
  53.     if ( sms == nullptr ) {
  54.         std::cerr << "Failed to create server media session" << std::endl;
  55.         Medium::close( rtspServer );
  56.         V4l2MJPEGSource::close( videoSource );
  57.         env->reclaim( );
  58.         delete scheduler;
  59.         delete v4l2Device;
  60.         return 1;
  61.     }
  62.  
  63.     // Create and add subsession
  64.     ServerMediaSubsession* subsession = LiveServerMediaSubsession::createNew( *env );
  65.     if ( subsession == nullptr ) {
  66.         std::cerr << "Failed to create media subsession" << std::endl;
  67.         Medium::close( sms );
  68.         Medium::close( rtspServer );
  69.         V4l2MJPEGSource::close( videoSource );
  70.         env->reclaim( );
  71.         delete scheduler;
  72.         delete v4l2Device;
  73.         return 1;
  74.     }
  75.  
  76.     sms->addSubsession( subsession );
  77.     rtspServer->addServerMediaSession( sms );
  78.  
  79.     std::cout << "RTSP server started on port " << port << std::endl;
  80.     std::cout << "Stream available at rtsp://<ip>:" << port << "/" << streamUrl << std::endl;
  81.  
  82.     // Main event loop
  83.     env->taskScheduler( ).doEventLoop( );
Tags: C++
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement