diff options
| author | Christophe Besson <cbesson@gmail.com> | 2026-08-23 22:43:35 +0200 |
|---|---|---|
| committer | Christophe Besson <cbesson@gmail.com> | 2026-08-23 22:43:35 +0200 |
| commit | b6e2dcea65124673da047f9b3c92bc5e25980d63 (patch) | |
| tree | 2776598c32b30229dcd7d6a3d030bb4965ad1c70 /packages/meshbay-hub/tests | |
| parent | b3709ac4d362987a9d025616c95065ceed0d216b (diff) | |
| download | meshbay-b6e2dcea65124673da047f9b3c92bc5e25980d63.tar.gz | |
fix(node,hub): always transcode video audio to stereo AAC, never copy
MSE only decodes AAC/Opus, so copying a source's real audio codec left
non-AAC files silently unplayable in-browser (E-AC-3 additionally made
ffmpeg itself refuse to write the fragmented MP4 header). Audio is now
always transcoded to AAC and downmixed to stereo — multichannel AAC is
accepted by ffprobe/VLC but silently rejected by some browsers' MSE
decoder once real fragments are appended, which forces the SourceBuffer
out of its MediaSource with no explicit error. Video stays copy-only.
Also: report a clear client-side error instead of a bare STREAM_END when
ffmpeg exits nonzero before producing any output, add video-element/
MediaSource error logging on the client for the next time this class of
bug needs diagnosing, and fix a hub test that had grown too broad a scan
window after an earlier, unrelated transport.js change.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016SF6RKNBKg9qejmoMJ9ybA
Diffstat (limited to 'packages/meshbay-hub/tests')
| -rw-r--r-- | packages/meshbay-hub/tests/test_upload_controls_hidden.py | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/packages/meshbay-hub/tests/test_upload_controls_hidden.py b/packages/meshbay-hub/tests/test_upload_controls_hidden.py index 9290a94..955b47d 100644 --- a/packages/meshbay-hub/tests/test_upload_controls_hidden.py +++ b/packages/meshbay-hub/tests/test_upload_controls_hidden.py @@ -109,8 +109,12 @@ def test_the_notice_still_answers_the_operators_own_request(app): caused it — returning early on it would leave that request hanging until it timed out.""" transport = TRANSPORT.read_text(encoding="utf-8") + # Scoped to member_upload_ack's own handler, not everything up to the next + # occurrence of "index_sync" — other handlers with their own, legitimate + # early `return` (index_progress, set_scan_settings_ack: neither is ever a + # reply anyone awaits) now sit between the two in the file. block = transport[transport.index("member_upload_ack"):] - block = block[:block.index("index_sync")] + block = block[:block.index("apps_enabled_ack")] assert "return" not in block |