IRPFFmpeg is a desktop internet radio player for Windows. It plays network audio streams through FFmpeg, shows the current track, loads cover art, keeps playback history and can record broadcasts to MP3 320 kbit/sec or FLAC.
The project is a lightweight C++17 Win32 application: no Electron, no browser shell, with a separate launcher that prepares the FFmpeg/SDL2 DLL environment.
Watch a short IRPFFmpeg demo on YouTube.
Main window: playlist management, playback controls, stream status, cover art, history and spectrum visualization in the normal layout.
Parametric equalizer: six bands with independent Gain/Q controls and a live graph of the resulting frequency response.
Compact mode: a small spectrum window with the current track line, previous-station button and restore-to-normal button.
Spectrum-free compact mode: elapsed playback time, current track and controls in a single narrow row.
Settings window: language selection, audio processing modules, tray behavior, cover popup and compact-mode options.
- play internet radio streams by URL;
- work with M3U playlists;
- add, delete, rename, save and switch stations from the interface;
- show ICY/stream metadata and technical stream status;
- keep user-defined station names unchanged when stream metadata is updated;
- handle problematic streams with corrupted or unstable audio more robustly;
- search, download and cache cover art;
- record the current broadcast to
Rec; - export recordings to MP3 320 kbit/sec or FLAC;
- write metadata and cover art to recordings when available;
- adjust volume from the dedicated arc control and tune a six-band parametric equalizer with a live summed frequency-response graph;
- Stereo Width, Exciter, DeepBass, Speech Intelligibility Compressor, Station LUFS Normalizer, GainRider and final limiter;
- minimize to the system tray;
- compact mode with spectrum visualization, elapsed playback time, current track text, previous-station button and restore-to-normal button;
- optional always-on-top behavior for the compact window;
- optional spectrum-free compact mode that keeps only the current-track bar and controls;
- persistent compact-window position across mode changes and application restarts;
- show a cover/title popup on track change while the app is in the tray or compact mode;
- choose the interface language: Russian or English;
- launch through
Start_IRPFFmpeg.exe, which checks runtime DLLs and starts the main app.
Run:
Start_IRPFFmpeg.exe
It is better not to run IRPFFmpeg.exe directly: the main application needs libraries from the heap_dll folder. The launcher checks for DLLs, temporarily adds heap_dll to the child process PATH and starts the player.
Recommended download flow from GitHub Releases:
- Download the DLL support archive
IRPFFmpeg-support-win-x64.ziponce if you do not already have aheap_dllfolder with third-party DLLs. - Download the project archive for the current version, for example
IRPFFmpeg-v1.2.3-project-win-x64.zip. - Extract both archives into the same folder.
- Run
Start_IRPFFmpeg.exe.
IRPFFmpeg-support-win-x64.zip contains only third-party runtime DLLs inside heap_dll and is not tied to the application version. It only needs to change when the third-party DLL set changes.
Versioned project archives contain only IRPFFmpeg project files: IRPFFmpeg.exe, Start_IRPFFmpeg.exe, language files, documentation and project support files. Starting with v1.1.0, new versions are published without third-party DLLs; extract the new project archive over a working folder that already has heap_dll.
Minimal working folder layout after extracting the DLL support archive and the project archive:
Start_IRPFFmpeg.exe
IRPFFmpeg.exe
heap_dll/
avcodec-62.dll
avfilter-11.dll
avformat-62.dll
avutil-60.dll
jpeg62.dll
libpng16.dll
SDL2.dll
SDL2_image.dll
swresample-6.dll
swscale-9.dll
turbojpeg.dll
zlib1.dll
Language/
english.lng
russian.lng
LICENSE
THIRD_PARTY_NOTICES.md
If you already have a working folder with heap_dll, update by downloading the new project archive and extracting it over the current folder.
If you assemble the package manually, use x64 DLLs only and do not mix files from different builds.
Where to get DLLs manually:
- FFmpeg DLLs (
avcodec,avfilter,avformat,avutil,swresample,swscale) - from the official FFmpeg download page: https://ffmpeg.org/download.html. FFmpeg publishes source code and links to Windows builds such as gyan.dev and BtbN. You need a shared/dev x64 build and DLLs from itsbinfolder. SDL2.dll- from official SDL2 Visual C++ archives: https://www.libsdl.org/release/. Usually this is an archive likeSDL2-devel-...-VC.zip; the DLL is insidelib\x64.SDL2_image.dll- from SDL2_image releases: https://github.com/libsdl-org/SDL_image/releases. Use a Windows x64/VC package compatible with your SDL2 version.libpng16.dll,jpeg62.dll,turbojpeg.dll,zlib1.dll- image/compression libraries. They are usually included with SDL2_image/your dependency bundle or can be obtained through vcpkg (x64-windows). For releases, use the exact DLLs that were built and tested with the app.
If the launcher reports missing DLLs, restore the missing files to heap_dll or download the full release archive again.
During runtime, the application may create:
app.dat - settings and state
Rec/ - recorded tracks
cover_cache/ - cover cache
debug_log.txt - diagnostic log, if logging is enabled
When a stream sends invalid audio data, the app skips those frames, temporarily shows Skipping corrupted data from server... and keeps waiting for a stable audio profile without noisy FFmpeg messages in the status line.
Requirements:
- Windows 10/11;
- Visual Studio 2022;
- MSVC toolset v143;
- Windows SDK 10;
- C++17;
- FFmpeg development package with
include,libandbin; - SDL2 and SDL2_image.
Open IRPFFmpeg.sln in Visual Studio and build Release|x64.
The current project paths are configured in IRPFFmpeg.vcxproj:
D:\Code\ffmpeg-dev\include
D:\Code\ffmpeg-dev\lib
D:\Code\ffmpeg-dev\bin
C:\dev\vcpkg\installed\x64-windows\include\SDL2
C:\dev\vcpkg\installed\x64-windows\lib
If your dependencies are in a different location, update the project properties or .vcxproj.
Detailed build instructions: docs/BUILD.md.
IRPFFmpeg.sln - Visual Studio solution
IRPFFmpeg.vcxproj - main application
Start_IRPFFmpeg.vcxproj - launcher application
IRPFFmpeg.cpp/.h - Win32 UI, state management, playback
audio_dsp.cpp/.h - audio processing
file_recording.cpp/.h - MP3/FLAC recording and metadata
cover_art.cpp/.h - cover search, download and caching
metadata_decode.cpp/.h - text metadata decoding
language_manager.cpp/.h - interface localization
compact_mode.cpp/.h - compact window mode
util.cpp/.h - shared utilities
Language/ - interface localization files
docs/ - user and developer documentation
Architecture details: docs/ARCHITECTURE.md.
- User guide
- Build instructions
- Release preparation
- Architecture
- GitHub repository description
- Contributing
- Changelog
- Third-party notices
- Authors
The repository is prepared as source code. Build outputs, x64/, .vs/, temporary settings, cover cache and recordings are excluded through .gitignore.
Ready EXE/DLL packages should be published through GitHub Releases, not stored in git history. See docs/RELEASE.md.
IRPFFmpeg source code is distributed under the MIT License. See LICENSE.
MIT License allows using, modifying and distributing the code, but requires preserving the copyright notice and license text in copies or substantial portions of the software.
If you use IRPFFmpeg code in another project, attribution is appreciated where practical:
Uses code from IRPFFmpeg by AsSergjo: https://github.com/AsSergjo
This attribution request is not an additional restriction beyond the MIT License.
Third-party components are distributed under their own terms:
- FFmpeg DLLs - LGPL/GPL according to the exact FFmpeg build;
- SDL2 and SDL2_image - zlib license;
- other runtime libraries - according to their own licenses.
Details and release requirements: THIRD_PARTY_NOTICES.md.




