Chisle
The coding-agent plugin that bills 52% of a bare model across 20 live tasks. Terse persona + tool-output compressor + context diet.
翻訳待ち
React Native and web audio player for files, streams and internet radio, with opt-in video, that keeps playing through dead sockets, network switches, phone calls and frozen JavaScript.
翻訳待ち
開発ツールTypeScript · SwiftGitHub @rmotafreitasオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
Native-first React Native audio player: internet radio, ICY metadata, recovery, media sessions
翻訳待ち
Loading the full README.
Read the full README ↗react-native-anything-player is a native-first audio player for React Native and the web — files, streams and internet radio, with opt-in video — that keeps playing correctly in the background, through network loss, interruptions and JavaScript freezes. One API on iOS, Android, Expo web, React Native Web, React (Vite, Next.js) and plain web pages, with AirPlay, Google Cast and the voice assistants.
import { Player } from 'react-native-anything-player';
const player = new Player();
await player.load('https://radio.example.com/stream');
await player.play();
That is the whole integration for a radio that reconnects on its own, survives Wi-Fi ↔ cellular handoffs, respects phone calls and other apps, shows the station and the current song (from ICY metadata) on the lock screen, and releases its connection when paused.
Playback logic that lives in JavaScript breaks in exactly the situations a player must handle: React Native suspends JS timers in the background, the JS thread can be frozen or reloaded, and native events race JS commands. RNAP keeps the whole player — state machine, recovery, audio focus, interruptions, media session, clocks — in native code. On iOS and Android, JavaScript sends commands and mirrors native state, and a frozen JS thread does not stop playback. Only what you ask JavaScript for needs it (refresh, getLicense, sideloaded subtitles); on the web the engine itself is JavaScript.
RNAP was built by @rmotafreitas, developer of the Rádio Animu mobile app and part of the animu.moe team, when React Native Track Player went commercial (v5 needs a paid licence even for a free app from a non-profit) and staying on air through a dropped network, a phone call or a switch to Instagram still took a pile of app code with every available player. docs/why.md has the full story with sources; docs/recovery.md lists every recovery rule and the failure behind it.
Read from each library's published source; sizes, methodology and the gaps RNAP still has are in Comparison & benchmarks and the roadmap.
require('./a.mp3')), content:// URIs, HTTP(S) files, progressive streams, HLS, ICY (Shoutcast/Icecast) radio.StreamUrl artwork), live-edge recovery, gapless reconnects when a station drops the connection, exactly one connection per stream (verified against a connection-counting server), paused-stream connection release.Player with a picture. HLS, DASH, MP4, and MKV, WebM and MPEG-TS through a remux; renditions, subtitles, DRM, fullscreen, Picture in Picture, AirPlay and Cast. See Video.audioSample) on iOS, Android and the web — including live HTTP streams on iOS, where AVPlayer's audio tap never runs.status.route), the system output picker (<RoutePicker />: AirPlay, Android's Output Switcher), and Google Cast as a build option (<CastButton />), with radio titles kept while casting.playFromSearch).group, favorites, recently played) in Android Auto, Android Automotive OS, Wear OS and CarPlay; opt-in with car. See Cars & watches.npm install react-native-anything-player
# or: yarn add react-native-anything-player / pnpm add react-native-anything-player
This is the beginning of the README. Read the rest at the original. Read the full README ↗
react-native-anything-player/react: Vite, Next.js) and plain pages (react-native-anything-player/web), on a TypeScript twin of the engine that passes the same conformance suite: ICY metadata over fetch + MSE, splices, recovery, the Media Session, the visualizer.player.getDiagnostics(), and a CLI (rnap) that lists and switches the build modules, estimates their size, checks an app's setup and its stream URLs, and rewrites the mechanical part of a migration.progress events from a native timer (progressInterval) when JS must follow the audio where its own timers are frozen.