I’ve been experimenting with Gstreamer since 2015 now. I used gstreamer to stream live video from my drones mainly. Gstreamer is quite efficient for such task (depending on what hardware you have). Back at that time, I didn’t have much knowledge about video codecs, compression, encryption and so. I only knew the differences between udp, tcp and some basic understanding of bandwidth. I knew that MJPG streamer was much worse than gstreamer (experienced it first hand).
MJPG-streamer streams the video in MJPG format, meaning each frame is actually a JPG, so if your single frame is 10kb when you have a one second video with 30frames, 1 second becomes 300kb.
However with h264 encoding, it is a little different. As I understood h264 encodes the frames in a way that only the differences between frames are encoded (plus the initial frame). So instead of repeating the data that was already transmitted, it sends the differences. Soo it consumes less bandwidth for the same data! However it requires more processing power. Often there is hardware support for h264 encoding decoding. Sadly the board that I’m using Orange Pi PC lacks drivers and community for Gstreamer and hardware accelerated h264 encoding. This results in heavy CPU.
As we can see there is a trade of between CPU and bandwidth. However modern stuff should have hardware support for h264 so often this is not the case. I will share my gstreamer configurations quite soon.