You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Improve Android emulator WebRTC smoothness by preferring gRPC screenshots, sharing one source per UDID/codec, defaulting Android local streams to software H.264 at a 960px long edge, and exposing Android encoder/source metrics.
Copy file name to clipboardExpand all lines: docs/guide/video.md
+17-14Lines changed: 17 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,9 +1,9 @@
1
1
# Video and streaming
2
2
3
-
SimDeck streams live device video to the browser. Local sessions default to full-resolution 60 fps. Remote or constrained sessions can trade detail for lower CPU and latency.
3
+
SimDeck streams live device video to the browser. Local iOS sessions default to full-resolution 60 fps. Android emulator browser sessions default to software H.264 with the `balanced` profile capped at 960px on the long edge because the host reads and encodes emulator RGBA frames from the emulator gRPC screenshot stream. Remote or constrained sessions can trade detail for lower CPU and latency.
4
4
5
5
iOS simulator H.264 uses VideoToolbox for hardware encoding and x264 for software encoding.
6
-
Android emulator H.264 uses the emulator `-share-vid` display surface. SimDeck reads BGRA frames from the `videmulator<console-port>` shared memory region and encodes them on the Mac, so normal Android live video stays on the native shared display path.
6
+
Android emulator H.264 uses the emulator gRPC `streamScreenshot` API when SimDeck owns the boot. SimDeck receives raw RGBA frames, pads odd dimensions for H.264, and encodes them on the Mac. If the gRPC endpoint is unavailable, SimDeck falls back to the emulator `-share-vid` display surface and reads BGRA frames from the `videmulator<console-port>` shared memory region.
7
7
8
8
## When encoding runs
9
9
@@ -13,7 +13,10 @@ shared refresh pump active while frame subscribers exist.
13
13
For Android, SimDeck starts emulators with `-share-vid`, maps the shared display
14
14
region, and feeds changed BGRA frames into the native host H.264 encoder.
15
15
SimDeck-owned Android boots also default to `-gpu host`, matching the native
16
-
emulator app's accelerated renderer while staying in headless shared-video mode.
16
+
emulator app's accelerated renderer while staying hidden. On macOS, managed
17
+
boots use `-qt-hide-window` instead of `-no-window` so the Qt render loop stays
18
+
active without showing the emulator window. Managed Android boots also reserve a
19
+
per-AVD `-grpc` port for event-driven screenshot streaming.
17
20
18
21
The browser reports whether the page and stream canvas are foreground. When all
19
22
known viewers are hidden or the last frame subscriber disconnects, the native
@@ -38,17 +41,17 @@ simdeck service restart --stream-quality ci-software
|`smooth`| 60 fps with lower bitrate; Android caps this at 960px|
48
+
|`balanced`| Good local quality with less bandwidth |
49
+
|`economy`| Remote browser or busy machine |
50
+
|`low`| Slower Wi-Fi or shared hosts |
51
+
|`tiny`| Pull request previews and low bandwidth |
52
+
|`ci-software`| Virtualized CI Macs |
53
+
54
+
The browser also has stream controls for transport, resolution, FPS, encoder mode, and refresh. Choosing `Full res` for an Android emulator keeps the native shared-video dimensions, which can be expensive on tall phone profiles. Set `SIMDECK_ANDROID_VIDEO_CODEC=hardware` or choose Hardware in the browser when you explicitly want VideoToolbox for Android.
0 commit comments