<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p><font size="+1"><tt>I have been playing with that,  and that
          works.</tt></font></p>
    <p><font size="+1"><tt>(btw:  I want to write some c code, because
          at some point I want it to run as a deamon, and do some
          trickery with it, like switching cameras etc)</tt></font></p>
    <p><font size="+1"><tt><br>
        </tt></font></p>
    <p><font size="+1"><tt>I see some "weird" msgs, don't know what they
          really mean, but the stream video/audio, seems to work.</tt></font></p>
    <p><font size="+1"><tt><br>
        </tt></font></p>
    <p><font size="+1"><tt>this is what I see (I called the  little
          program basic-ipcam, 'a la' the  basic gstreamer API example.
          :</tt></font></p>
    <font size="+1"><tt># ./basic-ipcam <br>
        DtsGetHWFeatures: Create File Failed<br>
        DtsGetHWFeatures: Create File Failed<br>
        Running DIL (3.22.0) Version<br>
        DtsDeviceOpen: Opening HW in mode 0<br>
        DtsDeviceOpen: Create File Failed</tt></font>
    <div class="moz-cite-prefix">On 5/17/19 11:46 AM, Michael Gruner
      wrote:<br>
    </div>
    <blockquote type="cite"
      cite="mid:05AE9A52-EAD7-4B94-B8C7-366A85CB1BBE@ridgerun.com">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      Hi
      <div class=""><br class="">
      </div>
      <div class="">There is no reason why a C app would have less
        lag/latency than a gst-launch-1.0 pipeline (assuming the pipes
        are exactly the same). After all, gst-launch-1.0 is a C
        application as well. Network streaming will typically have more
        latency than local display, and that’s the reason gst-launch-1.0
        seems more laggy.</div>
      <div class=""><br class="">
      </div>
      <div class="">Here’s a tip that may simplify your application
        development. Take a look at gst_parse_launch, you can pass in
        the same line as in gst-launch-1.0 and it will handle all the
        complexities automatically. In fact, that’s what gst-launch-1.0
        uses underneath.</div>
      <div class=""><br class="">
      </div>
      <div class=""><a
href="https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstParse.html#gst-parse-launch"
          class="" moz-do-not-send="true">https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstParse.html#gst-parse-launch</a></div>
      <div class=""><br class="">
      </div>
      <div class="">Roughly, it would look something like:</div>
      <div class=""><br class="">
      </div>
      <div class=""><i class="">const gchar * description =
          "uridecodebin uri=<a
href="rtsp://192.168.x.y:554/user=admin_password=XXXXXXXX_channel=1_stream=0.sdp?real_stream"
            class="" moz-do-not-send="true">rtsp://192.168.x.y:554/user=admin_password=XXXXXXXX_channel=1_stream=0.sdp?real_stream</a>
          name=d ! queue ! theoraenc ! oggmux name=m ! tcpserversink
          host=192.168.q.r port=8080 d. ! queue ! audioconvert !
          audioresample ! flacenc ! m."</i></div>
      <div class=""><i class=""><br class="">
        </i></div>
      <div class=""><i class="">GError *error = NULL;</i></div>
      <div class=""><i class="">GstElement * pipeline = gst_parse_launch
          (description, &error);</i></div>
      <div class=""><i class=""><br class="">
        </i></div>
      <div class=""><i class="">If (!pipeline) {</i></div>
      <div class=""><i class=""><span class="Apple-tab-span" style="white-space:pre"> </span>g_printerr
          (“Unable to create pipeline: %s\n”, error->message);</i></div>
      <div class=""><i class=""><span class="Apple-tab-span" style="white-space:pre"> </span>g_error_free
          (error);</i></div>
      <div class=""><i class="">}</i></div>
      <div class=""><br class="">
      </div>
      <div class="">Hope it helps!</div>
      <div class=""><br class="">
      </div>
      <div class="">Michael</div>
      <div class=""><a href="http://www.ridgerun.com" class=""
          moz-do-not-send="true">www.ridgerun.com</a></div>
      <div class=""><br class="">
      </div>
      <div class="">
        <div><br class="">
          <blockquote type="cite" class="">
            <div class="">On May 17, 2019, at 10:49 AM, R C <<a
                href="mailto:cjvijf@gmail.com" class=""
                moz-do-not-send="true">cjvijf@gmail.com</a>> wrote:</div>
            <br class="Apple-interchange-newline">
            <div class="">
              <div class="">Hello all,<br class="">
                <br class="">
                <br class="">
                I am using the examples from the Gstreamer basic
                tutorial to see if I can build a c program that streams 
                some IP cameras.<br class="">
                <br class="">
                The reason why I want to use C code is that is seems the
                ryn 'faster', less lag/latency.  I have a working
                example that streams the camera to a "gstreamer window"
                and the timestamps on the stream are only 3-4 secs
                behind, while running the same stream with the gst
                launch cmd line (into browser) is about 20 - 30 secs
                behind.<br class="">
                <br class="">
                (although I am streaming into a web page with gst-launch<br
                  class="">
                <br class="">
                <br class="">
                This is the gst-launch pipeline I am using:<br class="">
                <br class="">
                gst-launch-1.0 uridecodebin uri=<a
href="rtsp://192.168.x.y:554/user=admin_password=XXXXXXXX_channel=1_stream=0.sdp?real_stream"
                  class="" moz-do-not-send="true">rtsp://192.168.x.y:554/user=admin_password=XXXXXXXX_channel=1_stream=0.sdp?real_stream</a>
                name=d ! queue ! theoraenc ! oggmux name=m !
                tcpserversink host=192.168.q.r port=8080 d. ! queue !
                audioconvert ! audioresample ! flacenc ! m.<br class="">
                <br class="">
                <br class="">
                Being a rookie, using gstreamer, I assume that he names,
                d and m, are used to ID the video and audio stream?<br
                  class="">
                <br class="">
                <br class="">
                I "adapted"  a gstreamer example a little and so far I
                can stream the video and audio to a gstreamer window.,
                like (some excerpts) :<br class="">
                <br class="">
                // Create the elements<br class="">
                data.source = gst_element_factory_make("uridecodebin",
                "source");<br class="">
                data.audioconvert =
                gst_element_factory_make("audioconvert",
                "audioconvert");<br class="">
                data.audiosink =
                gst_element_factory_make("autoaudiosink", "audiosink");<br
                  class="">
                data.videoconvert =
                gst_element_factory_make("videoconvert",
                "videoconvert");<br class="">
                data.videosink =
                gst_element_factory_make("autovideosink", "videosink");<br
                  class="">
                <br class="">
                I connect the audioconvert to the audio sink, same for
                video.<br class="">
                <br class="">
                and when the stream starts, I connect the source
                (uridecodebin) to the rest of the pipeline:<br class="">
                <br class="">
                GstPad *audiosink_pad =
                gst_element_get_static_pad(data->audioconvert,
                "sink");<br class="">
                GstPad *videosink_pad =
                gst_element_get_static_pad(data->videoconvert,
                "sink");<br class="">
                <br class="">
                gst_pad_link (new_pad, audiosink_pad);<br class="">
                <br class="">
                gst_pad_link (new_pad, videosink_pad);<br class="">
                <br class="">
                <br class="">
                where "new_pad"  are the pads that are created, by
                source/uridecodebin when the stream starts.<br class="">
                <br class="">
                <br class="">
                So I assume, in the C code I don't really have to use
                the names, since I can directly connect those elements,
                while in gst-launch one needs to  ID what elements go
                where?  right?<br class="">
                <br class="">
                The gst-launch command I used seems to work,  I don't
                know if it is the most efficient way to do that though,
                but wondering how the elements should be linked in C
                code<br class="">
                <br class="">
                <br class="">
                would it be something like?:<br class="">
                <br class="">
                video:  uridecodebin -> queue -> theoraenc ->
                oggmux -> tcpserversink<br class="">
                <br class="">
                audio: uridecodebin -> queue -> audioconvert ->
                audioresample -> flacenc -> tcpserversink<br
                  class="">
                <br class="">
                <br class="">
                In the reference manual I see that the tcpserversink
                element has 1 sink, so I need the element for both the
                audio stream and video stream?<br class="">
                <br class="">
                (or do the two streams need to be combined before I 
                connect them to the tcpserversink element?)<br class="">
                <br class="">
                <br class="">
                thanks,<br class="">
                <br class="">
                <br class="">
                Ron<br class="">
                <br class="">
                <br class="">
                _______________________________________________<br
                  class="">
                gstreamer-devel mailing list<br class="">
                <a href="mailto:gstreamer-devel@lists.freedesktop.org"
                  class="" moz-do-not-send="true">gstreamer-devel@lists.freedesktop.org</a><br
                  class="">
<a class="moz-txt-link-freetext" href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a></div>
            </div>
          </blockquote>
        </div>
        <br class="">
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
gstreamer-devel mailing list
<a class="moz-txt-link-abbreviated" href="mailto:gstreamer-devel@lists.freedesktop.org">gstreamer-devel@lists.freedesktop.org</a>
<a class="moz-txt-link-freetext" href="https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel">https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel</a></pre>
    </blockquote>
  </body>
</html>