Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Collapse
Brand Logo

ModalAI Forum

  1. ModalAI Support Forum
  2. Ask your questions right here!
  3. Seeking Reference Code for MPA Integration with RTSP Video Streams for TFLite Server

Seeking Reference Code for MPA Integration with RTSP Video Streams for TFLite Server

Scheduled Pinned Locked Moved Ask your questions right here!
38 Posts 3 Posters 12.0k Views 3 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.
  • Alex KushleyevA Alex Kushleyev

    @Ethan-Wu,

    Gstreamer on voxl2 has customizations to make use of voxl2 hardware (video encoder, decoder), so i am not sure if standard gstreamer installation would work. Perhaps that is why you are seeing issues with the standard installation of gstreamer.

    Alex KushleyevA Offline
    Alex KushleyevA Offline
    Alex Kushleyev
    ModalAI Team
    wrote on last edited by
    #12

    I wrote some examples how to use use python3 to get external rtsp stream into python using opencv (which uses gstreamer) and then publish RGB image via MPA.

    • https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-mpa-tools/-/blob/pympa-experimental/tools/python/rtsp_rx.py
    • https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-mpa-tools/-/blob/pympa-experimental/tools/python/rtsp_rx_mpa_pub.py .

    This requires updated version of the opencv package for VOXL2 with python3 bindings (i have not published that yet). there is also an experimental interface to get and send images via MPA (using pympa python bindings).

    If you are interested trying out this option, we can explore it

    Ethan WuE 1 Reply Last reply
    0
    • Alex KushleyevA Alex Kushleyev

      I wrote some examples how to use use python3 to get external rtsp stream into python using opencv (which uses gstreamer) and then publish RGB image via MPA.

      • https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-mpa-tools/-/blob/pympa-experimental/tools/python/rtsp_rx.py
      • https://gitlab.com/voxl-public/voxl-sdk/utilities/voxl-mpa-tools/-/blob/pympa-experimental/tools/python/rtsp_rx_mpa_pub.py .

      This requires updated version of the opencv package for VOXL2 with python3 bindings (i have not published that yet). there is also an experimental interface to get and send images via MPA (using pympa python bindings).

      If you are interested trying out this option, we can explore it

      Ethan WuE Offline
      Ethan WuE Offline
      Ethan Wu
      Contributor
      wrote on last edited by
      #13

      @Alex-Kushleyev

      Thank you very much, that really works! And it's REALLY COOL!

      Now, the remaining issue is with GStreamer support. When streaming RTSP, GStreamer often freezes without any indication or error messages, making it difficult to identify the problem. Although this may not be the most suitable question to ask here, I still want to seek advice and see if there are other ways besides blindly testing different combinations.

      Thank you for your assistance.

      Alex KushleyevA 1 Reply Last reply
      0
      • Ethan WuE Ethan Wu

        @Alex-Kushleyev

        Thank you very much, that really works! And it's REALLY COOL!

        Now, the remaining issue is with GStreamer support. When streaming RTSP, GStreamer often freezes without any indication or error messages, making it difficult to identify the problem. Although this may not be the most suitable question to ask here, I still want to seek advice and see if there are other ways besides blindly testing different combinations.

        Thank you for your assistance.

        Alex KushleyevA Offline
        Alex KushleyevA Offline
        Alex Kushleyev
        ModalAI Team
        wrote on last edited by
        #14

        @Ethan-Wu , can you clarify the gstreamer freezing issue? Are you saying that the client side freezes? what source are you using as the rtsp server?

        In my testing the above python scripts, i found that if the rtsp stream is generated using a combination of voxl-camera-server and voxl-streamer then the gstreamer client does freeze occasionally. I will investigate this at some point soon.

        However, there is a 3rd party app that allows you to use gstreamer on the server side and i did not experience client freezing with that option. In this case, gstreamer server side is also on voxl2 and it is using a qtiqmmfsrc plugin to get video from the camera pipeline.

        #start rtsp server using gst-rtsp-launch ( https://github.com/sfalexrog/gst-rtsp-launch )
        gst-rtsp-launch -p 8900 -e live "( qtiqmmfsrc camera=0 name=hires ! video/x-h264,format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! h264parse ! rtph264pay name=pay0 pt=96 )"
        
        Ethan WuE 1 Reply Last reply
        0
        • Alex KushleyevA Alex Kushleyev

          @Ethan-Wu , can you clarify the gstreamer freezing issue? Are you saying that the client side freezes? what source are you using as the rtsp server?

          In my testing the above python scripts, i found that if the rtsp stream is generated using a combination of voxl-camera-server and voxl-streamer then the gstreamer client does freeze occasionally. I will investigate this at some point soon.

          However, there is a 3rd party app that allows you to use gstreamer on the server side and i did not experience client freezing with that option. In this case, gstreamer server side is also on voxl2 and it is using a qtiqmmfsrc plugin to get video from the camera pipeline.

          #start rtsp server using gst-rtsp-launch ( https://github.com/sfalexrog/gst-rtsp-launch )
          gst-rtsp-launch -p 8900 -e live "( qtiqmmfsrc camera=0 name=hires ! video/x-h264,format=NV12,width=1920,height=1080,framerate=30/1 ! queue ! h264parse ! rtph264pay name=pay0 pt=96 )"
          
          Ethan WuE Offline
          Ethan WuE Offline
          Ethan Wu
          Contributor
          wrote on last edited by Ethan Wu
          #15

          @Alex-Kushleyev
          I think the client side is freezing, and I noticed that VideoCapture takes some time to complete, but ultimately hangs on cap.read(). Below is the relevant debug information:

          created output pipe rtsp-debug, channel 0, flags 0
          gst-launch-1.0 rtspsrc location=rtsp://169.254.4.201:554/live0 latency=0  ! queue !  rtph264depay ! h264parse config-interval=-1 ! qtivdec ! qtivtransform !  video/x-raw,format=BGR,width=1280,height=720 !  autovideoconvert ! appsink
          0:00:00.000749593 14685   0x55c069b780 WARN            GST_REGISTRY gstregistrybinary.c:489:gst_registry_binary_check_magic: Binary registry magic version is different : 1.3.0 != 1.12.0
          0:00:00.057125316 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:876:priv_gst_parse_yyparse: unexpected reference "gst-launch-1" - ignoring
          0:00:00.057160626 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:882:priv_gst_parse_yyparse: unexpected pad-reference "0" - ignoring
          0:00:00.057168959 14685   0x55c069b780 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "rtspsrc"!
          0:00:00.057173647 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "rtspsrc"
          0:00:00.057890325 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@0x55c070f730]
          0:00:00.057908970 14685   0x55c069b780 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "rtph264depay"!
          0:00:00.057914021 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "rtph264depay"
          0:00:00.057918969 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no sink [source=@0x55c070f730]
          0:00:00.057923292 14685   0x55c069b780 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "h264parse"!
          0:00:00.057927354 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "h264parse"
          0:00:00.057932250 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@(nil)]
          0:00:00.057936260 14685   0x55c069b780 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "qtivdec"!
          0:00:00.057939437 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "qtivdec"
          0:00:00.057944072 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@(nil)]
          0:00:00.057947874 14685   0x55c069b780 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "qtivtransform"!
          0:00:00.057951467 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "qtivtransform"
          0:00:00.057956884 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@(nil)]
          0:00:00.057971726 14685   0x55c069b780 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "autovideoconvert"!
          0:00:00.057979851 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "autovideoconvert"
          0:00:00.057985215 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@(nil)]
          0:00:00.058182496 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@0x55c06f51b0]
          
          (python:14685): GStreamer-CRITICAL **: 08:49:15.037: gst_caps_get_structure: assertion 'GST_IS_CAPS (caps)' failed
          
          (python:14685): GStreamer-CRITICAL **: 08:49:15.038: gst_structure_get_int: assertion 'structure != NULL' failed
          [ WARN:0@30.090] global cap_gstreamer.cpp:1714 open OpenCV | GStreamer warning: cannot query video width/height
          
          (python:14685): GStreamer-CRITICAL **: 08:49:15.038: gst_structure_get_fraction: assertion 'structure != NULL' failed
          [ WARN:0@30.090] global cap_gstreamer.cpp:1722 open OpenCV | GStreamer warning: cannot query video fps
          [ WARN:0@30.090] global cap_gstreamer.cpp:1777 open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
          
          (python:14685): GStreamer-CRITICAL **: 08:50:20.041: gst_sample_get_caps: assertion 'GST_IS_SAMPLE (sample)' failed
          [ERROR:0@95.092] global cap_gstreamer.cpp:934 retrieveVideoFrame GStreamer: gst_sample_get_caps() returns NULL
          
          (python:14685): GStreamer-CRITICAL **: 08:51:25.042: gst_sample_get_caps: assertion 'GST_IS_SAMPLE (sample)' failed
          [ERROR:0@160.094] global cap_gstreamer.cpp:934 retrieveVideoFrame GStreamer: gst_sample_get_caps() returns NULL
          ^C
          (python:14685): GStreamer-CRITICAL **: 08:52:30.044: gst_sample_get_caps: assertion 'GST_IS_SAMPLE (sample)' failed
          [ERROR:0@225.096] global cap_gstreamer.cpp:934 retrieveVideoFrame GStreamer: gst_sample_get_caps() returns NULL
          Traceback (most recent call last):
            File "/voxl-mpa-tools/tools/python/rtsp_rx_mpa_pub.py", line 62, in <module>
              ret, frame = vcap.read()
          KeyboardInterrupt
          
          

          Today, I referenced the official website and tested the situation of OpenCV, gstreamer, and MPA with other example commands. The result is that the image produced by gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink can ultimately be seen on the portal. So, I don't think it's an issue with gstreamer installation?

          My RTSP source is from an external camera (edge computing device) acting as a server, connected to VOXL via Ethernet for transmission. Currently, I am not using VOXL's built-in camera or UVC camera, and I am not generating an RTSP stream through VOXL's services.

          Ethan WuE 1 Reply Last reply
          0
          • Ethan WuE Ethan Wu

            @Alex-Kushleyev
            I think the client side is freezing, and I noticed that VideoCapture takes some time to complete, but ultimately hangs on cap.read(). Below is the relevant debug information:

            created output pipe rtsp-debug, channel 0, flags 0
            gst-launch-1.0 rtspsrc location=rtsp://169.254.4.201:554/live0 latency=0  ! queue !  rtph264depay ! h264parse config-interval=-1 ! qtivdec ! qtivtransform !  video/x-raw,format=BGR,width=1280,height=720 !  autovideoconvert ! appsink
            0:00:00.000749593 14685   0x55c069b780 WARN            GST_REGISTRY gstregistrybinary.c:489:gst_registry_binary_check_magic: Binary registry magic version is different : 1.3.0 != 1.12.0
            0:00:00.057125316 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:876:priv_gst_parse_yyparse: unexpected reference "gst-launch-1" - ignoring
            0:00:00.057160626 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:882:priv_gst_parse_yyparse: unexpected pad-reference "0" - ignoring
            0:00:00.057168959 14685   0x55c069b780 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "rtspsrc"!
            0:00:00.057173647 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "rtspsrc"
            0:00:00.057890325 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@0x55c070f730]
            0:00:00.057908970 14685   0x55c069b780 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "rtph264depay"!
            0:00:00.057914021 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "rtph264depay"
            0:00:00.057918969 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no sink [source=@0x55c070f730]
            0:00:00.057923292 14685   0x55c069b780 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "h264parse"!
            0:00:00.057927354 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "h264parse"
            0:00:00.057932250 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@(nil)]
            0:00:00.057936260 14685   0x55c069b780 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "qtivdec"!
            0:00:00.057939437 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "qtivdec"
            0:00:00.057944072 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@(nil)]
            0:00:00.057947874 14685   0x55c069b780 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "qtivtransform"!
            0:00:00.057951467 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "qtivtransform"
            0:00:00.057956884 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@(nil)]
            0:00:00.057971726 14685   0x55c069b780 WARN     GST_ELEMENT_FACTORY gstelementfactory.c:456:gst_element_factory_make: no such element factory "autovideoconvert"!
            0:00:00.057979851 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:816:priv_gst_parse_yyparse: no element "autovideoconvert"
            0:00:00.057985215 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@(nil)]
            0:00:00.058182496 14685   0x55c069b780 ERROR           GST_PIPELINE grammar.y:901:priv_gst_parse_yyparse: link has no source [sink=@0x55c06f51b0]
            
            (python:14685): GStreamer-CRITICAL **: 08:49:15.037: gst_caps_get_structure: assertion 'GST_IS_CAPS (caps)' failed
            
            (python:14685): GStreamer-CRITICAL **: 08:49:15.038: gst_structure_get_int: assertion 'structure != NULL' failed
            [ WARN:0@30.090] global cap_gstreamer.cpp:1714 open OpenCV | GStreamer warning: cannot query video width/height
            
            (python:14685): GStreamer-CRITICAL **: 08:49:15.038: gst_structure_get_fraction: assertion 'structure != NULL' failed
            [ WARN:0@30.090] global cap_gstreamer.cpp:1722 open OpenCV | GStreamer warning: cannot query video fps
            [ WARN:0@30.090] global cap_gstreamer.cpp:1777 open OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
            
            (python:14685): GStreamer-CRITICAL **: 08:50:20.041: gst_sample_get_caps: assertion 'GST_IS_SAMPLE (sample)' failed
            [ERROR:0@95.092] global cap_gstreamer.cpp:934 retrieveVideoFrame GStreamer: gst_sample_get_caps() returns NULL
            
            (python:14685): GStreamer-CRITICAL **: 08:51:25.042: gst_sample_get_caps: assertion 'GST_IS_SAMPLE (sample)' failed
            [ERROR:0@160.094] global cap_gstreamer.cpp:934 retrieveVideoFrame GStreamer: gst_sample_get_caps() returns NULL
            ^C
            (python:14685): GStreamer-CRITICAL **: 08:52:30.044: gst_sample_get_caps: assertion 'GST_IS_SAMPLE (sample)' failed
            [ERROR:0@225.096] global cap_gstreamer.cpp:934 retrieveVideoFrame GStreamer: gst_sample_get_caps() returns NULL
            Traceback (most recent call last):
              File "/voxl-mpa-tools/tools/python/rtsp_rx_mpa_pub.py", line 62, in <module>
                ret, frame = vcap.read()
            KeyboardInterrupt
            
            

            Today, I referenced the official website and tested the situation of OpenCV, gstreamer, and MPA with other example commands. The result is that the image produced by gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink can ultimately be seen on the portal. So, I don't think it's an issue with gstreamer installation?

            My RTSP source is from an external camera (edge computing device) acting as a server, connected to VOXL via Ethernet for transmission. Currently, I am not using VOXL's built-in camera or UVC camera, and I am not generating an RTSP stream through VOXL's services.

            Ethan WuE Offline
            Ethan WuE Offline
            Ethan Wu
            Contributor
            wrote on last edited by
            #16

            @Ethan-Wu

            About the error 'unexpected reference "gst-launch-1" ', I do get the same error when I replace the gstreamer command with gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink, so I think that's not a problem.

            Alex KushleyevA 1 Reply Last reply
            0
            • Ethan WuE Ethan Wu

              @Ethan-Wu

              About the error 'unexpected reference "gst-launch-1" ', I do get the same error when I replace the gstreamer command with gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink, so I think that's not a problem.

              Alex KushleyevA Offline
              Alex KushleyevA Offline
              Alex Kushleyev
              ModalAI Team
              wrote on last edited by Alex Kushleyev
              #17

              @Ethan-Wu ,

              Hmm. When i tested with a local rtsp stream generated on the same voxl2, the video capture started immediately. The freezing would occur in the python client side sometime after i got a bunch of frames (when using voxl-streamer to produce the rtsp stream). When the freezing happened, it looked like voxl-streamer dropped the client connection for some reason. I will test with a local ip cam that is producing rtsp today.

              It seems gstreamer rtsp receiving end may not be running correctly on your end. How about i share with you updated native opencv package with python bindings and you could try running this natively on voxl2 without your environment? This whay you can test what I am testing.

              Alex KushleyevA Ethan WuE 2 Replies Last reply
              0
              • Alex KushleyevA Alex Kushleyev

                @Ethan-Wu ,

                Hmm. When i tested with a local rtsp stream generated on the same voxl2, the video capture started immediately. The freezing would occur in the python client side sometime after i got a bunch of frames (when using voxl-streamer to produce the rtsp stream). When the freezing happened, it looked like voxl-streamer dropped the client connection for some reason. I will test with a local ip cam that is producing rtsp today.

                It seems gstreamer rtsp receiving end may not be running correctly on your end. How about i share with you updated native opencv package with python bindings and you could try running this natively on voxl2 without your environment? This whay you can test what I am testing.

                Alex KushleyevA Offline
                Alex KushleyevA Offline
                Alex Kushleyev
                ModalAI Team
                wrote on last edited by
                #18

                I just tried playing a local rtsp stream from an ip cam (using rtsp_rx_mpa_pub.py) and it initially starts playing but gets stuck after a few seconds. However, changing the pipeline to use the following (using avdec_h264 instead of qtivdec:

                 .... rtph264depay ! h264parse config-interval=-1 ! avdec_h264 ! autovideoconvert ! appsink
                

                Does not get stuck.

                So there must be something about the hw decoder that causes it to get stuck, I will investigate further..

                1 Reply Last reply
                0
                • Alex KushleyevA Alex Kushleyev

                  @Ethan-Wu ,

                  Hmm. When i tested with a local rtsp stream generated on the same voxl2, the video capture started immediately. The freezing would occur in the python client side sometime after i got a bunch of frames (when using voxl-streamer to produce the rtsp stream). When the freezing happened, it looked like voxl-streamer dropped the client connection for some reason. I will test with a local ip cam that is producing rtsp today.

                  It seems gstreamer rtsp receiving end may not be running correctly on your end. How about i share with you updated native opencv package with python bindings and you could try running this natively on voxl2 without your environment? This whay you can test what I am testing.

                  Ethan WuE Offline
                  Ethan WuE Offline
                  Ethan Wu
                  Contributor
                  wrote on last edited by
                  #19

                  @Alex-Kushleyev
                  Sharing opencv package would be great, and I also want to share how I built opencv that supports gstreamer. I looked into this issue and followed instructions here, and made sure I saw the followings information to get gstreamer working with opencv by calling cv2.getBuildInformation() :

                    Video I/O:
                      DC1394:                      NO
                      FFMPEG:                      YES
                        avcodec:                   YES (57.107.100)
                        avformat:                  YES (57.83.100)
                        avutil:                    YES (55.78.100)
                        swscale:                   YES (4.8.100)
                        avresample:                NO
                      GStreamer:                   YES (1.14.5)
                      v4l/v4l2:                    YES (linux/videodev2.h)
                  
                  

                  I was using conda for virtual environment and run opencv with python 3.10 (3.9 and 3.8 are also tested), and my opencv version is 4.9.0.80.

                  Alex KushleyevA 1 Reply Last reply
                  0
                  • Ethan WuE Ethan Wu

                    @Alex-Kushleyev
                    Sharing opencv package would be great, and I also want to share how I built opencv that supports gstreamer. I looked into this issue and followed instructions here, and made sure I saw the followings information to get gstreamer working with opencv by calling cv2.getBuildInformation() :

                      Video I/O:
                        DC1394:                      NO
                        FFMPEG:                      YES
                          avcodec:                   YES (57.107.100)
                          avformat:                  YES (57.83.100)
                          avutil:                    YES (55.78.100)
                          swscale:                   YES (4.8.100)
                          avresample:                NO
                        GStreamer:                   YES (1.14.5)
                        v4l/v4l2:                    YES (linux/videodev2.h)
                    
                    

                    I was using conda for virtual environment and run opencv with python 3.10 (3.9 and 3.8 are also tested), and my opencv version is 4.9.0.80.

                    Alex KushleyevA Offline
                    Alex KushleyevA Offline
                    Alex Kushleyev
                    ModalAI Team
                    wrote on last edited by
                    #20

                    @Ethan-Wu , I uploaded the opencv deb here : https://storage.googleapis.com/modalai_public/temp/voxl2-misc-packages/voxl-opencv_4.5.5-3_arm64.deb

                    it was built using this branch of voxl-opencv project : https://gitlab.com/voxl-public/voxl-sdk/third-party/voxl-opencv/-/tree/add-python3-bindings/

                    You can just install that deb to overwrite your existing opencv installation and try the python scripts for rtsp natively on voxl2

                    By the way, how do you get gstreamer to output that debug info? does it automatically print it if there is an issue?

                    Ethan WuE A 3 Replies Last reply
                    0
                    • Alex KushleyevA Alex Kushleyev

                      @Ethan-Wu , I uploaded the opencv deb here : https://storage.googleapis.com/modalai_public/temp/voxl2-misc-packages/voxl-opencv_4.5.5-3_arm64.deb

                      it was built using this branch of voxl-opencv project : https://gitlab.com/voxl-public/voxl-sdk/third-party/voxl-opencv/-/tree/add-python3-bindings/

                      You can just install that deb to overwrite your existing opencv installation and try the python scripts for rtsp natively on voxl2

                      By the way, how do you get gstreamer to output that debug info? does it automatically print it if there is an issue?

                      Ethan WuE Offline
                      Ethan WuE Offline
                      Ethan Wu
                      Contributor
                      wrote on last edited by
                      #21

                      @Alex-Kushleyev You can set the environment variable GST_DEBUG to the number that fits the debug level you prefer. I made it 2 so that I can see warning and error output from gst-launch-1.0, here's the reference documentation : https://gstreamer.freedesktop.org/documentation/tutorials/basic/debugging-tools.html?gi-language=c

                      1 Reply Last reply
                      0
                      • Alex KushleyevA Alex Kushleyev

                        @Ethan-Wu , I uploaded the opencv deb here : https://storage.googleapis.com/modalai_public/temp/voxl2-misc-packages/voxl-opencv_4.5.5-3_arm64.deb

                        it was built using this branch of voxl-opencv project : https://gitlab.com/voxl-public/voxl-sdk/third-party/voxl-opencv/-/tree/add-python3-bindings/

                        You can just install that deb to overwrite your existing opencv installation and try the python scripts for rtsp natively on voxl2

                        By the way, how do you get gstreamer to output that debug info? does it automatically print it if there is an issue?

                        Ethan WuE Offline
                        Ethan WuE Offline
                        Ethan Wu
                        Contributor
                        wrote on last edited by Ethan Wu
                        #22

                        @Alex-Kushleyev
                        Hi,
                        Do I just need to upload it to voxl and dpkg -i opencv.deb so that it will overwrite my opencv-python? I did so and failed to start the steam as expected.

                        Also, I searched for some other replacement for opencv and got the code below :

                        import gi
                        gi.require_version('Gst', '1.0')
                        from gi.repository import Gst, GObject, GLib
                        import numpy as np
                        import time
                        import cv2
                        import sys
                        
                        # Initialize GStreamer
                        Gst.init(None)
                        
                        # Define the RTSP stream URL
                        stream_url = 'rtsp://192.168.0.201:554/live0'
                        
                        # Create a GStreamer pipeline
                        pipeline = Gst.parse_launch(f"rtspsrc location={stream_url} latency=0 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! appsink")
                        
                        # Start the pipeline
                        pipeline.set_state(Gst.State.PLAYING)
                        
                        # Main loop to read frames from pipeline and publish them to MPA
                        frame_cntr = 0
                        while True:
                            # Retrieve a frame from the pipeline
                            sample = pipeline.get_by_name('appsink0').emit('pull-sample')
                            buffer = sample.get_buffer()
                            result, info = buffer.map(Gst.MapFlags.READ)
                            if result:
                                # Convert the frame to numpy array
                                data = np.ndarray((info.size,), dtype=np.uint8, buffer=info.data)
                                frame = np.reshape(data, (640, 720, 3))
                                # Increment frame counter
                                frame_cntr += 1
                                sys.stdout.write("\r")
                                sys.stdout.write(f'got frame {frame_cntr} with dims {frame.shape}')
                                sys.stdout.flush()
                                # Publish the frame to MPA
                                cv2.imshow("frame", frame)
                            else:
                                print("Error mapping buffer")
                            # Delay for a short period to control frame rate
                            if cv2.waitKey(30) == ord('q'):
                                break
                        
                        
                        cv2.destroyAllWindows()
                        # Stop the pipeline
                        pipeline.set_state(Gst.State.NULL)
                        
                        

                        And I saw image like this:

                        Screenshot from 2024-03-22 17-55-03.png

                        Which looks like a decode error, and I will look into it next week.

                        Alex KushleyevA 1 Reply Last reply
                        0
                        • Ethan WuE Ethan Wu

                          @Alex-Kushleyev
                          Hi,
                          Do I just need to upload it to voxl and dpkg -i opencv.deb so that it will overwrite my opencv-python? I did so and failed to start the steam as expected.

                          Also, I searched for some other replacement for opencv and got the code below :

                          import gi
                          gi.require_version('Gst', '1.0')
                          from gi.repository import Gst, GObject, GLib
                          import numpy as np
                          import time
                          import cv2
                          import sys
                          
                          # Initialize GStreamer
                          Gst.init(None)
                          
                          # Define the RTSP stream URL
                          stream_url = 'rtsp://192.168.0.201:554/live0'
                          
                          # Create a GStreamer pipeline
                          pipeline = Gst.parse_launch(f"rtspsrc location={stream_url} latency=0 ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! appsink")
                          
                          # Start the pipeline
                          pipeline.set_state(Gst.State.PLAYING)
                          
                          # Main loop to read frames from pipeline and publish them to MPA
                          frame_cntr = 0
                          while True:
                              # Retrieve a frame from the pipeline
                              sample = pipeline.get_by_name('appsink0').emit('pull-sample')
                              buffer = sample.get_buffer()
                              result, info = buffer.map(Gst.MapFlags.READ)
                              if result:
                                  # Convert the frame to numpy array
                                  data = np.ndarray((info.size,), dtype=np.uint8, buffer=info.data)
                                  frame = np.reshape(data, (640, 720, 3))
                                  # Increment frame counter
                                  frame_cntr += 1
                                  sys.stdout.write("\r")
                                  sys.stdout.write(f'got frame {frame_cntr} with dims {frame.shape}')
                                  sys.stdout.flush()
                                  # Publish the frame to MPA
                                  cv2.imshow("frame", frame)
                              else:
                                  print("Error mapping buffer")
                              # Delay for a short period to control frame rate
                              if cv2.waitKey(30) == ord('q'):
                                  break
                          
                          
                          cv2.destroyAllWindows()
                          # Stop the pipeline
                          pipeline.set_state(Gst.State.NULL)
                          
                          

                          And I saw image like this:

                          Screenshot from 2024-03-22 17-55-03.png

                          Which looks like a decode error, and I will look into it next week.

                          Alex KushleyevA Offline
                          Alex KushleyevA Offline
                          Alex Kushleyev
                          ModalAI Team
                          wrote on last edited by
                          #23

                          @Ethan-Wu , yes the installation of opencv .deb should be done use dpkg -i <package.deb>.

                          When you installed the newer version of Gstreamer, did you overwrite the existing one or did the new version go into another location?

                          it seems the new version of Gstreamer is not functioning correctly.

                          You should be able to test the gstreamer using command line pipeline like this (without python) and just dump the frames to stdout:

                          gst-launch-1.0 rtspsrc location=rtsp://127.0.0.1:8900/live latency=0 ! queue ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! filesink location=/dev/stdout
                          

                          If that is not working, then you may want to reflash VOXL2 back to original state, i am not sure how to recover the original gstreamer.

                          Ethan WuE 1 Reply Last reply
                          0
                          • Alex KushleyevA Alex Kushleyev

                            @Ethan-Wu , yes the installation of opencv .deb should be done use dpkg -i <package.deb>.

                            When you installed the newer version of Gstreamer, did you overwrite the existing one or did the new version go into another location?

                            it seems the new version of Gstreamer is not functioning correctly.

                            You should be able to test the gstreamer using command line pipeline like this (without python) and just dump the frames to stdout:

                            gst-launch-1.0 rtspsrc location=rtsp://127.0.0.1:8900/live latency=0 ! queue ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! filesink location=/dev/stdout
                            

                            If that is not working, then you may want to reflash VOXL2 back to original state, i am not sure how to recover the original gstreamer.

                            Ethan WuE Offline
                            Ethan WuE Offline
                            Ethan Wu
                            Contributor
                            wrote on last edited by
                            #24

                            @Alex-Kushleyev
                            Hi, thank you for your assistance over the past few days. I am now able to successfully stream videos from Trip to Voxl and QGC using the code I provided earlier, combined with pympa. The decoding issue I mentioned occurred because the video streamed from Trip2 was in YUV420 format, but I reshaped the data in RGB format.

                            As for the original method using OpenCV + GStreamer, I am still unsure where the problem lies. It could be a decoding issue or an installation problem with OpenCV and GStreamer. Additionally, there were many unexpected situations related to GStreamer during the research process that have not yet been resolved. If I manage to identify the source of the problem, I will provide further information.

                            Alex KushleyevA 1 Reply Last reply
                            0
                            • Ethan WuE Ethan Wu

                              @Alex-Kushleyev
                              Hi, thank you for your assistance over the past few days. I am now able to successfully stream videos from Trip to Voxl and QGC using the code I provided earlier, combined with pympa. The decoding issue I mentioned occurred because the video streamed from Trip2 was in YUV420 format, but I reshaped the data in RGB format.

                              As for the original method using OpenCV + GStreamer, I am still unsure where the problem lies. It could be a decoding issue or an installation problem with OpenCV and GStreamer. Additionally, there were many unexpected situations related to GStreamer during the research process that have not yet been resolved. If I manage to identify the source of the problem, I will provide further information.

                              Alex KushleyevA Offline
                              Alex KushleyevA Offline
                              Alex Kushleyev
                              ModalAI Team
                              wrote on last edited by
                              #25

                              @Ethan-Wu , thanks for the update! I am glad you got it working. The best way to diagnose the gstreamer issue would be to re-install VOXL2 SDK and see if the original gstreamer has any issues. As I mentioned, in my testing, i have not seen your errors, and i was able to receive and decode streams, the only issue i saw was the stream sometimes stops, depending on the rtsp source. This must be a gstreamer run-time / pipeline configuration issue , i suspect that something just times out and connection is dropped. If i find how to resolve it, will follow up here.

                              1 Reply Last reply
                              0
                              • A Aaky referenced this topic on
                              • A Aaky referenced this topic on
                              • Alex KushleyevA Alex Kushleyev

                                @Ethan-Wu , I uploaded the opencv deb here : https://storage.googleapis.com/modalai_public/temp/voxl2-misc-packages/voxl-opencv_4.5.5-3_arm64.deb

                                it was built using this branch of voxl-opencv project : https://gitlab.com/voxl-public/voxl-sdk/third-party/voxl-opencv/-/tree/add-python3-bindings/

                                You can just install that deb to overwrite your existing opencv installation and try the python scripts for rtsp natively on voxl2

                                By the way, how do you get gstreamer to output that debug info? does it automatically print it if there is an issue?

                                A Offline
                                A Offline
                                anghung
                                Contributor
                                wrote on last edited by
                                #26

                                @Alex-Kushleyev said in Seeking Reference Code for MPA Integration with RTSP Video Streams for TFLite Server:

                                @Ethan-Wu , I uploaded the opencv deb here : https://storage.googleapis.com/modalai_public/temp/voxl2-misc-packages/voxl-opencv_4.5.5-3_arm64.deb

                                it was built using this branch of voxl-opencv project : https://gitlab.com/voxl-public/voxl-sdk/third-party/voxl-opencv/-/tree/add-python3-bindings/

                                You can just install that deb to overwrite your existing opencv installation and try the python scripts for rtsp natively on voxl2

                                By the way, how do you get gstreamer to output that debug info? does it automatically print it if there is an issue?

                                @Alex-Kushleyev I see the add-python3-bindings has new commit.

                                could u rebuilt the deb? I cant build the package with gstreamer.

                                Thanks!

                                a680d020-8a1f-4679-bdd0-bfa2ab01013a-image.png

                                Alex KushleyevA 1 Reply Last reply
                                0
                                • A anghung

                                  @Alex-Kushleyev said in Seeking Reference Code for MPA Integration with RTSP Video Streams for TFLite Server:

                                  @Ethan-Wu , I uploaded the opencv deb here : https://storage.googleapis.com/modalai_public/temp/voxl2-misc-packages/voxl-opencv_4.5.5-3_arm64.deb

                                  it was built using this branch of voxl-opencv project : https://gitlab.com/voxl-public/voxl-sdk/third-party/voxl-opencv/-/tree/add-python3-bindings/

                                  You can just install that deb to overwrite your existing opencv installation and try the python scripts for rtsp natively on voxl2

                                  By the way, how do you get gstreamer to output that debug info? does it automatically print it if there is an issue?

                                  @Alex-Kushleyev I see the add-python3-bindings has new commit.

                                  could u rebuilt the deb? I cant build the package with gstreamer.

                                  Thanks!

                                  a680d020-8a1f-4679-bdd0-bfa2ab01013a-image.png

                                  Alex KushleyevA Offline
                                  Alex KushleyevA Offline
                                  Alex Kushleyev
                                  ModalAI Team
                                  wrote on last edited by Alex Kushleyev
                                  #27

                                  @anghung , sure, I can re-build it. I will talk to the team about making this updated opencv build included into main SDK.

                                  Meanwhile, the only change was creating the directory, so you can just manually do this before installing the current deb (from the link above) on voxl2:

                                  mkdir -p /usr/lib/python3.6/dist-packages/
                                  
                                  A 3 Replies Last reply
                                  0
                                  • Alex KushleyevA Alex Kushleyev

                                    @anghung , sure, I can re-build it. I will talk to the team about making this updated opencv build included into main SDK.

                                    Meanwhile, the only change was creating the directory, so you can just manually do this before installing the current deb (from the link above) on voxl2:

                                    mkdir -p /usr/lib/python3.6/dist-packages/
                                    
                                    A Offline
                                    A Offline
                                    anghung
                                    Contributor
                                    wrote on last edited by anghung
                                    #28

                                    @Alex-Kushleyev
                                    yes, this is same as i install that package.
                                    05d5b1ba-7c83-43d2-a259-3da50d81c201-image.png

                                    1 Reply Last reply
                                    0
                                    • Alex KushleyevA Alex Kushleyev

                                      @anghung , sure, I can re-build it. I will talk to the team about making this updated opencv build included into main SDK.

                                      Meanwhile, the only change was creating the directory, so you can just manually do this before installing the current deb (from the link above) on voxl2:

                                      mkdir -p /usr/lib/python3.6/dist-packages/
                                      
                                      A Offline
                                      A Offline
                                      anghung
                                      Contributor
                                      wrote on last edited by
                                      #29

                                      @Alex-Kushleyev

                                      For the original topic, integrate RTSP stream for tflite server.

                                      I found that the problem is the sample code u provide, in metadata, format is RGB.

                                      However, in tflite, https://gitlab.com/voxl-public/voxl-sdk/services/voxl-tflite-server/-/blob/master/src/inference_helper.cpp?ref_type=heads#L305 it only handle NV12 NV21 YUV422 RAW8.

                                      Thus, i need to make the RTSP stream NV12, than tflie can take the rest of the job.

                                      ! ... ! ... ! videoconvert ! video/x-raw,format=NV12 ! appsink
                                      

                                      Are there proper way to handle such format problem? Because NV12 got into tflite, it still need to resize to RGB format.

                                      Thanks!

                                      A 1 Reply Last reply
                                      0
                                      • A anghung

                                        @Alex-Kushleyev

                                        For the original topic, integrate RTSP stream for tflite server.

                                        I found that the problem is the sample code u provide, in metadata, format is RGB.

                                        However, in tflite, https://gitlab.com/voxl-public/voxl-sdk/services/voxl-tflite-server/-/blob/master/src/inference_helper.cpp?ref_type=heads#L305 it only handle NV12 NV21 YUV422 RAW8.

                                        Thus, i need to make the RTSP stream NV12, than tflie can take the rest of the job.

                                        ! ... ! ... ! videoconvert ! video/x-raw,format=NV12 ! appsink
                                        

                                        Are there proper way to handle such format problem? Because NV12 got into tflite, it still need to resize to RGB format.

                                        Thanks!

                                        A Offline
                                        A Offline
                                        anghung
                                        Contributor
                                        wrote on last edited by
                                        #30
                                        This post is deleted!
                                        1 Reply Last reply
                                        0
                                        • Alex KushleyevA Alex Kushleyev

                                          @anghung , sure, I can re-build it. I will talk to the team about making this updated opencv build included into main SDK.

                                          Meanwhile, the only change was creating the directory, so you can just manually do this before installing the current deb (from the link above) on voxl2:

                                          mkdir -p /usr/lib/python3.6/dist-packages/
                                          
                                          A Offline
                                          A Offline
                                          anghung
                                          Contributor
                                          wrote on last edited by
                                          #31

                                          @Alex-Kushleyev

                                          Hi, I try to use HW based decoder with HW resize.
                                          I also try SW decoding, cv2.VideoCapture(stream,cv2.CAP_GSTREAMER) doesn't workout.

                                          211180f6-5ea1-497f-879e-6c63c289f4ef-image.png

                                          But in protal, it cannot show anything.

                                          a0e90a4f-a02b-4638-801d-03c9097c2dbc-image.png

                                          The following is using gi to launch gstreamer and upscale 720 to 1080.

                                          c1186682-a7d0-43e4-81c1-9e4f366cfca7-image.png

                                          Alex KushleyevA 1 Reply Last reply
                                          0

                                          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                          With your input, this post could be even better 💗

                                          Register Login
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          ModalAI
                                          Categories Recent Tags ModalAI.com Docs
                                          © 2026 ModalAI® · Accelerating autonomy for smaller, smarter, safer drones · Powered by NodeBB
                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups