Show full content
This year Wifibroadcast has its 10 year anniversary! Time to gather what has happened since then.
This spring I was getting motivated to try out again FPV. So I dug out my almost 20 year old quadcopter with the good old Wifibroadcast and gave it a shot. It did not end well. Reason for it was that I completely lost the control link mid-air (using my Graupner Hott system). It was quite terrifying seeing exactly what is happening via the video stream while being completely helpless. I quickly put the quad back into storage and went shopping for a much smaller 2″ Pavo Pico Pro using ELRS. While waiting for the delivery I explored what has happened in the Wifibroadcast ecosystem in the past 10 year – this is what this post is about.
My research was a rather quick one and is definitely neither fully complete nor fully right. If you have some corrections/additions, please let me know in the comments.
The Start of WifibroadcastBack in 2015 I entered FPV for the first time – and I was in disbelief. Back then everything ran on analog. I had a hard time understanding this. Why is everyone using 60 year old technology in 2015? Why is there no commercial product offering a digital alternative? Everything seemed to be there: Cheap digital radios, high quality video codecs and encoders in hardware, cheap CMOS image sensors. Therefore I “plugged” all these ingredients together and had a working digital FPV system. That was SO much fun, I really enjoyed the development of Wifibroadcast.
The Time I stopped active Wifibroadcast DevelopmentSomewhere around 2016 I stopped development on Wifibroadcast simply because other forks where much more active (namely EZ-Wifibroadcast) and I could not keep up with the pace of their development. I was quite happy to see that the community took great care of the project, so that was a happy “goodbye” for me.
From there I moved on to other (much less useful) projects and when I checked back in this year I did not expect great developments. Back in 2015 Wifibroadcast was the first digital video link and I expected it to become obsolete with commercial products from DJI and alike. But boy was I wrong. The Wifibroadcast ecosystem seems to be more alive than ever. I would have never dreamed of commercial products designed for Wifibroadcast to become a thing but here we are – I am so excited about this!
EZ-WifibroadcastEZ-Wifibroadcast was one of the first forks of Wifibroadcast. It improved and extended my rather basic WBC images with lots of features and provided a really good starting point for tinkerers. The amount of improvements is impressive and I think this image gave Wifibroadcast a good initial push into the hands of more users. Unfortunately, development stopped seven years ago.
DroneBridgeDroneBridge seemed to be quite an ambitious project that also unfortunately seems to have stopped development 4 year ago. It was intended as an all-in-one package which does RC link, video link, telemetry link all together with a custom Android app.
OpenHDOpenHD seems to be one of the most active forks of Wifibroadcast. They as well deliver the “full package” of air unit plus ground station software. The hardware support seems to focus mostly on the traditional SBC setup, which makes it a bit bulkier than more integrated hardware solutions. But since they anyhow seem to target more traditional larger aircrafts and not so much super micro racing drones that shouldn’t matter too much.
What I really like about OpenHD (and something I regret to not have included in my original Wifibroadcast license terms) is their explicit prohibition of military usage of their project. Wifibroadcast was always intended as something to bring people joy not harm. So both thumbs up to the OpenHD team for making this explicit!
FPV_VRFPV_VR was an Android app that forked my very primitive app and made it into something gorgeous. Decrease in latency, a fully featured OSD, ease of use. Unfortunately, this app also seems to be discontinued. Question to better informed people: Was it merged into the OpenHD app?
FPVueFPVue is in my opinion quite a game changer when it comes to the receiving end of Wifibroadcast. Apps like FPV_VR required h264/h265 video stream via network as an input. The issue is: How to you extract that from a Wifibroadcast air signal? The typical approach is to have an SBC with a suitable wifi card that receives the packages, does the Wifibroadcast decoding and forwards that decoded stream to the Android app. This is a bit cumbersome because you still need the SBC with its power supply and cabling to show an image on an Android device. FPVue was able to get rid of all this extra hardware and allows to directly connect a wifi card to the android device via USB. How is it able to do this? Pure magic
The app actually implements a user space USB driver for the wifi card. I was really blown away by this fact. Additionally, it also ported wfb-ng to Android so the App is able to do everything on its own: Receiving wifi frames, unpacking them with wfb-ng, decoding and displaying the video. Great stuff!
FPVue seems to be unmaintained since one year but luckily the OpenIPC ecosystem stepped in and forked it into https://github.com/OpenIPC/PixelPilot , which is actively maintained and extended.
WFB-NGWFB-NG is a fork of Wifibroadcast that is very similar in terms of scope to the original project but improved it in many ways. Instead of stdin communication it uses UDP packages. Together with RTP this seems a reasonable decision for lowering the latency. The issue with stdin is that this method uses NALU headers to split individual image frames. But… this header is appended to the start of the frame. So to detect the end of a frame you need to wait until the NALU header of the next frame. This adds one frame of unnecessary latency. RTP however does not use NALU headers but wraps the frames using RTP protocol flags. This way you actually can tell the end of a frame when you received the end.
Besides that it added encryption, proper support for distributed usage, etc. So many improvements, too much to write all of them here. Another important work also being done by the same group of people is the development of drivers for the “default” cards RTL8812AU/EU. This work appears to me to be the common backbone of many Wifibroadcast based projects. It might not have the visibility to the end user it deserves but nevertheless is a very important contribution!
OpenIPCOpenIPC makes lots of headlines recently so I also had a look at what they contributed to the Wifibroadcast world.
The OpenIPC project started as an alternative firmware for surveillance cameras. Typically, you can buy these hardware modules very cheaply from China and they come equipped with some proprietary firmware of varying quality. OpenIPC positions itself as an open alternative firmware solution for these cameras. One issue I am having with OpenIPC is that the main streaming application is not open source, which contradicts the name of the project. The main selling point of the project is “Replace your China binary blob with something open” but I think most users of OpenIPC are not aware that the reality is more like “Replace your China binary blob with a Russian binary blob”. Hardly an improvement.
On the plus side they also seem to offer alternatives to Majestic but not as a default. I don’t quite understand why they actually need separate projects instead of just releasing the sources of Majestic but hey, at least there is some kind of open alternative.
Coming back to the contribution they made to the Wifibroadcast ecosystem, I think it is huge. They had already much experience in using IP camera hardware and repurposed this HW to be used also for FPV. And in my opinion the IP camera hardware is almost a 100% match to the requirements of an FPV system.
The SBC based hardware I used originally works ok, but is certainly not optimal for the task. The CPU tends to be a bit overpowered, has lots of unneeded peripherals like a GPU, HDMI out, etc. The PCB design requires external memory chips, many boards also have a USB hub, PCIe lanes, SATA, Ethernet, … all these things add cost, complexity, weight and size.
Compare this to the typical IP camera hardware: A moderately powerful CPU, no GPU, no video output, a powerful ISP/video pipeline, image sensor + SoC on one single board. And these things are produced in millions each year and are therefore much cheaper than SBC+Camera. Other advantages are POP memory, meaning that these SoCs often come in QFN88 packages. Custom PCBs for these chips could be designed by toddlers… And nor-flash for storage is also nice compared to SD cards which are typically used for SBCs. All in all these systems seem to me like a close to 100% match in terms of what you want for a Wifibroadcast system. Small, simple, cheap – almost perfect.
This nice fit has also caught the attention of several companies that now offer IP camera based systems specifically made for being used with some Wifibroadcast-based firmware like OpenIPC and RubyFPV. This is really a major leap forwards from lots of soldering, flashing, modding to simply being able to buy these tiny systems off-the-shelve. I did not yet try these out by myself but they look really nice, I was very happy to learn about these.
Typically, these systems use IMX335 or IMX415 sensors. These are the usual candidates for surveillance camera applications and if configured right, they can deliver quite good image quality. Looking that the footage from people using these systems it seems as if the firmware still require lots of image pipeline tuning. I suspect that they either need to enable multi-exposure HDR or that the tone mapping is not tuned quite right. You can see this quite often in shadowy areas that tend to drown completely in black like for example here:

