Validate Android surface timestamps in stream diagnostics
This commit is contained in:
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) {
|
||||
|
||||
Reference in new issue
Block a user