DEV Community

Gautam Gupta
Gautam Gupta

Posted on AI-assisted

I built MeshLive: video calling and live broadcasting over Bluetooth mesh, without internet (Open source)

A few weeks ago, during the student protests in Delhi, I saw how mobile internet was shut down and how the government even tried to get Bitchat's GitHub repositories taken down, although they remained accessible.

That genuinely bothered me. Students were protesting for fair exams, and even basic communication was being restricted.

That got me thinking: why stop at text? What if we could make voice/video calls and broadcast live video over Bluetooth without internet?

So I started experimenting with it.

What I built:
MeshLive is a free, open-source Android app for communication between nearby phones over Bluetooth.

It currently includes:

Live camera and microphone broadcasting over Bluetooth

Multi-hop relaying, where nearby phones can forward a broadcast beyond the original sender's range

Two-way voice/video calls between nearby phones

Experimental offline messaging and additional communication features

No account, backend server, mobile data or Wi-Fi required for the media

There's also an early iOS implementation, although Android is the main focus right now.

The difficult part

Unsurprisingly, Bluetooth bandwidth was the biggest challenge.

Getting live video through such a limited connection is difficult enough. Add relaying, different Android versions, manufacturers, codecs and Bluetooth implementations, and things get messy pretty quickly.

I'd been working on a rough MVP for a few weeks. Then Bitchat was removed from Indian app stores, and with another protest approaching in Delhi, I decided to go all in.

Bought another phone within my budget, subscribed to the $200 Claude Max plan, and spent roughly 36 hours testing, breaking and fixing whatever I could.

A lot of the development was AI-assisted, but testing real Bluetooth behaviour still meant dealing with the actual devices available to me.

Where it stands

It's still an experimental beta.
Video can be laggy, some phone combinations don't work properly, and several features are still experimental or insufficiently tested. It also hasn't undergone an independent security audit.

I wouldn't recommend relying on it for emergencies or anything safety-critical yet. I could only test with a limited number of phones, and that's one of the biggest constraints right now.

Why open source?

Because I don't see something like this becoming genuinely useful without wider testing and contributions. Different Android manufacturers and Bluetooth implementations introduce problems that are difficult to catch with just a few devices.

And I believe the potential applications go far beyond the protests that initially inspired me: disasters, network outages, remote locations and other situations where conventional communication isn't available.

So I'm putting the work out there rather than waiting until everything is perfect.

Android source: https://github.com/MeshLive/meshlive-android

Download beta APK: https://github.com/MeshLive/meshlive-android/releases/tag/v0.1.0-beta

Early iOS: https://github.com/MeshLive/meshlive-ios

If you're interested in Android, Bluetooth, codecs, peer-to-peer networking, or just have a couple of spare phones to test with, I'd really appreciate the help.

Even bug reports with phone models, Android versions and what worked or failed would be useful.

PRs and feedback are welcome.

Top comments (1)

Collapse
 
launchgatecheck profile image
Launch Gate •

The experimental/safety-critical boundary is worth keeping visible. For multi-hop media, I'd start with a three-phone fixture: A broadcasts through B to C, B leaves range, then returns while A is still sending. Check that C shows an interruption rather than a frozen frame presented as live, and that reconnect doesn't replay old audio or accumulate a growing delay. A visible age for the last received frame would make device-matrix reports easier to compare. Have you tested relay loss/rejoin separately from a direct two-phone call?