Диагностика запуска live-камеры в интерфейсе

This commit is contained in:
DCCONSTRUCTIONS
2026-08-23 13:54:21 +03:00
parent 687c050c28
commit 3e5aedd74d
5 changed files with 58 additions and 0 deletions
@@ -261,6 +261,18 @@ export function MseFmp4WebSocketPlayer({
});
activeDiagnosticRef.current = diagnosticLifecycle;
diagnosticLifecycle.verifyBuild();
diagnosticLifecycle.post({
eventCode: "live_camera_player_effect_started",
streamId: delivery.id,
transportEpoch,
});
if (!recoveryAuthorityIdentity) {
diagnosticLifecycle.post({
eventCode: "live_camera_playback_authority_missing",
streamId: delivery.id,
transportEpoch,
});
}
const transportIsCurrent = () => cameraTransportCallbackIsCurrent(
transportEpochRef.current,
transportEpoch,
@@ -473,6 +485,11 @@ export function MseFmp4WebSocketPlayer({
const onSourceOpen = () => {
if (!transportIsCurrent() || failed) return;
diagnosticLifecycle.post({
eventCode: "live_camera_media_source_open",
streamId: delivery.id,
transportEpoch,
});
try {
sourceBuffer = mediaSource.addSourceBuffer(mediaType);
} catch {
@@ -525,6 +542,11 @@ export function MseFmp4WebSocketPlayer({
socket.binaryType = "arraybuffer";
socket.addEventListener("open", () => {
if (!transportIsCurrent() || failed) return;
diagnosticLifecycle.post({
eventCode: "live_camera_websocket_open",
streamId: delivery.id,
transportEpoch,
});
startupWatchdog?.armFirstMedia();
setStatus("buffering");
setMessage(recovering
@@ -7,6 +7,10 @@ export type LiveViewerDiagnosticEventCode =
| "live_receiver_error"
| "live_camera_source_projected"
| "live_camera_window_admitted"
| "live_camera_player_effect_started"
| "live_camera_playback_authority_missing"
| "live_camera_media_source_open"
| "live_camera_websocket_open"
| "live_camera_transport_restart_requested"
| "live_camera_transport_playing";
@@ -203,6 +203,24 @@ test("live camera registers sourceopen before assigning the MSE object URL", asy
);
});
test("live camera reports each browser startup boundary without device actions", async () => {
const source = await readFile(
new URL("../src/components/MseFmp4WebSocketPlayer.tsx", import.meta.url),
"utf8",
);
for (const eventCode of [
"live_camera_player_effect_started",
"live_camera_playback_authority_missing",
"live_camera_media_source_open",
"live_camera_websocket_open",
]) {
assert.ok(
source.includes(`eventCode: "${eventCode}"`),
`missing bounded player diagnostic ${eventCode}`,
);
}
});
test("recorded observation timeline clamps relative seek time without epoch precision in the UI", () => {
const range = normalizeTimelineRange({
min: 0,