Servers by jDrones

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.

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?

@Michael_Oborne

I have contacted the maker of UAVCast to see what pipelines he has created for video stream. I will post them when I hear back from him, he might also post them in here as I sent him this topic.

Windows QGC uses 1.4.14 gstreamer.

@Michael_Oborne
gst-launch-1.0 videotestsrc ! x264enc ! video/x-h264, stream-format=byte-stream ! rtph264pay ! udpsink host=192.168.1.100 port=5600

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

Using uavcast the developer provided a standalone command line script to start video stream outside of QGC or MP and the quality of this stream using either the pi cam and a logitech C920 is substantially better streaming at Full HD 1920x1080 30FPS and 2,000,000 bitrate, using this command on gstreamer 1.4.5.
START “UDP” C:\Windows\System32\cmd.exe /k C:\gstreamer\1.0\x86_64\bin\gst-launch-1.0 -v udpsrc port=%PORT% caps=“application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264” ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false
@Michael_Oborne @DonLakeFlyer using either MP or QGC and streaming directly to both systems I was unable to get a useable video feed with eirher the pi cam or the C920 in MP the video is extremely laggy and pixelated and in QGC the video feed was just green. I will try and provide video of both of them to show the issues.

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?

Servers by jDrones