Skip to content
This repository was archived by the owner on Oct 28, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 4 additions & 3 deletions docs/guides/cast-to-a-tv.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,10 @@ can use the TV as a display, read its remote, speak through it and play video
on it.

- **The TV as a display.** `RokuDisplay` is a framebuffer display whose frames
show full-screen, sent as PNGs. At 480x270 a desktop gets 6 to 10 frames a
second onto the TV, and a P4 about 2. The TV fetching each PNG sets that
limit: the program itself draws at 28 to 29.
show full-screen, sent as PNGs. At 480x270 a desktop gets 8 to 14 frames a
second onto the TV, and a P4 about 2. On a desktop the TV fetching each PNG
sets that limit, and the program itself draws at 28 to 29. On a P4 it's the
270 to 290 ms each PNG takes to encode.
- **The remote as input.** All eleven buttons a channel can see arrive as key
presses and releases, and a held button repeats. testris plays from the
couch through [`roku/board_config.py`](https://github.com/PyDevices/pydevices-examples/blob/main/lib/examples/roku/board_config.py).
Expand Down
20 changes: 12 additions & 8 deletions docs/reference/cast-runtimes.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,17 @@ for testris and for the LVGL `lv_test_timer`.

| Runtime | Companion channel | Miracast to a Roku | Miracast to Windows | HLS |
|---|---|---|---|---|
| `python` (Linux) | 8.2, 9.1 | 30, 30 | 30 | plays |
| `python.exe` (Windows) | 12.2, 10.6 | 30, 30 | 30 | plays |
| `micropython` (unix) | 11.8, 7.4 | no H.264 | no H.264 | no H.264 |
| `micropython.exe` (Windows) | 8.4, 7.7 | no H.264 | no H.264 | no H.264 |
| ESP32-P4 4" panel | 2.2, 2.1 | 29, 18 | 30 | plays |
| `python` (Linux) | 11.0, 9.1 | 30, 30 | 30 | plays |
| `python.exe` (Windows) | [closes](https://github.com/PyDevices/pydevices-examples/issues/245), 13.6 | 30, 30 | 30 | plays |
| `micropython` (unix) | 13.4, 11.3 | no H.264 | no H.264 | no H.264 |
| `micropython.exe` (Windows) | 7.7, 7.8 | no H.264 | no H.264 | no H.264 |
| ESP32-P4 4" panel | 2.2, 2.1 | -, 29 | 30 | plays |
| ESP32-S3 LCD-7 | 1.8, 1.7 | no H.264 | no H.264 | no H.264 |

A dash is a figure we haven't measured. On Windows CPython, testris over the
Companion channel closes the cast a moment after it starts
([#245](https://github.com/PyDevices/pydevices-examples/issues/245)).

**No H.264** is by design. Desktop MicroPython and the S3 have no H.264
encoder, and adding one isn't planned, so `CastDisplay` and `HlsDisplay` stop
there with an error that says so. On CPython, ffmpeg does the encoding: put it
Expand All @@ -25,6 +29,6 @@ the same MPEG-TS over RTP that the P4 sends, byte for byte.
it needs a second PC as the receiver: Windows won't take a cast from itself.

On a desktop, a frame costs a few milliseconds of PNG encoding. On the P4 it's
about 180 ms at 480x270 and on the S3 about 380 ms, which is why the boards get
2 frames a second over the Companion channel and 18 to 29 over Miracast, where the P4's H.264 encoder
does the work.
about 270 to 290 ms at 480x270 and on the S3 about 380 ms, which is why the
boards get 2 frames a second over the Companion channel and about 29 over
Miracast, where the P4's H.264 encoder does the work.
Loading