Related: #23022 (filed a day earlier) reports the same underlying fault from the viewer side: an unbounded captureViewport in the remote viewer's still frame holds tab.captureLock, so an agent snapshot waits before its own deadline starts. This issue is the preview_recording_start caller of the same function, which wedges the tab's agent queue instead of the capture lock.
#23515 bounds captureViewport itself, so it covers both callers. For #23022 that only partly helps: a stuck still frame now releases the lock within 5 s, but a snapshot can still wait that long before its own 10 s bound begins.