Castria: Android mp3 decode 18x worse than iPhone
On of the critical workflows for Castria is doing the ad detection on the client. It needs to be done on the client for copyright reasons. Castria never modifies any files, clients each download their own copy allowing podcasters to collect their download for CPM as well as do dynamic ad insertion based on region/time/etc. We merely detect and skip the ads without modifying the file in anyway.
To do that, we need to decode the file from mp3 to wav for the analysis. iPhones have specially dedicated hardware for doing this probably because it's more power efficient, but it's also WAY faster than Android's solution.
The numbers
(labeled events, ~34h window since the flag turned on 2026-06-19; N=182):
| Metric | Android | iOS |
|---|---|---|
| skip_plan events | 141 | 41 |
| Avg gaps / plan | 3.54 | 3.00 |
| Compute speed (realtime ×) | 43× | 769× |
| Compute CPU (ms) | 10,047 | 605 |
| Audio decode | software (hwDecode=false) |
hardware path |
| Devices / users | Pixel 9a + 9 Pro / 2 | iPhone 16,1·17,2·12,3 / 3 |
Findings:
Plan shape is essentially identical. On the 12 episodes computed on both platforms, gap counts match 11/12. The single mismatch is dynamic ad insertion (different downloaded copies, different durations) — not engine divergence. So Android isn't producing worse/fewer skips than iOS.
Android compute is ~16× more CPU-heavy (10s vs 0.6s) and ~18× slower in realtime factor — because these test Pixels do software MP3 decode while iOS uses the hardware/Accelerate path. This is the one genuine platform gap.
Caveats: tiny internal cohort — 2 Android + 3 iOS devices, 5 users total, not a production rollout. And the "zero iOS failures post-fix" rests on only 2 post-fix iOS events, so it's directionally right but thin. Don't generalize hwDecode=false to all Android SoCs — it's a property of these Pixels.
Conclusion
This is a real problem for Castria, but there is hope!
Even with Dynamic ad insertion, iPhone users and Android users are likely to get the same file if they live in the same region. It doesn't matter if the ads were computed on an iPhone or an Android phone, the result gets cached on the server. This means only the very first person to process an episode (could happen in the background) pays the upfront cost of the detection, then sends their results back to the server where they can be re-used by anyone who happens to have gotten that exact same file.
Basically the more people who use Castria, the less likely it is for anyone to even notice the ad detection happening.
So tell your friends! They'll help improve your experience.
Download here: https://castria.app