Validate Android surface timestamps in stream diagnostics

This commit is contained in:
evgeny committed 2026-10-20 21:40:20 +02:00
1 parent 1b036e4ea9
commit a4419b4c89
1 file changed
+14 -3
@@ -144,12 +144,23 @@ class StreamPlayerEngine(private val group: Long, private val source: Long, priv
var firstRendered = true
val codecRevision = frame.revision
try {
attempt.setOnFrameRenderedListener({ _, pts, renderedNs ->
attempt.setOnFrameRenderedListener({ codec, pts, renderedNs ->
if (firstRendered) {
firstRendered = false
val callbackUs = System.nanoTime() / 1000
val renderedUs = renderedNs / 1000
val renderClockValid = renderedUs in requestedAtUs..callbackUs
if (!renderClockValid) LogManager.addLog("WARN", "stream",
"viewer surface timestamp outside request interval id=$id PTS=$pts renderedNs=$renderedNs " +
"requestedUs=$requestedAtUs callbackUs=$callbackUs; using callback time")
LogManager.addLog("INFO", "stream", "android first surface frame id=$id revision=$codecRevision " +
"PTS=$pts elapsedUs=${renderedNs / 1000 - requestedAtUs} " +
"callbackDelayUs=${System.nanoTime() / 1000 - renderedNs / 1000}")
"stage=surface_callback PTS=$pts elapsedUs=${callbackUs - requestedAtUs} " +
"renderElapsedUs=${if (renderClockValid) renderedUs - requestedAtUs else -1} " +
"callbackDelayUs=${if (renderClockValid) callbackUs - renderedUs else -1}")
try { codec.setOnFrameRenderedListener(null, null) }
catch (e: Exception) {
LogManager.addLog("WARN", "stream", "viewer surface diagnostics detach id=$id: ${e.message}")
}
}
}, main)
} catch (e: Exception) {