# aes67-ESP32-P4 AES67 sender for the Waveshare ESP32-P4-ETH (PoE): Spotify Connect and HLS/m3u8 internet radio (with failover between them) go out as an AES67 multicast stream, locked to PTP. Everything is set up from a built-in web page, with SAP announcements and SDP export for receivers (tested with Riedel PTP). **Using it:** see the [user guide](docs/user-guide.md). **Quick start:** power the board over PoE and open http://p4-aes67.local/. Pick a source and save. Then find "P4 AES67" via SAP on the receiver, or import the SDP from the page. ## Building and flashing - ESP-IDF 5.5 or later, target `esp32p4`: `idf.py set-target esp32p4 && idf.py build` - cspot submodule: `git submodule update --init external/cspot && git -C external/cspot submodule update --init cspot/bell` - New board over USB: `tools/flash_board.py` - Update over the network: web page → Firmware, or `curl -f --data-binary @build/aes67_p4.bin -H 'Content-Type: application/octet-stream' http://p4-aes67.local/api/ota` Toolchain details and caveats (chip revision, Python packages for cspot) are in `CLAUDE.md`. ## Documentation - `docs/user-guide.md`: setup, web page, sources, Spotify, AES67, PTP, network, updates, player API, troubleshooting - `docs/aes67-core-base.md`: reusable AES67 core design (PTP, RTP, SDP/SAP, syslog, web UI and API contract) - `docs/hardware-and-design-notes.md`: board details and project-specific design - `web/index.html`: the web page (served by the device) - `CLAUDE.md`: working rules, build order and status ## Licence The AES67 core (`components/aes67_*`) and the web page (`web/`) are MIT. Everything else is GPL-3.0-or-later (`LICENSE`). The firmware image contains cspot (GPL-3.0), so distributing it falls under GPL-3.0. Third-party code, its licences and a known conflict with two Espressif binary libraries: [THIRD_PARTY.md](THIRD_PARTY.md).