yuanyuanxiang and deepseek-v4-pro
f3a05c14b1
Feature: Play remote audio on iPhone via WebAudio + self-hosted Opus WASM
...
iOS WebKit lacks Media Source Extensions with WebM/Opus, so remote audio
was silent on iPhone Safari/Chrome even though audio frames kept flowing.
Add a Web Audio API fallback path that decodes Opus packets with the
`opus-decoder` WASM library and schedules them onto an AudioContext.
The decoder bundle is now self-hosted — served at /static/opus-decoder.min.js
by both the Go and C++ servers — instead of pulled from a CDN, which was
unreachable from some networks.
Gotcha fixed during bring-up: the unscoped `opus-decoder` build's
`OpusDecoder.decodeFrame` is synchronous and returns {channelData,
samplesDecoded, sampleRate, errors} directly, not a Promise, so it must be
called in try/catch rather than via .then().
Also remove the on-screen diagnostic overlay (audio toast + frame counter)
used while debugging the phone without a console; diagnostics now go to
console.* only.
Co-Authored-By: deepseek-v4-pro
2026-10-03 18:23:10 +02:00
..
2026-09-06 09:39:59 +02:00
2026-10-02 19:57:57 +02:00
2026-04-19 22:55:21 +02:00
2026-09-06 09:39:59 +02:00
2026-10-03 18:23:10 +02:00
2026-04-19 22:55:21 +02:00
2026-09-06 09:39:59 +02:00
2026-10-03 18:23:10 +02:00
2026-10-03 18:23:10 +02:00
2026-04-19 22:55:21 +02:00
2026-07-14 22:32:29 +02:00
2026-04-19 22:55:21 +02:00
2026-10-03 18:23:10 +02:00
2026-10-03 09:44:01 +02:00
2026-10-02 19:57:57 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-05-23 13:37:28 +02:00
2026-05-23 13:37:28 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-09-06 09:39:59 +02:00
2026-05-10 19:46:48 +02:00
2026-08-20 17:54:33 +02:00
2026-08-15 11:09:14 +02:00
2026-07-14 15:17:31 +02:00
2026-04-19 22:55:21 +02:00
2026-08-20 17:54:33 +02:00
2026-08-20 17:54:33 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-10-02 19:57:57 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-09-03 13:29:39 +02:00
2026-09-03 13:29:39 +02:00
2026-06-20 13:01:35 +02:00
2026-06-20 13:01:35 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-10-01 16:56:30 +02:00
2026-05-22 00:31:54 +02:00
2026-05-22 00:31:54 +02:00
2026-09-10 14:42:28 +02:00
2026-04-19 22:55:21 +02:00
2026-05-05 21:21:38 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-09-06 09:39:59 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-08-16 14:37:11 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-05-10 13:50:04 +02:00
2026-05-10 13:50:04 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-09-06 09:39:59 +02:00
2026-08-20 16:36:30 +02:00
2026-04-19 22:55:21 +02:00
2026-08-16 14:37:11 +02:00
2026-08-16 14:37:11 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-05-16 19:48:39 +02:00
2026-05-16 19:48:39 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-05-11 20:22:07 +02:00
2026-05-11 20:22:07 +02:00
2026-09-08 16:34:45 +02:00
2026-05-27 15:28:56 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-07-16 00:10:12 +02:00
2026-07-16 00:10:12 +02:00
2026-04-19 22:55:21 +02:00
2026-10-01 16:56:30 +02:00
2026-10-01 16:56:30 +02:00
2026-10-01 16:56:30 +02:00
2026-10-01 16:56:30 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-08-05 20:07:21 +02:00
2026-08-06 18:13:14 +02:00
2026-04-19 22:55:21 +02:00
2026-08-05 20:07:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-05-25 00:16:39 +02:00
2026-04-25 17:30:07 +02:00
2026-05-13 13:05:31 +02:00
2026-05-13 13:05:31 +02:00
2026-05-21 23:33:13 +02:00
2026-04-19 22:55:21 +02:00
2026-09-09 17:13:17 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-10-03 18:23:10 +02:00
2026-09-09 17:13:17 +02:00
2026-08-20 16:36:30 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-10-01 16:56:30 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-06-06 13:02:29 +02:00
2026-04-19 22:55:21 +02:00
2026-09-11 16:28:37 +02:00
2026-09-11 16:28:37 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-07-13 19:02:25 +02:00
2026-08-26 21:24:07 +02:00
2026-08-13 12:59:29 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-05-10 17:36:46 +02:00
2026-09-03 13:29:39 +02:00
2026-09-03 13:29:39 +02:00
2026-04-26 14:41:42 +02:00
2026-04-26 14:41:42 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-09-02 19:13:40 +02:00
2026-04-19 22:55:21 +02:00
2026-04-19 22:55:21 +02:00
2026-05-17 18:46:21 +02:00
2026-10-03 18:23:10 +02:00
2026-08-25 14:14:26 +02:00
2026-04-19 22:55:21 +02:00
2026-05-30 18:10:15 +02:00
2026-05-30 18:10:15 +02:00