Hello Ross, 

I have found an issue, one of subsessions was not added to RTSP server so it 
was not freed on RTSP server close and that's why this UsageEnvironment reclaim 
failed.

Best regards,
-----------------------------------------
Victor Vitkovskiy
Senior software developer
mailto: victor.vitkovs...@mirasys.com
www.mirasys.com


-----Original Message-----
From: Victor Vitkovskiy 
Sent: Friday, 28 January 2022 11:16
To: LIVE555 Streaming Media - development & use <live-de...@us.live555.com>
Subject: RE: [Live-devel] [Mirasys] Live555 RTSP server questions

Hello Ross, 

Could you please advise me how to shutdown RTSP server completely and free all 
resources used by it? 

Code example:
////////////////////
RTSPServer* rtspServer = MirasysRTSPServer::createNew(*env, port, authDB);
    if (rtspServer == NULL) {
        *env << "Failed to create RTSP server: " << env->getResultMsg() << "\n";
        exit(1);
    }

// Adding server sessions and subsessions

env->taskScheduler().doEventLoop(&stop); // does not return

// close RTSP server
Medium::close(rtspServer);

// free environment & scheduler
auto res = env->reclaim();
delete scheduler;
////////////////////

But env->reclaim() call returns False, because of this:
Boolean UsageEnvironment::reclaim() {
  // We delete ourselves only if we have no remainining state:
  if (liveMediaPriv == NULL && groupsockPriv == NULL) {
    delete this;
    return True;
  }
  return False;
}

liveMediaPriv is not null, so it is not removed. 
Could you please advise me how to make this liveMediaPriv null? What should be 
called to do this? 

Best regards,
-----------------------------------------
Victor Vitkovskiy
Senior software developer
mailto: victor.vitkovs...@mirasys.com
www.mirasys.com


-----Original Message-----
From: live-devel <live-devel-boun...@us.live555.com> On Behalf Of Ross Finlayson
Sent: Wednesday, 26 January 2022 19:19
To: LIVE555 Streaming Media - development & use <live-de...@us.live555.com>
Subject: Re: [Live-devel] [Mirasys] Live555 RTSP server questions

EXTERNAL


> On Jan 27, 2022, at 2:37 AM, Victor Vitkovskiy 
> <victor.vitkovs...@mirasys.com> wrote:
>
> Hello Ross,
>
> So, if I understood correctly, if OutPacketBuffer::maxSize is smaller then 
> frame, then all that is more then this value will be lost in any way?

Yes.


>  I thought that if frame is bigger then buffer then I need to pass this 
> buffer part by part in each doGetNextFrame call using fNumTruncatedBytes 
> value to define how much data is still remained to send.

No.  “doGetNextFrame()” must deliver (or attempt to deliver) only one frame[*] 
at a time. But you can’t deliver a frame larger than “fMaxSize”.

[* ]Strictly speaking, in the case of H.264/H.265 video, this is one "NAL unit” 
at a time.  If you have a very large H.264/H.265 frame, it is best if you can 
configure your encoder to break it up into multiple ’slice’ NAL units, and 
deliver one of those at a time.


> But according to your last email this fNumTruncatedBytes parameter is useless 
> if upper level components just lose all data that is bigger than 
> OutPacketBuffer::maxSize.

“fNumTruncatedBytes” is not completely ‘useless’; it gives information to the 
downstream object about how much data was lost.  But this data is just that - 
lost.


Ross Finlayson
Live Networks, Inc.
http://www.live555.com/


_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to