Skip to content

ambianic/peerjs-python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

peerjs-python

Python port of PeerJS client.

  • Tracked in issue #160 of the official PeerJS project.

Enables Progressive Web Apps to discover and pair directly with Python apps using secure, browser supported WebRTC protocol.

Additional features:

  • HTTP Proxy over WebRTC data channel. It allows PeerJS browser clients to make remote REST requests over WebRTC to a local REST API running behind a firewall.
  • Plug-and-play functionality that allows seamless Airdrop-like pairing between peers running on the same local network.

See Ambianic UI PNP module for a real-world example how PeerJS Python is used with PnP and HTTP Proxy.

Dependencies

Uses aiortc as Python WebRTC provider. This requires installing a few native dependencies for audio/video media processing.

On Debian/Ubuntu run:

apt install libavdevice-dev libavfilter-dev libopus-dev libvpx-dev pkg-config libsrtp2-dev 

On OS X run:

brew install ffmpeg opus libvpx pkg-config 

Motivation

This project was originally motivated while searching for a way to:

  • Connect a Progressive Web App (Ambianic UI) directly and securely to an edge device (Ambianic Edge) running Python app on a Raspberry Pi behind a home Internet router.

Other key requirements:

  • Easy Airdrop-like plug and play discovery and pairing between web app and edge devices.
  • Direct peer-to-peer connectivity to minimize:
    • latency
    • architecture complexity
    • costs associated with traffic and hosting of tunneling servers
    • exposure to public server security attacks
  • Support for:
    • Secure connections
    • Bi-directional data-channel
    • Low latency audio/video media streaming
    • Bi-directional live audio/video media
  • Rely only on standard broadly supported web browser features.
    • Stable mobile device support (iOS, Android, Raspberry Pi)
    • Stable desktop OS support (Windows, Mac OS, Linux)
    • No need for browser plug-ins
  • No intermediary cloud service providers to store and sync user data.
  • No tedious and complicated NAT setups of dynamic DNS with SSH tunnels between public IP servers and edge devices behind firewall.
  • High throughput and scalability via lightweight signaling service without a persistence layer.

Project Status

Initial working prototype completed. PeerJS Python is now able to connect over WebRTC DataChannel to PeerJS in the browser and exchange messages.

  • Complete and test connectivity with signaling server (peerjs-server).
  • Complete and test data channel connectivity with web app peers.
  • Release initial version to PyPi.
  • >90% code coverage with CI tests.
  • Port media support.

Other Related Open Source projects

There are several great projects that solve the problem of accessing IoT devices behind firewall via tunneling servers.

  • Python Proxy: Asynchronous tunnel proxy implemented in Python 3 asyncio.
  • Proxy.py: HTTP proxy server written in Python.
  • Inlets: Reverse proxy and service tunnel written in Go.
  • Macchina.io: IoT tunneling proxy written in C++.

A few popular p2p projects that use WebRTC:

Sponsor this project

 

Packages

No packages published

Contributors 10