mirror of
git://f0xx.org/ac/ac-mobile-android
synced 2026-07-29 01:07:35 +03:00
Bundle iodine 0.7.0 with JNI TUN bridge; apply BE iodine credentials on connect; canonical heartbeat URL fallback. Co-authored-by: Cursor <cursoragent@cursor.com>
Native codecs (libvpx, Opus, Speex)
The app loads libandroidcast_codecs.so for availability probes and future software encode/decode paths.
Current status
| Component | Java | Native | Notes |
|---|---|---|---|
| FEC 3/4 + RS | Yes | — | v2 per-shard on wire (FecShardWire); v1 monolithic decode still accepted |
| NACK + retransmit cache | Yes | — | UDP MSG_NACK, combined with FEC when enabled |
| libvpx VP8/VP9 | Native | Encode + decode | Screen cast via ImageReader; receiver libvpx (decoder uses VPX_CODEC_USE_ERROR_CONCEALMENT when supported) or MediaCodec fallback |
| Opus / Speex | Probe + static link when lib*.a built |
Encode/decode JNI sinks | scripts/build-native-codecs.sh → CMake autolink |
Enable native codecs (developer)
-
Initialize all third-party submodules:
bash scripts/init-third-party-submodules.sh -
Build static libs per ABI (NDK auto-detected via
scripts/android-ndk.sh):./scripts/build-native-codecs.sh arm64-v8a ./scripts/build-native-codecs.sh armeabi-v7a # if shipped in APKIf the repo path has spaces, the script stages under
/tmp/androidcast-libvpx-$USER. -
Gradle / CMake link
build/native/<abi>/lib*.awhen present and setANDROIDCAST_HAVE_LIBVPX,ANDROIDCAST_HAVE_OPUS,ANDROIDCAST_HAVE_SPEEXaccordingly. -
./gradlew assembleDebug
Optional override: ANDROIDCAST_LIBVPX_LIB only applies when its path contains the current ABI name (e.g. .../arm64-v8a/libvpx.a).
ABIs without matching .a files still build; missing codecs are disabled on those architectures.
Stream protection defaults
- Default: None (no FEC/NACK)
- Enable in Global settings → Stream protection (UDP)
- After handshake, sender and receiver negotiate the effective mode (no protocol version bump)
- Until negotiation completes, UDP protection stays off; peers without FEC support ignore protected frames
Full checklist: docs/ROADMAP.md