LukeB42/Cycast: A high-performance internet radio streaming server written in Python with Cython optimizations.

RadioStream: A cython-Powered Audio Streaming Server

RadioStream⁣ is a presentation project designed ‍to showcase the performance benefits of⁤ using Cython for audio streaming applications.‍ It allows for streaming‌ audio from a ⁢source (like Icecast)⁤ or, as a fallback,⁢ from a local playlist of MP3/OGG files. The system is built around a Flask web request, leveraging the asynchronous capabilities of Tornado for handling web requests and audio streaming.

Architecture:

The system consists of the following components:

* ‍ Icecast Source⁣ (8000): The primary audio ​source.⁤ RadioStream attempts to connect to an Icecast⁢ server on port 8000.
* ​ flask on Tornado (8001): A web‍ server ⁢built with Flask ⁣and tornado.It provides:
* A Web UI (HTML/CSS/JS) for user interaction.
​ * ‍ /api/status endpoint: Returns server ‌status details in JSON format.
⁤* /api/stats endpoint: Provides ⁣streaming⁢ statistics in JSON format.
⁤ * /stream endpoint: Delivers the audio stream.
* ​ ⁢ Playlist Feeder: If the ‍Icecast source is unavailable,RadioStream falls back to playing audio files from⁤ the ./music directory.
* Circular Audio ⁣Buffer: A buffer⁢ used to ⁣store audio data, ⁣mitigating potential ‍buffering issues.The size of this buffer ⁤can⁤ be adjusted for optimal performance.

Troubleshooting:

Here’s a guide to resolving common issues:

* ​ Cython build Failures: ⁤ Cython requires a C ​compiler to build its extensions.
⁤ ⁣ ‍ * Ensure a C compiler is ⁤installed: gcc (Linux), Xcode (macOS), or MSVC (Windows).
* Update ⁣Cython ⁣and setuptools: pip install --upgrade cython setuptools

* Audio Stuttering/Buffering:

⁣ * Increase Buffer Size: Adjust​ the size_mb parameter when initializing the circularaudiobuffer. Such as: audio_buffer.CircularAudioBuffer(size_mb=20) increases the ‍buffer to 20MB.
⁢* ‌ ​ Network Latency: High network latency⁣ between ⁢the server and the client can cause buffering.
‍ * Reduce Load: For testing, ​reduce the ‌number⁣ of simultaneous listeners to isolate potential performance bottlenecks.
* Connection Issues ‍to Source:

⁣ * Firewall: ⁢Verify that firewall ⁢settings are not blocking ​the connection to the Icecast source on ​port 8000.
⁤* Port⁢ Availability: Ensure that port 8000 is not already in use. Use the command​ netstat -an | grep 8000 (Linux/macOS)‍ to check.
⁤ * ‍ Authentication: Double-check the Icecast ‍server password.
* Playlist Problems:

* ‍ File Location: Confirm that MP3⁣ and OGG files are located in the ./music ​directory.
⁤* Permissions: Verify that ⁣the RadioStream⁣ process has read permissions for the audio files.
* Console⁤ Output: ⁢ examine the console output for any error messages related to file loading or playback.

License:

RadioStream is released under the MIT ⁣License, allowing for modification and⁣ use in personal⁢ or commercial projects.

Potential Extensions:

This project provides a solid foundation⁤ for building more advanced audio streaming solutions. ⁣ Possible enhancements include:

* Metadata Handling: Implement⁤ more robust metadata parsing and display.
* Recording Functionality: Add the ability⁢ to record the ​audio stream.
* ‍ Multiple Mount Points: Support multiple‌ simultaneous streams with ‌different configurations.
*⁣ Admin interface: Develop a web-based interface for managing the server.
*

Leave a Comment