Difference in gstreamer between QGC and MP

,

@DonLakeFlyer @Michael_Oborne
I have been messing around with UAVCast in both MP and QGC and have notice a noticeable difference in streaming quality between the two using the exact same streaming setting. MP freezes often and is almost un-useable but in QGC with the same setting is much much better. What is the difference between how these two ground controls stream. Also note that the upload and download speed of the 4g lte modem was 23mb down and 12mb up so more than plenty of speed for video streaming at 240p, and when its connected to our wifi network which is 600mb down and 300mb upload MP still has issues by issues i mean the video feed freezes and is very glitchy. SO this cannot be related to download and upload speeds. I will try and post a video of the two huds when I can get one.

1 Like

MP internally uses gstreamer-1.0-x86_64-1.12.4.zip

im not sure what version QGC uses.

what pipeline are you using inside MP?

Windows QGC uses 1.4.14 gstreamer.

Does QGC or MP use rtpjitterbuffer?

After talking with Bernt he thinks this might be the reason why the video feed is so much different in QGC and MP

rtpjitterbuffer belongs to rtpmanager plugin which does not exist in MP or QGC

at least to my knowledge" Is this true? What is the difference between gstreamer 1.4.5 and the gstreamers used in MP and QGC?

in MP you can define your own pipeline, but because you are using port 5600, the pipeline is hardcoded.

to define your own right click the hud > video > gstreamer source

do you have the option to define your destination port, ie 5600 to something else?

the reason for not having the jitter buffer is that it can increase latency

yes I can define video on any port id like through uavcast. So if i set video source using this but define a different port it should include the rtpjitterbuffer? I am not worried about latency as the speed of the 4g lte modem is 25mb download and 16mb upload so more than enough speed.
gst-launch-1.0 -v udpsrc port=5600 caps=‘application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264’ ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false

perfect

can you set it to other port (5601), then try
udpsrc port=5601 caps=‘application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264’ ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! videoconvert ! video/x-raw,format=BGRA ! appsink name=outsink

another example
rtspsrc location=rtsp://192.168.1.21/live ! application/x-rtp ! rtph265depay ! avdec_h265 ! videoconvert ! video/x-raw,format=BGRA ! appsink name=outsink

@Michael_Oborne

I can confirm the above code worked except that had to change single quotes ' to " in the caps segments not sure why. Using 4g lte video streaming there is almost no lag in the video using this stream and quality is greatly increased over the original MP gstream. My question is if we set this pipeline to this then close MP will this pipeline still be activated the next time we open MP or will you have to set gstream source each time, will the video appear as long as we have the port set correctly? Is there a way to hard code this stream into MP without setting the source?

the easy way is MP support commandline arguments on startup
there is one for gstreamer

missionplanner.exe -gstream “udpsrc port=5601 caps=‘application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264’ ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! videoconvert ! video/x-raw,format=BGRA ! appsink name=outsink”

So what about QGC on android?
I use UavCast too.
But in a year i was not able to use the video.

So i basically fly blind.

Is there a way to have a good video on my Android device using lte connection?