Sync 1080p60: wing audio and h.264 encoder endurance
23 September 2026 · Research report · Headed browser, Syphon and USB audio measurements
Decision: retain the measured Noisedeck preview-pause behavior and publish the focused Sync Metal watchdog timing correction. A five-minute marked receiver run and a separate ten-minute plain receiver run sustained 1920 × 1080 output with all 32 WING input tones detected. A planned hour failed its video requirement after browser encoding slowed at 553 s. Continuous 60 fps for one hour is not certified. E1 E2
This study measures simultaneous Noisedeck video output and WING Rack audio on one Apple M2 Mac. The installed Sync 0.2.87 checks and candidate local Release-helper checks are separate populations. The report records the user-accepted short checkpoint and the longer-run failure without combining their denominators. E1
1. Question and design
The question is whether actual Noisedeck 1920 × 1080 rendering can deliver 60 H.264 frames/s through Sync Syphon while Sync captures all 32 discrete USB channels from a WING Rack. The browser was headed and kept visible. One independent Syphon process observed received frames; a browser AudioWorklet observed audio. The mixer supplied a different test tone to each USB channel. Runs were serial, with the original 48 WING routes and Ethernet DHCP restored after each. E1
Table 1. Experimental configuration
| Parameter | Configuration |
|---|---|
| Host | Mac14,2; Apple M2 with 10 GPU cores, 24 GiB RAM; macOS 14.8.3; headed Chrome 153.0.8010.53. |
| Video route | Actual Noisedeck renderer → browser WebCodecs H.264 sender → Sync helper → Syphon → independent receiver. Product sender used 60 ms pacing and a 50 Mb/s configured bitrate ceiling. |
| Audio route | WING Rack 32-channel USB input at 44,100 samples/s → Sync native capture → Noisedeck AudioWorklet. Distinct tones were sampled for channel identity. |
| Sync builds | Installed, signed public 0.2.87 for the five- and nine-minute runs; local Release helper with the Metal timing candidate for later runs. The local helper is not an installed release. |
| Controlled variants | Test-only browser interception separately suppressed backpressure-triggered keyframes, instrumented worker timing, or moved VideoEncoder to the main thread. Product sender source stayed unchanged. |
2. Measurement contract as applied
Marked frame delivery counts independent receiver callbacks whose decoded pixels contain the expected ordered source marker. Duplicates, missing sequences, invalid markers and dimension mismatches are checked separately. The marked run also estimates marker age from same-host clocks; that is not calibrated display latency. E1
Plain callback rate is independent new-frame callbacks divided by the receiver window. It confirms callback frequency and dimensions but cannot establish unique pixel content or per-frame latency. Sender accepted counts and native accepted counts are distinct boundaries. A callback rate near 60 does not prove long-run 60 unique rendered pictures/s. E1
Audio continuity uses native captured-frame totals, native drop and cursor-gap counters, then AudioWorklet drop and underrun counters. The tone-identity calculation examines 8,192 frames per channel, so it proves sampled channel separation rather than continuous identity for every frame. The user accepted a few minor blips at this checkpoint; the measured 2,080-frame underrun is about 47 ms at 44.1 kHz. E1
For interrupted trials, per-second browser counters end at the recorded stop time. Their absent final receiver and tone summaries are not inferred. The failed one-hour attempt is therefore a measured video collapse, not a completed hour. E1
3. Implementation
The Sync Metal completion slot previously entered watchdog timing when the slot was claimed, using a cached libuv loop timestamp. CPU staging and command encoding could consume part of the one-second window before the GPU command was committed. The candidate keeps the slot in Preparing, excludes that state from timeout checks, and records fresh uv_hrtime()commit. The Metal tracker regression covers delayed precommit work; publisher and platform tests passed. This changes timing correctness, not the configured H.264 sender rate. E2
Noisedeck's product sender requests a keyframe after a rejected pre-encode frame. A test-only variant removed that request and counted keyframes. Another variant timed canvas capture, worker message transfer, VideoEncoder completion and output gaps. A third ran VideoEncoder on the browser main thread. None was retained in product source. E3
4. Combined results
Table 2. Serial combined WING and Noisedeck runs
| Run | Observed duration, s | Independent Syphon evidence | Video rate | Sender backpressure | Native audio drops | Worklet underrun frames |
|---|---|---|---|---|---|---|
| Installed 0.2.87, marked receiver | 300 | 18,000 marked frames; no misses | 60.000 marked/s | 0 | 0 | 0 |
| Installed 0.2.87, plain receiver | 540 | 32,397 callbacks | 60.0068 callbacks/s | 0 | 0 | 2,080 |
| Local Release helper, plain receiver | 600 | 35,998 callbacks | 60.0083 callbacks/s | 0 | 0 | 0 |
| Attempted hour, stopped after collapse | 616 | receiver total unavailable after early stop | 18.2 accepted/s in last minute | 2454 | 0 through stop | 0 through stop |
The installed marked run received 18,000 consecutive marked frames, with zero invalid or duplicate markers, missed sequences or dimension mismatches. Its p95 same-host marker age was 75.221 ms. Native audio delivered 13,351,424 frames with zero native drops or cursor gaps; the worklet reported zero drops and underruns. All 32 sampled tones matched their channels, with minimum separation 32.67 dB. E1
The installed nine-minute run had 32,397 plain callbacks at 60.0068/s; sender and native video drops were zero. Native audio captured 23,937,024 frames without drops or cursor gaps. The worklet recorded one 2,080-frame underrun and zero dropped frames. All 32 sampled tones matched, minimum separation 32.72 dB. Its strict test result was failure solely because the worklet-underrun assertion required zero; it is retained here as a user-accepted checkpoint with that explicit deviation. E1
The local Release-helper ten-minute run had 35,998 plain callbacks at 60.0083/s, zero sender backpressure, zero native video drops, 26,574,848 native audio frames with zero drops or cursor gaps, and zero worklet drops or underruns. All 32 sampled tones matched, minimum separation 33.47 dB. The helper remained alive through normal stop. This is a local candidate result, not an installed public release result. E1
In the attempted hour, sender backpressure first appeared at 549.005 s after output began. By 616.003 s, it had rejected 2,454 frames; accepted output during the final 60 s was about 18.2 frames/s. The helper remained alive and native/worklet audio counters were zero-loss through the early stop. The run was stopped after the video requirement had already failed; WING routes and DHCP restored successfully. E1
5. Current product verification
The current Noisedeck H.264 sender and Sync audio module bytes matched published Noisedeck commit 55fa1a24. Its preview-pause behavior had passed local 1,175-test verification and the exact-source CI, deployment and live promotion before these measurements. The installed signed Sync baseline was 0.2.87. The Metal candidate was tested as a separate local Release helper and committed to public Sync source as 767794c9658940a803147b8bfb95c968efdc74d0. Source hashes and local software-gate boundaries are retained in the source-identity dataset. E2
6. Encoder timing
In the diagnostic run, first backpressure occurred at 179.005 s after output began. The largest observed canvas capture call was 0.6 ms, worker message lag 7.5 ms, and VideoEncoder completion delay 846.7 ms. The encoder queue reached 11; browser encode output gaps reached 158.9 ms. These maxima locate the sustained bottleneck after canvas capture and worker transfer, inside or downstream of browser encoding. Instrumentation can alter scheduling, so its failure time is not compared causally with the uninstrumented run. E3
The production backpressure rule caused repeated keyframe requests once the queue filled: the diagnostic run had 1,806 encoded keyframes by its early stop. The no-extra-keyframe variant retained the normal accepted-sequence cadence but still fell below 60 fps. Thus keyframe repetition amplifies an existing encoder slowdown; the evidence does not establish it as the initiating cause or qualify a product change by itself. E3
7. Related diagnostic results
Table 3. Test-only encoder variants
| Variant | Finding and disposition |
|---|---|
| No extra keyframe after backpressure | First pressure at 276.0 s; 3,661 rejected by stop; 27.8 accepted/s in last minute. No retention. |
| Worker timing | First pressure at 179.0 s. Canvas capture max 0.6 ms; message lag max 7.5 ms; encoder time max 846.7 ms. Diagnostic only. |
| Main-thread encoder | First pressure at 131.0 s; sender connection closed and audio underruns followed. No retention. |
Changing the H.264 level and nominal bitrate in an earlier screen also failed delivery; a software-preference screen never established 60 fps. These variants were not promoted. The default worker-based product path remains the best measured configuration for this host. E3
8. Decision
Retain Noisedeck's shipped preview-pause change and the existing H.264 pacing. Publish the narrow Sync Metal submission-clock correction because it fixes a demonstrated watchdog accounting error and passed focused and combined short tests. Record ten-minute combined delivery as measured progress. Continue to withhold one-hour simultaneous 1080p60 qualification pending a browser-encoder stability result. E1 E2 E3
9. Limits
- The longest zero-drop local candidate run is ten minutes. The planned hour failed video delivery after roughly nine minutes. No full-hour simultaneous certification is claimed.
- The ten-minute and nine-minute independent receivers counted plain new-frame callbacks. Only the separate five-minute marked run verified per-frame pixel sequence and marker age.
- Local candidate helper results do not prove the later signed public installer behaves identically. The installed 0.2.87 baseline remains a distinct build.
- The WING channel-identity window covered 8,192 samples per channel per completed run. Native and worklet counters cover the rest, but identities were not decoded continuously.
- Only local Syphon output was measured. The macOS virtual-camera output was not tested.
- Aborted diagnostic runs do not retain a complete receiver or tone result. Test-only source interception and observer work can affect scheduling.
10. Reproducibility
The private experiment archive retains headed-browser per-second samples, independent receiver results for completed runs, WING tone setup, helper logs, process samples, test-only variant controls and restoration records. The public datasets expose normalized counts and SHA-256 digests of private receipts without local paths or process identifiers. All trials ran serially and restored the 48 original WING routes and dedicated Ethernet DHCP. The product H.264 sender used its production 60 ms pacing and default audio prefill unless a test-only variant is identified. E1 E2
Evidence references
- E1. Combined run measurements. Completed receiver, sender and audio counters; interrupted-run per-second summaries; private receipt digests and restoration status.
- E2. Source identity and software verification. Sync and Noisedeck source identities, local helper digest, host configuration and test gates.
- E3. Encoder and watchdog findings. Controlled variants, timing maxima, implementation disposition and acceptance boundary.
- E4. Prior combined audio and video research; prior web-to-native frame pacing research. Earlier methods and unresolved sustained-delivery questions.