<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=gb2312"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><base href="x-msg://208/"><style><!--
/* Font Definitions */
@font-face
        {font-family:Helvetica;
        panose-1:2 11 6 4 2 2 2 2 2 4;}
@font-face
        {font-family:宋体;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:宋体;
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:新宋体;
        panose-1:2 1 6 9 3 1 1 1 1 1;}
@font-face
        {font-family:"\@宋体";
        panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
        {font-family:"\@新宋体";
        panose-1:2 1 6 9 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:宋体;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.apple-style-span
        {mso-style-name:apple-style-span;}
span.apple-converted-space
        {mso-style-name:apple-converted-space;}
span.EmailStyle19
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=ZH-CN link=blue vlink=purple style='word-wrap: break-word;-webkit-nbsp-mode: space;-webkit-line-break: after-white-space'><div class=WordSection1><p class=MsoNormal style='margin-left:24.0pt;mso-para-margin-left:2.0gd'><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1F497D'>Thanks for your reply. Now, I can play multiple streams concurrently after I take the testRTSPClient program as an example.  But this works OK  when I provide all  URLs  at one time and then call the doEventLoop(). How can I make it work so that I can play another stream after other streams have arlready started but haven’t stoped playing (with one thread control not using threads)?<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span style='font-size:10.0pt'>发件人<span lang=EN-US>:</span></span></b><span lang=EN-US style='font-size:10.0pt'> live-devel-bounces@ns.live555.com [mailto:live-devel-bounces@ns.live555.com] </span><b><span style='font-size:10.0pt'>代表 </span></b><span lang=EN-US style='font-size:10.0pt'>Ross Finlayson<br></span><b><span style='font-size:10.0pt'>发送时间<span lang=EN-US>:</span></span></b><span lang=EN-US style='font-size:10.0pt'> 2011</span><span style='font-size:10.0pt'>年<span lang=EN-US>12</span>月<span lang=EN-US>26</span>日<span lang=EN-US> 13:36<br></span><b>收件人<span lang=EN-US>:</span></b><span lang=EN-US> LIVE555 Streaming Media - development & use<br></span><b>主题<span lang=EN-US>:</span></b><span lang=EN-US> Re: [Live-devel] How to create multiple RTSP clients using threads for live video source playing at same time?<o:p></o:p></span></span></p></div></div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p><div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><p class=MsoNormal style='text-align:justify;text-justify:inter-ideograph'><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri","sans-serif"'>  I want to create a rtsp server that supports multiple live video source playing using threads.  I have created my custom live source, sink and session object and modified MediaSubsession::initiate to handle it. I created multiple rtspclients using threads to use my own session.  The problem is: I can play only one session.</span><span class=apple-converted-space><span lang=EN-US style='font-family:新宋体;color:#018081'> </span></span><span lang=EN-US style='font-size:10.5pt;font-family:"Calibri","sans-serif"'>Do I need to create separate subsessions for each live channel playing using different urlsurfix?  How can I synchronize between these clients?<o:p></o:p></span></p></div></blockquote><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div></div><p class=MsoNormal><span lang=EN-US>Unfortunately I found your question a little confusing.  It wasn't clear to me whether (1) your question was about a RTSP server (How to set up a RTSP server that supports multiple streams?), or whether (2) your question was about RTSP clients (How to create multiple, concurrent RTSP clients?).<o:p></o:p></span></p><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>If your question is (1) (How to set up a RTSP server that supports multiple streams?), then I suggest that you look at the code for the "testOnDemandRTSPServer" for guidance, and also read the FAQ entries that discuss how to have a server that streams from live source(s).  Note, in particular, that each stream (e.g., coming from a specific video+audio source) has its own "ServerMediaSession", with its own name (which gets used in the "rtsp://" URL that will be used to access the stream).  Each particular track within the stream (e.g., audio, video, text) will have its own "ServerMediaSubsession".  Once again, the "testOnDemandRTSPServer" code should make this clearer.<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>If your question is (2) (How to create multiple, concurrent RTSP clients?), then there are several possible ways to do this:<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>- Create multiple processes, each receiving its own "rtsp://" URL.  For example, you can run multiple copies of the "openRTSP" application - which will require no extra programming at all.<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>- Write a single application (i.e., process) that opens/receives multiple concurrent "rtsp://" URLs, using a single thread of control.  See the code for the "testRTSPClient" demo application for guidance on how to do this.<o:p></o:p></span></p></div><div><p class=MsoNormal><span lang=EN-US>- Write a single application (i.e., process) that opens/receives multiple concurrent "rtsp://" URLs, using multiple threads (one thread for each "rtsp://" URL).  This approach is possible, although not recommended.  If you really want to do this, then you need to read and understand the FAQ entry about threads.  (Note, in particular, that each thread *must* use a separate "TaskScheduler" and "UsageEnvironment".)<o:p></o:p></span></p></div><p class=MsoNormal style='margin-bottom:12.0pt'><span lang=EN-US><o:p> </o:p></span></p><div><p class=MsoNormal><span class=apple-style-span><span lang=EN-US style='font-size:13.5pt;font-family:"Helvetica","sans-serif";color:black'>Ross Finlayson</span></span><span lang=EN-US style='font-size:13.5pt;font-family:"Helvetica","sans-serif";color:black'><br><span class=apple-style-span>Live Networks, Inc.</span><br><span class=apple-style-span><a href="http://www.live555.com/">http://www.live555.com/</a></span></span><span lang=EN-US> <o:p></o:p></span></p></div><p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p></div></body></html>