Skip to content

Commit 9220b10

Browse files
docs: record the Android focus session and the playbackState gap; currentTimeSeconds is the broadcast's timeline
1 parent becf5b6 commit 9220b10

2 files changed

Lines changed: 32 additions & 3 deletions

File tree

‎docs/DEVICE_VALIDATION.md‎

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,33 @@ once with the phone on the cable, when another app came to the front).
233233
concern (each `vcr record` is a new swarm identity), but it sets the
234234
rejoin time a viewer sees.
235235

236+
### Android, OnePlus 8, 2026-10-12 evening
237+
238+
Release APK (JS bundled, debug keystore), the same tree and the same
239+
broadcast as the iPhone runs, over `adb logcat -s WebmPlayer ReactNativeJS`.
240+
241+
- **Join and playback.** Wi-Fi had been off; with it on, connected to the Mac
242+
over the LAN in 2 s and was ready 4 s later, 512x288, 0 dropped. `t=` read
243+
156 s at the join, the broadcast's own timeline, so the timeline does not
244+
restart at a join on either platform: the zero seen on the iPhone was the
245+
value shown while a rejoin was still buffering.
246+
- **Audio focus lost.** YouTube started over adb: "audio focus lost" at once
247+
and the source stopped. YouTube's focus request is permanent, so when it
248+
was force-stopped no regain reached ExoPlayer, and the player sat waiting
249+
for `play()`, as the iPhone does after an interruption without
250+
ShouldResume. The regain-driven rejoin (a transient loss) is still
251+
unverified: a Clock timer on this phone ducks instead of taking focus.
252+
- **While the Clock app was in front** (the timer being set), ExoPlayer
253+
reported buffering every two seconds and the worklet's lag reached 13 s,
254+
227 fragments, and rejoined; playback was clean before and after. Not
255+
chased: Android tuning is outside this round.
256+
- **`playbackState` reads Playing while nothing plays**, on both platforms:
257+
it is "something has rendered this session", so it stays Playing through
258+
an interruption, a focus loss and, on iOS, a rejoin (Android's
259+
`newSession` clears it there). Health is right in all three cases. A
260+
follow-up for the spec: Buffering whenever the source is stopped or a
261+
rejoin is pending.
262+
236263
## Still to run on hardware
237264

238265
- [ ] The 16.6 startup crash: keep counting launches of the 16.6 Release
@@ -248,7 +275,8 @@ once with the phone on the cable, when another app came to the front).
248275
still unmeasured.
249276
- [ ] A phone call, as against the timer interruption already verified: the
250277
phone has no SIM.
251-
- [ ] Android: audio focus loss and regain.
278+
- [ ] Android: the regain after a transient focus loss (a notification sound
279+
or a call), which should rejoin at once. The permanent loss is verified.
252280
- [ ] Swarm discovery on the phone: 13 to 56 s to a connection, 84 s once on
253281
2026-10-12 afternoon. The 4 to 5 s from connection to first frame is in
254282
line with Android.

‎src/specs/webm-player.nitro.ts‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,9 @@ export interface WebmPlayerMetrics {
3131
videoWidth: number
3232
videoHeight: number
3333
/**
34-
* The joined stream's own timeline, in seconds. It restarts at every join,
35-
* rejoins included; the packet counts above keep counting across them.
34+
* The broadcast's own timeline in seconds, from the stream's timestamps.
35+
* Zero until a join's first sample is presented; the packet counts above
36+
* keep counting across rejoins.
3637
*/
3738
currentTimeSeconds: number
3839
}

0 commit comments

Comments
 (0)