Small update!
I fixed a race condition that could prevent the SD card from mounting correctly after the update. Please download Version 2.0 again to get the fix.
After installing the updated V2.0, please do the following:
- Settings → System → Diagnostics → Reset Library
- Settings → Library → Storage → Rescan Library
Due to the underlying FFmpeg update, the library database schema has changed. As a result, your media library needs to be reindexed.
Reporting bugs
For future bug reports, please enable Verbose Diagnostics first:
Settings → System → Diagnostics → Verbose Diagnostics
Then use the device until the bug occurs. After that, export the diagnostics:
Settings → System → Diagnostics → Export Diagnostics
Connect your Y2 to your computer and obtain the log. The framework logs almost everything happening on the device, and these logs help me identify and fix issues much more quickly.
If you'd like to report a bug, please create a GitHub issue (many people already do!). Including the diagnostics ZIP with your report makes it much easier to track down the problem.
Y2Player 2.0 - Complete Media Engine Rewrite
Y2Player 2.0 is by far the biggest update since the project started.
Over the last two nights, I completely tore out the old media engine and rebuilt it from scratch.
When I originally started Y2Player, I chose to use Android's stock MediaPlayer API. At the time, I underestimated how limited it actually is. The stock media framework is heavily dependent on the device manufacturer and whatever codecs they decided to include. On the Innioasis Y2, that meant limited format support, inconsistent playback behavior, and a lot of restrictions that made adding new features increasingly difficult.
So I decided to stop using the stock player and replace it entirely.
Fortunately, one thing worked in my favor. From the beginning, I designed Y2Player with a relatively modular architecture that kept the playback engine separated from the rest of the application. That meant I could swap out the entire media backend with surprisingly few changes to the rest of the codebase. What could have turned into a complete rewrite of the app ended up being almost a plug-and-play replacement of the playback engine.
Y2Player 2.0 now uses the latest stable release of FFmpeg as its decoding backend. Instead of relying on Android's outdated media framework, Y2Player now ships with its own modern media engine, providing far better compatibility, stability, and room for future improvements.
What's New
- ✅ Completely rewritten media engine
- ✅ Powered by the latest stable version of FFmpeg
- ✅ No longer dependent on Android's stock
MediaPlayer - ✅ Improved playback stability
- ✅ Much broader codec and container support
- ✅ Better compatibility with modern audio files
- ✅ Foundation for future playback improvements
Supported Audio Formats
Y2Player 2.0 now supports the most commonly used audio formats, including:
- MP3
- FLAC
- WAV
- AAC / M4A
- OGG Vorbis
- Opus
- WMA
- AIFF
- And many more
Supported Containers
Audio can now be played from containers such as:
- MP3
- WAV
- FLAC
- ALAC
- M4A
- MP4
- OGG
- MKV
- WebM
- And many more
Why FFmpeg?
Moving to FFmpeg means Y2Player is no longer limited by the firmware's built-in codec support. Instead, it uses one of the most widely used multimedia libraries available, giving the player a much more capable and reliable playback engine.
This rewrite also lays the foundation for future features such as:
- Real gapless playback
- Real ReplayGain support
- Better metadata handling
- High-resolution audio improvements
- Additional playback enhancements
This update took a lot more work than I originally expected, but it was absolutely the right decision.
It should also resolve the vast majority of issues users experienced with unsupported audio files. Looking back, the original media engine quickly became the biggest limitation of the project - it was simply a consequence of my inexperience and not fully understanding the limitations of Android's stock media framework.
With FFmpeg at its core, Y2Player now has a modern, future-proof media foundation that I can continue building on without being constrained by the original Android media stack. This rewrite also makes future features significantly easier to implement, rather than having to fight against the limitations of the stock player every step of the way.