When testing with “videotestsrc ! video/x-raw, width=1280, h…”
I get this null object (nulls!) error:
my installation is what everyone recommends:
gst-launch-1.0 version 1.9.2
qgroundcontrol plays my udp port 5600 stream from my raspberry pi, but I want to use mission planner! it has all the features and makes more sense to me.
The forums say mission planner will play video on 5600 immediately, but do I have to have the url source pipeline in the hud configured to something special?
I watched about an hour of a gstreamer tutorial and have been reading documentation to understand this concept of pipeline streaming and adding features by appending “pads” that takes a source and then sends out via another sink.
I use this pipline in cmd line: gst-launch-1.0 -e -v udpsrc port=5600 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
I made the hud video set gstreamer source url blank.
then I have to quickly select gstream in the temp window and then my pi video appears in the hud (it doesn’t automatically show up). However it is laggy or rather skips a lot of frames versus buttery smooth wifi 100 ms latency that I get in qgroundcontrol. Also sometimes it freezes on the first frame like others have mentioned.
It would appear the glitchyness is from thermal throttle of the pi… I suppose this as I observe the video increase in glitchyness the more I continue testing or have the camera on. I watched the video in the hud in MP and also compared it to a d3d gstreamer window initiated from the command line and the video quality was similar.
I am gonna make a tutorial after I am done with this to save people the searches to figure out the basic stuff (like explaining why certain versions work) to get gstreamer hud working.
missionplanner downloads its own version of gstreamer.
you no longer need to install it.
your test pipeline has jitterbuffer and no sync, so the jitter buffer will be adding latency, the no sync part should be ok though
what is your input source?
what is the full pipeline you are testing with?
Thanks. I am always surprised by how much time you spend helping people out on these forums.
MP has its own gstreamer install… nifty!
I am using two resolutions from a raspberry pi camera:
raspivid -n -t 0 -rot 180 -w 320 -h 240 -fps 30 -b 250000 -co 60 -sh 50 -sa 10 -o - | gst-launch-1.0 -e -vvvv fdsrc ! h264parse ! rtph264pay pt=96 config-interval=5 ! udpsink host=“gcsIP” port=5600
raspivid -n -t 0 -rot 180 -w 640 -h 480 -fps 30 -b 600000 -co 60 -sh 40 -sa 10 -o - | gst-launch-1.0 -e -vvvv fdsrc ! h264parse ! rtph264pay pt=96 config-interval=5 ! udpsink host=“gcsIP” port=5600
They are pipelines I found from another forum (navio pi gstreamer), that worked well enough for the raspberry pi 3 to handle while also running arduplane.
What do I need to configure the gstreamer url to in the video setting under the hud to receive it automatically?
The testing pipeline was “videotestsrc ! video/x-raw, width=1280, height=720,framerate=25/1 ! clockoverlay ! videoconvert ! video/x-raw,format=BGRA ! appsink name=outsink”
and I was under the impression that this piepline was to be placed in the “gstreamer url” field under the hud video options to test…
and sure enough today when I placed it there and pressed okay it started playing the test feed in the video! I tried several times yesterday the same thing, but kept getting the null object error in the photo above. tried closing MP and restarting and all the basic troubleshooting… but today it is working- aye aye aye.
I will now test if I can get the feed from the pi.
Thanks again Michael for your good karma.
for future readers :
Testing your MP’s hud GStreamer video:
right click on the hud -> select “video” -> select “set GStreamer source”
place this testing pipeline in the “GStreamer url” field:
videotestsrc ! video/x-raw, width=1280, height=720,framerate=25/1 ! clockoverlay ! videoconvert ! video/x-raw,format=BGRA ! appsink name=outsink
you should see this after a few seconds:
This is honestly embarrassing: Today I open mission planner, made sure gstreamer url field under video set GStreamer source was blank, and then started the gstreamer my usual pipeline with (udpsink host = “my GCS IP” port = 5600) on my pi and the video is in the hud. Ta Da. Just like you have explained on other forums…
So I was doing everything right, but somewhere there was a condition that was causing a bug yesterday.
Thanks for confirming that I was setting things up correctly.
Also MP’s gstreamer must be using the identify feature that allows GStreamer to figure out what the source pipeline is on port 5600? I notice it doesn’t like the source pipeline to change once it is initially configured. Like pipeline “a” can be stopped and restarted from and the MP hud will have no problem continuing playing the video. But if pipeline “a” is stopped and pipeline “b” started MP will not know how to handle the change (probably because it has been designed to obviously, but if I do some more reading of GStreamer I might experiment with dynamic pipelines as my pi has a python script that monitors 4g connection quality and respectively changes the video quality)