WhipPyWeb
WhipPyWeb is a Python tool that allows you to stream your desktop to a web browser using WebRTC. It is designed with OBS in mind.
Installation
You can install WhipPyWeb using pipx:
pipx install whippyweb
whippyweb run
or using Docker:
docker run -p 8080:8080 whippyweb
Features
- Stream from OBS to a (single) web browser
- Very low latency between OBS and web browser
- You only need the Python server to establish the connection, audio and video are streamed directly from OBS to the web browser - there's no overhead of any Python processing (which can be slow).
How it works
sequenceDiagram
participant OBS as OBS
participant WPW as WhipPyWeb
participant BRS as Web Browser
BRS->>WPW: Create websocket connection
activate BRS
activate WPW
Note over OBS,BRS: Stream start
OBS->>WPW: WebRTC offer
activate WPW
WPW->>BRS: WebRTC offer (over websocket)
BRS->>BRS: Create WebRTC Answer
BRS->>WPW: WebRTC answer (over websocket)
WPW->>OBS: WebRTC answer
deactivate WPW
OBS->>BRS: Video and audio stream
Note over OBS,BRS: Stream stop
OBS->>WPW: WebRTC close
activate WPW
WPW->>BRS: WebRTC close (over websocket)
BRS->>BRS: Close WebRTC connection
deactivate BRS
WPW->>OBS: OK
deactivate WPW
deactivate WPW
How I got here
I wanted to improve the experience of an event I'm hosting. I wanted to stream my desktop to a web browser, to share the screen with my audience both in the same room (Projector with a Chromecast) and remotely (Google Meet sharescreen).
Tried RTMP, HLS but the latency was too much - imagine talking about a slide that is 3-12 seconds away from being visible on the screen...
Eventually stumbled upon this Medium article which pointed me to Broadcast-box. Broadcast-box in turn, directed me to OBS2Browser.
Since I wanted to make some changes and I never written a line of code in GO, I decided to write a Python version of OBS2Browser. WhipPyWeb is the result.
Now I can stream from OBS to a web browser, with very low latency.
flowchart LR
gl(Guest Laptop) --HDMI-to-USB-C--> ml(My Laptop with OBS)
ml --With WhipPyWeb--> br(Web Browser)
br --WiFi--> cc(Chromecast) --HDMI--> pr(Projector)
br --> gm(Google Meet)
Usage
Once whippyweb is running, you can access the player at http://localhost:8080/player. There you will see instructions on how to configure your OBS instance.
Contributing
Contributions are welcome! Please open an issue or submit a pull request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Metadata
Release files for WhipPyWeb 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| whippyweb-1.0.0.tar.gz | 296.7 kB | Without provenance | Details for whippyweb-1.0.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| whippyweb-1.0.0-py3-none-any.whl | Python 3 | none | any | Details for whippyweb-1.0.0-py3-none-any.whl |
Total release size: 593.1 kB
Release files / whippyweb-1.0.0.tar.gz
| Download URL | whippyweb-1.0.0.tar.gz |
|---|---|
| Size | 296.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
122fdb783c846f44d7bdfd9c4f186e4141d8432adec243ece7bbf00b14d853b8
|
|
BLAKE2b-256 checksum How to use checksums |
1ffad0768aa9ea64d50af220e1f7f4423106935756f7e812d652bb5b5f0fea54
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.6
|
Release files / whippyweb-1.0.0-py3-none-any.whl
| Download URL | whippyweb-1.0.0-py3-none-any.whl |
|---|---|
| Size | 296.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
88850e5131c807dbfe507c452879e8b3a488c1d3bf1b784deba11e8c9aad03ae
|
|
BLAKE2b-256 checksum How to use checksums |
afaf64301608770311b81f87cc6da11c3c95835a2de21433126d0f0fd04cf249
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/5.1.1 CPython/3.12.6
|
Security for WhipPyWeb 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.