Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. GStreamer : Pipeline to connect VNC server and Display/Record the remote GUI
Forum Updated to NodeBB v4.3 + New Features

GStreamer : Pipeline to connect VNC server and Display/Record the remote GUI

Scheduled Pinned Locked Moved Solved General and Desktop
35 Posts 3 Posters 16.2k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • ODБOïO Offline
    ODБOïO Offline
    ODБOï
    wrote on last edited by ODБOï
    #1

    Hi,
    I want to use GStreamer to connect to a VNC server and record the video.
    for now all i did is : I likned my app against GStreamer

    Please someone explain or provide an introduction (simple) tutorial to help me to understand the concept of pipeline.
    i need to use gst-launch-1.0 tool to create the pipeline and GstParse to generate and execute the pipeline in my code.

    Thank you in advance

    1 Reply Last reply
    0
    • SGaistS Offline
      SGaistS Offline
      SGaist
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Copies from this thread:

      A GStreamer pipeline is basically a list of module that you chain to each other from the source to the sink to, for example, read an audio file, decode it and finally send it to your audio output.

      From a command line point of view, it's the elements built from the parameters you give to gst-launch.

      For example:
      Play the mp3 music file "music.mp3" using a libmad-based plugin and output to an OSS device:

      gst-launch-1.0 filesrc location=music.mp3 ! mad ! audioconvert ! audioresample ! osssink
      

      The documentation of get-launch gives you more good examples.
      The API tutorials are pretty nice to get started.

      Interested in AI ? www.idiap.ch
      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

      ODБOïO 1 Reply Last reply
      2
      • SGaistS SGaist

        Copies from this thread:

        A GStreamer pipeline is basically a list of module that you chain to each other from the source to the sink to, for example, read an audio file, decode it and finally send it to your audio output.

        From a command line point of view, it's the elements built from the parameters you give to gst-launch.

        For example:
        Play the mp3 music file "music.mp3" using a libmad-based plugin and output to an OSS device:

        gst-launch-1.0 filesrc location=music.mp3 ! mad ! audioconvert ! audioresample ! osssink
        

        The documentation of get-launch gives you more good examples.
        The API tutorials are pretty nice to get started.

        ODБOïO Offline
        ODБOïO Offline
        ODБOï
        wrote on last edited by
        #3

        @SGaist said in GStreamer : understanding the concept of 'pipeline':

        Copies from this thread:

        Yes, thx, i did a new one because the other thread is turning to spaghetti.
        Thx for explanation, it is bit clearer
        I will dive into these docs today.

        1 Reply Last reply
        0
        • ODБOïO Offline
          ODБOïO Offline
          ODБOï
          wrote on last edited by ODБOï
          #4

          Hi,
          I'm testing the GStreamer Hello World exemple, a call to GstMessage * gst_bus_timed_pop_filtered() is underlined in red, and application cant compile
          Qt creator autocompletion can find it, but when i call it

          msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS)
          

          output : no matching function for call to 'gst_bus_timed_pop_filtered'

          What could be the problem please ?

          jsulmJ 1 Reply Last reply
          0
          • ODБOïO ODБOï

            Hi,
            I'm testing the GStreamer Hello World exemple, a call to GstMessage * gst_bus_timed_pop_filtered() is underlined in red, and application cant compile
            Qt creator autocompletion can find it, but when i call it

            msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS)
            

            output : no matching function for call to 'gst_bus_timed_pop_filtered'

            What could be the problem please ?

            jsulmJ Offline
            jsulmJ Offline
            jsulm
            Lifetime Qt Champion
            wrote on last edited by
            #5

            @LeLev Header file not included?
            Wrong parameters passed?

            https://forum.qt.io/topic/113070/qt-code-of-conduct

            ODБOïO 1 Reply Last reply
            1
            • jsulmJ jsulm

              @LeLev Header file not included?
              Wrong parameters passed?

              ODБOïO Offline
              ODБOïO Offline
              ODБOï
              wrote on last edited by ODБOï
              #6

              @jsulm hi
              i only include <gst/gst.h>

              about parameters, i also tryed to compile the program without passing any parameters to gst_bus_timed_pop_filtered
              and had this output :
              too few arguments to function 'GstMessage* gst_bus_timed_pop_filtered(GstBus*, GstClockTime, GstMessageType)'
              msg = gst_bus_timed_pop_filtered();
              ^

              jsulmJ 1 Reply Last reply
              0
              • ODБOïO ODБOï

                @jsulm hi
                i only include <gst/gst.h>

                about parameters, i also tryed to compile the program without passing any parameters to gst_bus_timed_pop_filtered
                and had this output :
                too few arguments to function 'GstMessage* gst_bus_timed_pop_filtered(GstBus*, GstClockTime, GstMessageType)'
                msg = gst_bus_timed_pop_filtered();
                ^

                jsulmJ Offline
                jsulmJ Offline
                jsulm
                Lifetime Qt Champion
                wrote on last edited by
                #7

                @LeLev said in GStreamer : understanding the concept of 'pipeline':

                without passing any parameters

                this will for sure not work as the function expects 3 parameters: https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/GstBus.html#gst-bus-timed-pop-filtered

                Can you post the whole error message with the parameters you were passing before?
                Maybe the type of "bus" was wrong?

                https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • ODБOïO Offline
                  ODБOïO Offline
                  ODБOï
                  wrote on last edited by ODБOï
                  #8

                  @jsulm

                       gst_init (&argc, &argv);
                       GstElement *pipeline;
                       GstBus *bus;
                       GstMessage *msg;
                  
                       pipeline = gst_parse_launch ("playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm", NULL);
                  
                         gst_element_set_state (pipeline, GST_STATE_PLAYING);
                         
                         bus = gst_element_get_bus (pipeline);
                         msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
                  

                  output :

                  no matching function for call to 'gst_bus_timed_pop_filtered'
                  
                  erreur : invalid conversion from 'int' to 'GstMessageType' [-fpermissive]
                          msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
                                                                                     ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
                  
                  jsulmJ 1 Reply Last reply
                  0
                  • ODБOïO ODБOï

                    @jsulm

                         gst_init (&argc, &argv);
                         GstElement *pipeline;
                         GstBus *bus;
                         GstMessage *msg;
                    
                         pipeline = gst_parse_launch ("playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm", NULL);
                    
                           gst_element_set_state (pipeline, GST_STATE_PLAYING);
                           
                           bus = gst_element_get_bus (pipeline);
                           msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
                    

                    output :

                    no matching function for call to 'gst_bus_timed_pop_filtered'
                    
                    erreur : invalid conversion from 'int' to 'GstMessageType' [-fpermissive]
                            msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_ERROR | GST_MESSAGE_EOS);
                                                                                       ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
                    
                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by jsulm
                    #9

                    @LeLev said in GStreamer : understanding the concept of 'pipeline':

                    GST_MESSAGE_ERROR | GST_MESSAGE_EOS

                    this is the actual problem. Try to cast it to GstMessageType:

                    msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, static_cast<GstMessageType>(GST_MESSAGE_ERROR | GST_MESSAGE_EOS));
                    

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    ODБOïO 1 Reply Last reply
                    1
                    • ODБOïO Offline
                      ODБOïO Offline
                      ODБOï
                      wrote on last edited by
                      #10

                      i just changed the 3rd parameter and it compiled

                      msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_EOS);
                      
                      jsulmJ 1 Reply Last reply
                      0
                      • jsulmJ jsulm

                        @LeLev said in GStreamer : understanding the concept of 'pipeline':

                        GST_MESSAGE_ERROR | GST_MESSAGE_EOS

                        this is the actual problem. Try to cast it to GstMessageType:

                        msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, static_cast<GstMessageType>(GST_MESSAGE_ERROR | GST_MESSAGE_EOS));
                        
                        ODБOïO Offline
                        ODБOïO Offline
                        ODБOï
                        wrote on last edited by
                        #11

                        @jsulm said in GStreamer : understanding the concept of 'pipeline':

                        ry to cast it to GstMessageType:

                        Thank you !

                        1 Reply Last reply
                        0
                        • ODБOïO ODБOï

                          i just changed the 3rd parameter and it compiled

                          msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE, GST_MESSAGE_EOS);
                          
                          jsulmJ Offline
                          jsulmJ Offline
                          jsulm
                          Lifetime Qt Champion
                          wrote on last edited by
                          #12

                          @LeLev That's why it is important to post all errors: many errors are just follow up errors caused by another error.

                          https://forum.qt.io/topic/113070/qt-code-of-conduct

                          ODБOïO 1 Reply Last reply
                          1
                          • jsulmJ jsulm

                            @LeLev That's why it is important to post all errors: many errors are just follow up errors caused by another error.

                            ODБOïO Offline
                            ODБOïO Offline
                            ODБOï
                            wrote on last edited by ODБOï
                            #13

                            @jsulm said in GStreamer : understanding the concept of 'pipeline':

                            all errors

                            saved for the next time.

                            I'm confused about this lib.
                            In this hello world exemple they say :

                            If everything built fine, fire up the executable! You should see a window pop up, containing a video being played straight from the Internet, along with audio. Congratulations!

                            I can't figure out how a window will pop up.
                            I'm reading the playbin description right now, in my app nothing pops up.

                            jsulmJ 1 Reply Last reply
                            0
                            • ODБOïO ODБOï

                              @jsulm said in GStreamer : understanding the concept of 'pipeline':

                              all errors

                              saved for the next time.

                              I'm confused about this lib.
                              In this hello world exemple they say :

                              If everything built fine, fire up the executable! You should see a window pop up, containing a video being played straight from the Internet, along with audio. Congratulations!

                              I can't figure out how a window will pop up.
                              I'm reading the playbin description right now, in my app nothing pops up.

                              jsulmJ Offline
                              jsulmJ Offline
                              jsulm
                              Lifetime Qt Champion
                              wrote on last edited by jsulm
                              #14

                              @LeLev said in GStreamer : understanding the concept of 'pipeline':

                              I can't figure out how a window will pop up.

                              So, you start the app but no window pops up?
                              Then probably something is wrong. I don't know what. You can debug and see what happens.

                              https://forum.qt.io/topic/113070/qt-code-of-conduct

                              ODБOïO 1 Reply Last reply
                              0
                              • jsulmJ jsulm

                                @LeLev said in GStreamer : understanding the concept of 'pipeline':

                                I can't figure out how a window will pop up.

                                So, you start the app but no window pops up?
                                Then probably something is wrong. I don't know what. You can debug and see what happens.

                                ODБOïO Offline
                                ODБOïO Offline
                                ODБOï
                                wrote on last edited by ODБOï
                                #15

                                @jsulm said in GStreamer : understanding the concept of 'pipeline':

                                So, you start the app but no window pops up?

                                Yes,

                                @jsulm said in GStreamer : understanding the concept of 'pipeline':

                                probably something is wrong

                                yes, with putenv("GST_DEBUG=2"); i got :

                                0:00:03.253981299  1536 0000000037E010C0 WARN             souphttpsrc gstsouphttpsrc.c:1379:gst_soup_http_src_parse_status:<source> error: Secure connection setup failed.
                                0:00:03.254006642  1536 0000000037E010C0 WARN             souphttpsrc gstsouphttpsrc.c:1379:gst_soup_http_src_parse_status:<source> error: TLS/SSL support not available; install glib-networking (6), URL: https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm, Redirect to: (NULL)
                                0:00:03.254067912  1536 0000000037E010C0 WARN                 basesrc gstbasesrc.c:3055:gst_base_src_loop:<source> error: Internal data stream error.
                                0:00:03.254105765  1536 0000000037E010C0 WARN                 basesrc gstbasesrc.c:3055:gst_base_src_loop:<source> error: streaming stopped, reason error (-5)
                                0:00:03.254180509  1536 0000000037E010C0 WARN                typefind gsttypefindelement.c:991:gst_type_find_element_chain_do_typefinding:<typefindelement0> error: Stream doesn't contain enough data.
                                0:00:03.254192057  1536 0000000037E010C0 WARN                typefind gsttypefindelement.c:991:gst_type_find_element_chain_do_typefinding:<typefindelement0> error: Can't typefind stream
                                

                                i will install glib-networking

                                jsulmJ 1 Reply Last reply
                                0
                                • ODБOïO ODБOï

                                  @jsulm said in GStreamer : understanding the concept of 'pipeline':

                                  So, you start the app but no window pops up?

                                  Yes,

                                  @jsulm said in GStreamer : understanding the concept of 'pipeline':

                                  probably something is wrong

                                  yes, with putenv("GST_DEBUG=2"); i got :

                                  0:00:03.253981299  1536 0000000037E010C0 WARN             souphttpsrc gstsouphttpsrc.c:1379:gst_soup_http_src_parse_status:<source> error: Secure connection setup failed.
                                  0:00:03.254006642  1536 0000000037E010C0 WARN             souphttpsrc gstsouphttpsrc.c:1379:gst_soup_http_src_parse_status:<source> error: TLS/SSL support not available; install glib-networking (6), URL: https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm, Redirect to: (NULL)
                                  0:00:03.254067912  1536 0000000037E010C0 WARN                 basesrc gstbasesrc.c:3055:gst_base_src_loop:<source> error: Internal data stream error.
                                  0:00:03.254105765  1536 0000000037E010C0 WARN                 basesrc gstbasesrc.c:3055:gst_base_src_loop:<source> error: streaming stopped, reason error (-5)
                                  0:00:03.254180509  1536 0000000037E010C0 WARN                typefind gsttypefindelement.c:991:gst_type_find_element_chain_do_typefinding:<typefindelement0> error: Stream doesn't contain enough data.
                                  0:00:03.254192057  1536 0000000037E010C0 WARN                typefind gsttypefindelement.c:991:gst_type_find_element_chain_do_typefinding:<typefindelement0> error: Can't typefind stream
                                  

                                  i will install glib-networking

                                  jsulmJ Offline
                                  jsulmJ Offline
                                  jsulm
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #16

                                  @LeLev You could try to play a video from a non-SSL (non-HTTPS) URL.

                                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  ODБOïO 1 Reply Last reply
                                  1
                                  • jsulmJ jsulm

                                    @LeLev You could try to play a video from a non-SSL (non-HTTPS) URL.

                                    ODБOïO Offline
                                    ODБOïO Offline
                                    ODБOï
                                    wrote on last edited by
                                    #17

                                    @jsulm That worked thank you!

                                    ODБOïO 1 Reply Last reply
                                    0
                                    • ODБOïO ODБOï

                                      @jsulm That worked thank you!

                                      ODБOïO Offline
                                      ODБOïO Offline
                                      ODБOï
                                      wrote on last edited by
                                      #18

                                      Can please someone help me to complete this pipeline so it can record the VNC remote desktop to video file and/or show it with
                                      playbin ?
                                      pipeline = gst_parse_launch("rfbsrc host=xx.xx.xx.xx port=5900 password=passw view-only=true",NULL);

                                      1 Reply Last reply
                                      0
                                      • SGaistS Offline
                                        SGaistS Offline
                                        SGaist
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #19

                                        Use the tee plugin.

                                        Interested in AI ? www.idiap.ch
                                        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                                        ODБOïO 1 Reply Last reply
                                        1
                                        • SGaistS SGaist

                                          Use the tee plugin.

                                          ODБOïO Offline
                                          ODБOïO Offline
                                          ODБOï
                                          wrote on last edited by ODБOï
                                          #20

                                          @SGaist thank you, I tryed to use tee, but that is more complicated to do, i actually don't want to Watch and Save/record.
                                          I would like to only save the video without displaying it.

                                          after some houres i got this broken pipeline..

                                          I have lot of troubles on how to set up the format for the video and write it to a file
                                          I use ultraVnc server

                                          "rfbsrc host=xx.xx.xx.xx port=5900 password=pw view-only=true   TODO : set up video format    ! mpegtsmux ! filesink location=testvideo.mp4"
                                          

                                          i have this output

                                          ** (QVNCClient.exe:10252): CRITICAL **: gst_video_info_set_format: assertion 'format != GST_VIDEO_FORMAT_UNKNOWN' failed
                                          
                                          ** (QVNCClient.exe:10252): CRITICAL **: gst_video_info_to_caps: assertion 'info->finfo->format != GST_VIDEO_FORMAT_UNKNOWN' failed
                                          
                                          (QVNCClient.exe:10252): GStreamer-CRITICAL **: gst_event_new_caps: assertion 'caps != NULL' failed
                                          
                                          (QVNCClient.exe:10252): GStreamer-CRITICAL **: gst_pad_push_event: assertion 'GST_IS_EVENT (event)' failed
                                          
                                          (QVNCClient.exe:10252): GStreamer-CRITICAL **: gst_mini_object_unref: assertion 'mini_object != NULL' failed
                                          0:00:00.737522311 10252 0000000036FDDBC0 WARN                 basesrc gstbasesrc.c:3275:gst_base_src_prepare_allocation:<rfbsrc0> Subclass failed to decide allocation
                                          0:00:00.737604753 10252 0000000036FDDBC0 WARN                 basesrc gstbasesrc.c:3055:gst_base_src_loop:<rfbsrc0> error: Internal data stream error.
                                          0:00:00.737644531 10252 0000000036FDDBC0 WARN                 basesrc gstbasesrc.c:3055:gst_base_src_loop:<rfbsrc0> error: streaming stopped, reason not-negotiated (-4)
                                          This program is linked against GStreamer 1.14.3 
                                          

                                          THX

                                          1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved