<div dir="ltr">Sorry if this is a double-post, as I think I sent the previous email to the wrong list. <br><br><span style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">Ross, </span><br style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><br style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><span style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">>From a previous conversation we had, you mentioned it was possible, and easy, to have "full-duplex" mode, in that RTPSink and RTPSource share a Groupsock and therefore share a TCP/IP socket. I'm looking to do this and need a bit more direction. </span><br style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><br style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><span style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">Ultimately the goal is to have one "server" which resides in a room and provides video + two-way audio to a monitoring station. If the monitoring station wishes to have a conversation with the room, then it can do so using the two-way audio. To simply everything we figured it'd be easiest to just have the two-way audio over the same socket.</span><br style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><br style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><span style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">The problem is I'm still pretty green and so I'm trying to write something simple at first and build my way up. I sub-classed MultiFramedRTPSource and made my own streamer class (I'm trying to just write something which can receive the L16 audio my server is sending).  </span><br style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><br style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px"><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">class WaveFormDataStreamer : public MultiFramedRTPSource</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">{</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">public:</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">    static WaveFormDataStreamer* createNew(UsageEnvironment& env, Groupsock* RTPgs,</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">        unsigned char rtpPayloadFormat = 14,</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">        unsigned rtpTimestampFrequency = 90000); </div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">protected:</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">    virtual ~WaveFormDataStreamer(); </div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">private:</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">    WaveFormDataStreamer(UsageEnvironment& env, Groupsock* RTPgs,</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">        unsigned char rtpPayloadFormat,</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">        unsigned int rtpTimestampFrequence); </div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">    virtual char const* MIMEtype() const;</div><div style="color:rgb(33,33,33);font-family:"helvetica neue",helvetica,arial,sans-serif;font-size:13px">};<br><br>I then am trying to use that to connect to my RTSP server (which is currenly one way audio only): <br><br><div>    TaskScheduler* scheduler = BasicTaskScheduler::createNew(); </div><div>    UsageEnvironment* environment = BasicUsageEnvironment::createNew(*scheduler); </div><div><br></div><div>    unsigned int rtpPortNum = 8554; </div><div>    unsigned int rtcpPortNum = rtpPortNum + 1; </div><div>    char* ipAddress = "172.17.5.156"; </div><div><br></div><div>    struct in_addr address; </div><div>    address.S_un.S_addr = our_inet_addr(ipAddress); </div><div>    const Port rtpPort(rtpPortNum); </div><div>    const Port rtcpPort(rtcpPortNum); </div><div><br></div><div>    Groupsock rtpGroupSock(*environment, address, rtpPort, 1);</div><div>    Groupsock rtcpGroupSock(*environment, address, rtcpPort, 1); </div><div><br></div><div>    RTPSource* rtpSource = WaveFormDataStreamer::createNew(*environment, &rtpGroupSock);</div><div><br></div><div>    const unsigned maxCNAMElen = 100;</div><div>    unsigned char CNAME[maxCNAMElen + 1];</div><div>    gethostname((char*)CNAME, maxCNAMElen);</div><div>    CNAME[maxCNAMElen] = '\0'; // just in case</div><div><br></div><div>    RTCPInstance* rtcpInstance = </div><div>        RTCPInstance::createNew(*environment, &rtcpGroupSock, 160, CNAME, NULL, rtpSource);</div><div><br></div><div>    *environment << "Beginning receiving multicast stream...\n";</div><div><br></div><div>    FileSink* sink = FileSink::createNew(*environment, "c:/users/brush/desktop/test.dat"); </div><div><br></div><div>    sink->startPlaying(*rtpSource, afterPlaying, NULL);</div><div><br></div><div>    environment->taskScheduler().doEventLoop(); // does not return<br><br>The problem is that I think what I need is an RTSPClient, not an RTPSource, because I'm trying to access my RTSP server and need a stream name (which in this case is "feynman"). Right? <br><br>So I put together a hierarchy diagram of the classes that I'm interested in to get a better understanding (<a href="https://docs.google.com/drawings/d/1jRJ9-BeEC9UqCGkl_gAk-av_ahP04S7sgW_Q9r4DG74/edit?usp=sharing" target="_blank">https://docs.google.com/drawings/d/1jRJ9-BeEC9UqCGkl_gAk-av_ahP04S7sgW_Q9r4DG74/edit?usp=sharing</a>), but as a result I'm failing to see how I can use RTPSource/Sink in this situation as I'm trying to talk to an RTSP server. <br><br>I will agree I'm possibly missing something very fundamental here (which is why I'm asking). <br><br>Any help/advice would be great. If there's good sample code you want me to research to answer my questions let me know. I looked into playCommon.cpp but, again, that tells me I should use RTSPClient. </div></div></div>