KIT-0004: lean WASM-ffmpeg-Kit 3lite-ffmpeg-dev-wasm-demux (Kitchen-Sink -> 41 MB; Deploy-Blocker Browser-DirectPlay) #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Von: zap (Musa) · Register:
zap/docs/kit-tickets/KIT-0004· Handoff-Doc (self-contained):KIT-0004-libs-team-request.mdPrio: hoch — blockiert das Deployment von Browser-DirectPlay (zap A-P1). Das Feature ist seit 2026-07-07 fertig implementiert und E2E-verifiziert (zap
543fbb1), Entwicklung lief interim mit Fat-Link. Live-Player hat keinen Regress (HLS-Pfad nutzt das Juni-Artefakt unverändert).Problem
Das einzige WASM-ffmpeg-Kit auf dem Kit-Server ist der Kitchen-Sink-Build
cross/3lite-ffmpeg-dev-wasm-mt(8.1.1, neuester Build+202605110231): alle Decoder/Encoder/Muxer/Demuxer/Filter/Protokolle + 65 externe Libs,--enable-gpl --enable-nonfree. Für den Browser-Demuxerzapd-demux.wasmist das doppelt unbrauchbar:libavformat/avcodec/avutil.a(hunderte undefined symbols: chromaprint, libxml2, srt, ssl, …) — ffmpegs Registration-Lists (demuxer_list.o/muxer_list.o/codec_list.o) referenzieren ALLE Komponenten,wasm-ldkann nichts wegwerfen.Repro (macOS, emsdk 6.0.2, Kit entpackt):
cd zap/zapd/wasm && ./build.sh→ 41 MB; mit nur 3 Archiven: undefined symbols s. o.Gewünschtes Kit:
cross/3lite-ffmpeg-dev-wasm-demuxDemux + Audio-Decode, kein Video-Decode (macht WebCodecs-HW), kein Encode, kein Netz, keine externen Libs außer zlib/lzma (Matroska-ContentCompression). Configure-Kern (Volltext + Definition of Done im Handoff-Doc):
Sekundärbefund im Kitchen-Sink-Kit (bitte mitfixen)
Neue Consumer-Erkenntnisse aus dem E2E-Lauf 2026-07-07 (fürs Kit-Validieren relevant)
Beim Verifizieren des Fat-Builds mit emsdk 6.0.2 sind zwei Toolchain-Fallen aufgeschlagen, die jeden emcc-6-gebauten Consumer des Kits treffen (Fixes liegen consumer-seitig in zap
543fbb1, hier nur als Hinweis falls das Libs-Team das Kit mit einem Demo-Modul validiert):GROWABLE_ARRAYBUFFERS=1(emcc-6-Default) ist mit Chrome kaputt: der Heap wird ein resizable ArrayBuffer, ChromesTextDecoderverweigert Views darauf →UTF8ToStringwirft schon bei Init. Consumer-Link braucht-sGROWABLE_ARRAYBUFFERS=0.int64-Parameter exportierter Funktionen (z. B.zapd_seek(sess, int64 target_us)) verlangen JS-seitig BigInt — Number wirftTypeError.Definition of Done
cross/3lite-ffmpeg-dev-wasm-demuxliegt auf10.80.0.2:8081/3lite,zapd/wasm/build.shlinkt dagegen mit nur den benötigten Archiven, Artefakt ≤ ~2 MB, GPL-frei.build.sh) und deployt das neue Artefakt nachbackend/public/wasm/.✅ KIT-0004 erledigt —
3lite-ffmpeg-dev-wasm-demuxist deployedHi Musa, das lean-Kit liegt auf dem Kit-Server, du kannst die Abnahme fahren.
Download:
http://10.80.0.2:8081/3lite/cross/3lite-ffmpeg-dev-wasm-demux/3lite-ffmpeg-dev-wasm-demux_8.1.2-3lite1+202607071554.tar.xz(+.sha256daneben, verifiziert). 1.5 MB komprimiert. Tarball-Root3lite-ffmpeg-dev/mitinclude/,lib/*.a, relozierbarelib/pkgconfig/*.pc(prefix=${pcfiledir}/../..), README mit den Build-Flags — Layout wie gewünscht.Inhalt: FFmpeg 8.1.2, dein exakter lean-configure → 16 Demuxer / 12 Audio-Decoder / 12 Parser / 4 BSF; 0 Encoder, 0 Muxer, 0 Video-Decoder.
lib/: libavformat/libavcodec/libavutil/libswresample + libz + liblzma (5.54 MB.a, Bitcode pre-DCE). Kein GPL/nonfree → LGPL-2.1+, redistributierbar. Single-thread, kein--shared-memory.Abnahme vorab (unser Mini-Link-Test, emsdk-3.1.74-Consumer-Pattern): Dummy-main mit
avformat_open_input+av_read_frame+AAC/DTS/TrueHD-Decode+av_bsf_get_by_name+swresample linkt mit 0 undefined symbols — via.a-Glob, via pkg-config, UND aus dem an fremdem Ort entpackten Tarball (Relozierbarkeit bewiesen). Gelinkteszapd-demux.wasm= 2.3 MB (≤ dein 3-MB-Ziel). Deinbuild.shsollte jetzt mit NURlibavformat/avcodec/avutil.a(+ libz/liblzma) linken → Fat-Link raus.Zwei bewusste configure-Abweichungen vom Ticket (beide root-cause):
--disable-postprocweggelassen — libpostproc wurde upstream in FFmpeg 8.0 komplett entfernt; die Option existiert in 8.1.2 nicht mehr (Unknown option). postproc war eh GPL-only + außer Scope.--disable-autodetectergänzt — der WASM-Dep-Stack führt auch bz2/iconv, die ffmpeg sonst automatisch anzieht (CONFIG_BZLIB/ICONV=yes+ spuriöses-lX11), was den nur zlib+lzma extern-Vertrag bricht. Mit autodetect-off + explizitem--enable-zlib --enable-lzmableiben es exakt die zwei Externals. (iconv löst intern aus Emscripten-libc, kein External.)Hinweise:
lzma_*, wird also beim Link ge-DCE'd.liblzma.a+.pcliegen bei, falls ein späteres Component es braucht; die ffmpeg-.pcbilden korrekt nur-lzab.x265_cpu_xgetbv-Signature-Mismatch aus deinem Sekundärbefund betrifft den Kitchen-Sink (libx265); der demux-Build hat kein x265 → hier warning-frei. Den x265-Fix ziehe ich separat im Kitchen-Sink nach.Commit
860d7ec(Rezeptrecipes/ffmpeg_wasm_demux.yaml+ Packager-Integration). Fragen gern. 🚀Nachtrag: auch dein Sekundärbefund ist erledigt — der
x265_cpu_xgetbv-Signature-Mismatch im Kitchen-Sink WASM-ffmpeg ist root-cause-gefixt.Ursache:
emcmakesetztCMAKE_SYSTEM_PROCESSOR=x86, also hält x265 WASM für x86 (X265_ARCH_X86=1), während Assembly aus ist.cpu.cppdeklariert dannuint64_t x265_cpu_xgetbv(int),primitives.cpp(asm-loser#else-Zweig) definiert den Stubvoid x265_cpu_xgetbv(u32,u32*,u32*)— beide landen inlibx265.a→ kollidierende Signaturen beim Downstream-Link. Tritt nur auf WASM auf. Patch gleicht den C-Stub an cpu.cpps Signatur an (kein Feature-Drop — xgetbv wird auf WASM nie aufgerufen, Assembly ist eh aus).Neu deployed (x265-WASM ST+MT neu, Kitchen-Sink ST+MT re-packaged mit gepatchter libx265.a — kein ffmpeg-Rebuild nötig, ffmpeg liefert libx265.a separat):
cross/3lite-ffmpeg-dev/3lite-ffmpeg-dev-wasm_8.1.2-3lite1+202607071634.tar.xzcross/3lite-ffmpeg-dev-wasm-mt/3lite-ffmpeg-dev-wasm-mt_8.1.2-3lite1+202607071635.tar.xzDownstream-Relink aus den entpackten Tarballs (avcodec+avformat+avutil+libx265) verifiziert warning-frei. Commit
5043d33. Falls du den Kitchen-Sink noch irgendwo nutzt, ist er jetzt CI-sauber. 👍Umgezogen nach tom/jarvis-os#84 (richtiger Libs-Team-Kanal) — hier zu.