This is likely an issue of the tone mapping or missing HDR. The chips that these systems use, Sigmastar, actually have a “dark tone enhance” feature that would solve this issue. But… thank to “majestic” being closed source this cannot be solved by the community.
Also, the color tone of the images seems to be off, they look a bit like images from toy cameras. I suspect that the Bayer filter gains are not tuned properly. Maybe this is also due to white balance and saturation issues but this distinctive green tint of the images often comes from Bayer gain mismatches:

For my drone I’ve built a custom Wifibroadcast VTX system (not based on OpenIPC/Ruby/OpenHD, just bare-metal buildroot with a custom streaming application) which also happens to use an IMX335 sensor (but different SoC compared to OpenIPC). With just some moderate tuning of the ISP the images already look so much better:


For reference here is the video from which I took these snapshots (switch to 1080 for close-to-actual quality). The video shows the live downstream:
Parameters of the stream: FHD H265 @ 8Mbit/s
Miscellaneous potential improvementsAn improvement you could easily realize with IP camera hardware: A low resolution fallback video stream. Most of these SoCs allow you to en/decode several streams in parallel. So you could have one main stream in nice high resolution and high bitrate and a second stream at very low resolution and low bitrate. You would send and decode both streams in parallel and whenever the receiver detects corrupted data in the main stream it would switch to the low resolution second stream until the end of the GOP. This way the typical quite disturbing Wifibroadcast video artifacts could be replaced by simply switching to a lower quality stream. This would be much less disturbing and would lead to better user experience.
Also, I noticed that for the OpenIPC-hardware you need an Ethernet adapter to access the system. This is quite annoying, you tend to forget these adapters at home when you go flying. If only these systems would have Wifi… wait a second – they do! Only issue is that the Wifi card is configured in monitor mode which prohibits normal usage as a client or as an AP (via hostapd). But… Wifibroadcast does already send and receive arbitrary 802.11 frames. So in theory it should be possible to develop a very primitive hostapd equivalent that is able to spawn an AP on a monitor interface. We’ll see, maybe I’ll find some time to hack together something like this in the near future 









