<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<style>
<!--
@font-face
        {font-family:Calibri}
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif"}
a:link, span.MsoHyperlink
        {color:blue;
        text-decoration:underline}
a:visited, span.MsoHyperlinkFollowed
        {color:purple;
        text-decoration:underline}
span.EmailStyle17
        {font-family:"Calibri","sans-serif";
        color:windowtext}
.MsoChpDefault
        {font-family:"Calibri","sans-serif"}
@page WordSection1
        {margin:1.0in 1.0in 1.0in 1.0in}
div.WordSection1
        {}
-->
</style>
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hello,</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">I sincerely apologize if the following questions have been asked before here. If these have been asked and answered, I will be very grateful if someone can point me to appropriate discussion thread(s).</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">We are trying to build a system that acts like multi-channel encoder – it accepts RTSP streams from a number of camera, and, streams out the same to another network for viewing. The ProxyServerMediaSession class meets our requirement appropriately,
 and we have written our own application looking at the example code given.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">This is how we instantiate the server, when we start our software or when a camera is added:</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"; color:blue">static</span><span style="font-size:10.0pt; font-family:"Courier New""> ProxyServerMediaSession* sms [MAX_STREAMS];</span></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">   
<span style="color:blue">for</span> (sidx = 0; sidx < MAX_STREAMS; sidx ++)</span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">    {</span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">       
<span style="color:green">...</span></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New""> </span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">       
<span style="color:green">/* Get Stream Name */</span></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">        sprintf (streamName,
<span style="color:#A31515">"Stream-%d"</span>, (sidx+1));</span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New""> </span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">       
<span style="color:green">/* Create Server Media Session */</span></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">        sms[sidx] = ProxyServerMediaSession::createNew</span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">                    (</span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">                        *env,</span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">                        rtspServer,</span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">                        streamer_url[sidx],</span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">                        streamName</span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">                    );</span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New""> </span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">       
<span style="color:green">/* Add Server Media Session to RTSP Server */</span></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">        rtspServer->addServerMediaSession (sms[sidx]);</span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New""> </span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">       
<span style="color:green">...</span></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">    }</span></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Now, when we need to close down the Server, this is what we do:</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">   
<span style="color:blue">for</span> (sidx = 0; sidx < MAX_STREAMS; sidx ++)</span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">    {</span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">       
<span style="color:green">...</span></span></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">       
<span style="color:green">/* Clean up */</span></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">        rtspServer->deleteServerMediaSession (sms[sidx]);</span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New""> </span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">       
<span style="color:green">...</span></span></p>
<p class="MsoNormal" style="text-autospace:none"><span style="font-size:10.0pt; font-family:"Courier New"">    }</span></p>
<p class="MsoNormal"> </p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Question#1: When we close our server, we do not see the RTCP BYE being sent to the downstream clients viewing the streams from the server. Is this an issue with ‘<span style="font-size:10.0pt; font-family:"Courier New"">deleteServerMediaSession’</span>?
 Or, should we be calling something else, or, do more here? </p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">It appears the system waits for the clients to timeout and close the connections themselves. And when client closes the connection, after waiting an amount of time wanting data to come, some cleanups are triggered on the server side. But
 ideally, we would like to implement a closure method in which client connections are duly closed on user action on the server (server shutdown or camera deletion).</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Question#2: We have a requirement to make the Server a multicast UDP server. From looking at the code, it appears ProxyServerMediaSession makes use of OnDemandServerMediaSubsession … which is unicast. Is there any plan to support multicasting?
 If no, could someone guide us on steps needed to get multicast supported?</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Thank you very much in advance.</p>
<p class="MsoNormal"> </p>
<p class="MsoNormal">Best regards,</p>
<p class="MsoNormal">Subhankar.</p>
<p class="MsoNormal"> </p>
</div>
<br>
<hr>
<font face="Arial" color="Gray" size="1"><br>
http://www.mindtree.com/email/disclaimer.html<br>
</font>
</body>
</html>