<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=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:Cambria;
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
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;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Calibri","sans-serif";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Cambria","serif";
        color:windowtext;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri","sans-serif";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
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="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Hi Guys <o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">I have a pipeline situation very similar to the one of Stefan, in details I have below pipeline
<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="color:#1F497D">  gst_rtsp_media_factory_set_launch (factory, "( "<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="color:#1F497D">      "videotestsrc ! queue ! video/x-raw,width=352,height=288,framerate=15/1 !  x264enc ! queue !rtph264pay name=<b>pay0</b> pt=96 "<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="color:#1F497D">      "audiotestsrc ! queue ! audio/x-raw,rate=8000 !   alawenc ! queue ! rtppcmapay name=<b>pay1</b> pt=97 ) " 
<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="color:#1F497D">            <o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="color:#1F497D">      "videotestsrc ! queue ! video/x-raw,width=800,height=600,framerate=15/1 !  x264enc ! queue !rtph264pay name=<b>pay2</b> pt=98 "<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-left:.5in"><span style="color:#1F497D">      "audiotestsrc ! queue ! audio/x-raw,rate=8000 !   alawenc ! queue ! rtppcmapay name=<b>pay3</b> pt=99 )"  );  
<o:p></o:p></span></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">And I want to associate below payloader with below mountPoint
<o:p></o:p></p>
<p class="MsoPlainText" style="text-indent:.5in">pay0 and pay1 to /mount0<o:p></o:p></p>
<p class="MsoPlainText" style="text-indent:.5in">pay2 and pay3 to /mount1<o:p></o:p></p>
<p class="MsoPlainText" style="text-indent:.5in"><o:p> </o:p></p>
<p class="MsoPlainText">It is not clear for me Mathieu suggestion and how I can setup previous pipeline with proxysink/proxysrc<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">So I tried to setup internally to rtspServer a direct mapping between mountPoint and payloder so Stefan said …<o:p></o:p></p>
<p class="MsoPlainText">            "pay0 -> /mount0"  <o:p></o:p></p>
<p class="MsoPlainText">            "pay1 -> /mount1"<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">And I added 1 payloder for each mountPoint because I need it<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText" style="text-indent:.5in">pay0 + pay1 to /mount0<o:p></o:p></p>
<p class="MsoPlainText" style="text-indent:.5in">pay2 + pay3 to /mount1<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">In this way I succeded in accessing from 1 external client a specific mountPoint like /mount0 associated to pay0+pay1 , but only 1 mountPoint for each time,
<o:p></o:p></p>
<p class="MsoPlainText">.. that's to say when I access with a second external client the second mountPoint /mount1 associated to pay2+pay3, … the second video DO NOT stream !!!!<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">And it is strange, ... in details it seems that the sender part of pipeline referring to second mountPoint  /mount1  is not PLAYING
<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">More specifically pn file "../gst/rtsp-server/rtsp-stream.c"  in method  “create_sender_part()” it reported below schema ….
<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">    /* For the sender we create this bit of pipeline for both<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     * RTP and RTCP.<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     * Initially there will be only one active transport for<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     * the stream, so the pipeline will look like this:<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     *<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     * .--------.      .-----.    .---------.<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     * | rtpbin |      | tee |    |  sink   |<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     * |       send->sink   src->sink       |<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     * '--------'      '-----'    '---------'<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     *<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     * For each new transport, the already existing branch will<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     * be reconfigured by adding a queue element:<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     *<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     * .--------.      .-----.    .---------.    .---------.<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     * | rtpbin |      | tee |    |  queue  |    | udpsink |<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     * |       send->sink   src->sink      src->sink       |<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     * '--------'      |     |    '---------'    '---------'<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     *                 |     |    .---------.    .---------.<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     *                 |     |    |  queue  |    | udpsink |<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     *                 |    src->sink      src->sink       |<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     *                 |     |    '---------'    '---------'<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     *                 |     |    .---------.    .---------.<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     *                 |     |    |  queue  |    | appsink |<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     *                 |    src->sink      src->sink       |<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     *                 '-----'    '---------'    '---------'<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New"">     */<o:p></o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoPlainText">It seems that  rtsp-stream in rtsp-server automatically setup previous internal pipelines objects for sender part, …. Is it correct ?   <o:p></o:p></p>
<p class="MsoPlainText">but the sender part of pipeline referring to second mountPoint  /mount1  do not pass in PLAYING state !!!<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">How can I check it is in PLAYING state ?? … And if it is not how can set it in PLAYING state, ….
<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">Thankyou very much <o:p></o:p></p>
<p class="MsoPlainText">For your support<o:p></o:p></p>
<p class="MsoPlainText">Maurizio<o:p></o:p></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoPlainText"><span style="font-size:8.0pt;font-family:"Courier New""><o:p> </o:p></span></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">-----Original Message-----<br>
From: gstreamer-devel [mailto:gstreamer-devel-bounces@lists.freedesktop.org] On Behalf Of Mathieu Duponchelle via gstreamer-devel<br>
Sent: Thursday, February 14, 2019 4:03 PM<br>
To: gstreamer-devel@lists.freedesktop.org<br>
Cc: Mathieu Duponchelle<br>
Subject: Re: partially sharing a pipeline for multiple rtsp mount points<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">You could perhaps use proxysink / proxysrc? You would instantiate a separate pipeline when needed, terminated with (multiple) proxysink (s), then each factory would instantiate a different pipeline starting with a proxysrc linked to
 the relevant proxysink, would that work for you?<o:p></o:p></p>
<p class="MsoPlainText"><o:p> </o:p></p>
<p class="MsoPlainText">On 2/14/19 3:14 PM, stfl via gstreamer-devel wrote:<o:p></o:p></p>
<p class="MsoPlainText">> Hi,<o:p></o:p></p>
<p class="MsoPlainText">><o:p> </o:p></p>
<p class="MsoPlainText">> I am trying to write a rtsp server application that provides multiple
<o:p></o:p></p>
<p class="MsoPlainText">> mountpoints and (partially) shares the pipeline.<o:p></o:p></p>
<p class="MsoPlainText">> There are cameras involved which can only be used once.<o:p></o:p></p>
<p class="MsoPlainText">> The RTSP server shall offer mount points for different codecs
<o:p></o:p></p>
<p class="MsoPlainText">> simultaneously.<o:p></o:p></p>
<p class="MsoPlainText">><o:p> </o:p></p>
<p class="MsoPlainText">> On the first mountpoint I am outputting the regular stream. On the
<o:p></o:p></p>
<p class="MsoPlainText">> other mountpoint I want to tee off somewhere in the existing pipeline
<o:p></o:p></p>
<p class="MsoPlainText">> and terminate provide the end of this pipeline branch as another mountpoint.<o:p></o:p></p>
<p class="MsoPlainText">><o:p> </o:p></p>
<p class="MsoPlainText">> Another option would be to have a single pipeline with all branches
<o:p></o:p></p>
<p class="MsoPlainText">> set up and each mountpoint only provides as single stream.<o:p></o:p></p>
<p class="MsoPlainText">> so with the naming convention on the rtppay: pay0 -> /mount0 pay1 ->
<o:p></o:p></p>
<p class="MsoPlainText">> /mount1<o:p></o:p></p>
<p class="MsoPlainText">><o:p> </o:p></p>
<p class="MsoPlainText">> Or another option would be to have a fully shared pipeline with all
<o:p></o:p></p>
<p class="MsoPlainText">> branches and some sort of selection of the streams on the network already.<o:p></o:p></p>
<p class="MsoPlainText">> Some sort of mountpoint stream-selection like /mount0/stream0 and<o:p></o:p></p>
<p class="MsoPlainText">> /mount0/stream1 which only transfers data of the selected stream on
<o:p></o:p></p>
<p class="MsoPlainText">> the network. I know I can select the stream later on the receiver side
<o:p></o:p></p>
<p class="MsoPlainText">> but in this case it's important to not transfer the unnecessary data.<o:p></o:p></p>
<p class="MsoPlainText">><o:p> </o:p></p>
<p class="MsoPlainText">> Is one of this features available and I just haven't figured it out
<o:p></o:p></p>
<p class="MsoPlainText">> yet or is there any other option to implement this?<o:p></o:p></p>
<p class="MsoPlainText">> Thank you already for any input and ideas.<o:p></o:p></p>
<p class="MsoPlainText">> If this is a known limitation of rtsp-server let me know as well so I
<o:p></o:p></p>
<p class="MsoPlainText">> can stop looking :)<o:p></o:p></p>
<p class="MsoPlainText">><o:p> </o:p></p>
<p class="MsoPlainText">> Thank you,<o:p></o:p></p>
<p class="MsoPlainText">> Stefan<o:p></o:p></p>
<p class="MsoPlainText">><o:p> </o:p></p>
<p class="MsoPlainText">><o:p> </o:p></p>
<p class="MsoPlainText">><o:p> </o:p></p>
<p class="MsoPlainText">> --<o:p></o:p></p>
<p class="MsoPlainText">> Sent from: <a href="http://gstreamer-devel.966125.n4.nabble.com/">
<span style="color:windowtext;text-decoration:none">http://gstreamer-devel.966125.n4.nabble.com/</span></a><o:p></o:p></p>
<p class="MsoPlainText">> _______________________________________________<o:p></o:p></p>
<p class="MsoPlainText">> gstreamer-devel mailing list<o:p></o:p></p>
<p class="MsoPlainText">> <a href="mailto:gstreamer-devel@lists.freedesktop.org">
<span style="color:windowtext;text-decoration:none">gstreamer-devel@lists.freedesktop.org</span></a><o:p></o:p></p>
<p class="MsoPlainText">> <a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel">
<span style="color:windowtext;text-decoration:none">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</span></a><o:p></o:p></p>
<p class="MsoPlainText">_______________________________________________<o:p></o:p></p>
<p class="MsoPlainText">gstreamer-devel mailing list<o:p></o:p></p>
<p class="MsoPlainText"><a href="mailto:gstreamer-devel@lists.freedesktop.org"><span style="color:windowtext;text-decoration:none">gstreamer-devel@lists.freedesktop.org</span></a><o:p></o:p></p>
<p class="MsoPlainText"><a href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel"><span style="color:windowtext;text-decoration:none">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</span></a><o:p></o:p></p>
<p class="MsoNormal"><span style="font-size:12.0pt;font-family:"Cambria","serif""><o:p> </o:p></span></p>
</div>
</body>
</html>