<div dir="ltr"><div><br>Hello Sir,<br><br>Here is mine setup,i have 3 machines,.<br>Machine 1 is for streamer 1 and machine 2 is for streamer 2 and machine 3 is for proxy server.<br>i mine project there is some handshaking done between streamer and server machine so that server came to know which streamer is active.<br>
When the client wishes to see the stream from any of the streamer it send the start stream request to the available streamer and <br>on the streamer the code for "testMPEG2TransportStreamer" executes with "#define IMPLEMENT_RTSP_SERVER 1" as un-commented i mean the rtsp server is also created<br>
on the streamer.When there is stop stream the streaming is stopped with the rtsp server also destroyed using medium::close().<br><br>i have created the rtsp server (in proxy server case)only once and variables that i have taken global are:-<br>
int Current_Streamer = 0;<br>int http_port;<br>ServerMediaSession* sms[50];<br>char StreamName[50][50];<br>CString MulticastIp[50];<br>int StreamerPort[50];<br>int taskScheduler = 0,tunneling = 0;            //call env->taskScheduler().doEventLoop(); forfirst time only.<br>
char const* descriptionString={"Session streamed by \"testOnDemandRTSPServer\""};<br>RTSPServer* rtspServer;<br>char* url[50];<br>Boolean reuseFirstSource = False;<br>Boolean iFramesOnly = False;<br>UsageEnvironment* env;<br>
TaskScheduler* scheduler;<br>UserAuthenticationDatabase* authDB;<br>char* username = NULL;<br><br>char* password = NULL;<br>On start stream request in server i am creating thread which has the following code<br>DWORD WINAPI START_STREAM_Thread()<br>
{<br>//this is address for the streamer for which start stream is given,this address we get by implementing rtsp server in the streamer<br>     char const* inputAddressStr = MulticastIp[Current_Streamer];<br>//port on which streamer is streaming<br>
    portNumBits const inputPortNum = StreamerPort[Current_Streamer];<br>    CString StreamURL ="rtsp://";<br>    StreamURL +=inputAddressStr;<br>    int verbosityLevel = 2;<br>    <br>                 Boolean streamRTPOverTCP = False;<br>
    portNumBits tunnelOverHTTPPortNum = inputPortNum     <br>char const* proxiedStreamURL = StreamURL;<br>char const* streamName= StreamName[Current_Streamer];<br>   <br>sms[Current_Streamer]<br>      = ProxyServerMediaSession::createNew(*env, rtspServer,<br>
 proxiedStreamURL, streamName,<br>username, password, tunnelOverHTTPPortNum, verbosityLevel);<br>     <br> <br>rtspServer->addServerMediaSession(sms[Current_Streamer]);<br>url[Current_Streamer] = rtspServer->rtspURL(sms[Current_Streamer]);<br>
delete[] url[Current_Streamer];<br>taskScheduler++;<br>if(taskScheduler == 1)        //call env->taskScheduler().doEventLoop(); for first time only.<br>    env->taskScheduler().doEventLoop(); // does not return<br>}<br>
and on stop stream i am doing this:-<br><br>    rtspServer->deleteServerMediaSession(sms[Current_Streamer]);<br>    Medium::close(sms[Current_Streamer]);<br>    sms[Current_Streamer]=NULL;<br><br><br>Now the problem is :-<br>
client1 receives the stream from the streamer 1 and client 2 receives the stream from streamer2.<br>It doesn't matter how many times the client 2 send the start and stop stream to streamer 2,client 1 continues to receive the stream from streamer 1<br>
but if client 1 send the stop stream,the client 2 also cannot receive the stream from the streamer 2,i think the proxy server closes all the socket. <br>Current_Streamer variable maintain for which streamer the request has been sent<br>
  <br></div>Thanks<br></div>