API стриминга

Как воспроизводить станции RadioMV в вашем приложении, на сайте или в веб-сервисе и как показывать метаданные «сейчас в эфире». Всё на этой странице общедоступно — API-ключ и регистрация не требуются.

Быстрый старт

ЗадачаИспользуйте этот URL
Воспроизвести станцию в приложении или браузере (HLS, адаптивное качество)https://stream.radiomv.com/stream/{station}.m3u8
Воспроизвести станцию на простом / аппаратном MP3-плеереhttp://stream.radiomv.com/stream/{station}.m3u — загрузите файл и перейдите по URL внутри него
Показать, что сейчас в эфиреhttps://stream.radiomv.com/api/metadata/{station}
Получать обновления «сейчас в эфире» в реальном времени (без опроса)https://stream.radiomv.com/api/metadata/{station}/events (SSE)

Замените {station} на идентификатор из списка станций, например:

GET /stream/english.m3u8

Базовый URL и правила для хостов

Всегда начинайте с https://stream.radiomv.com. Он автоматически направляет каждого слушателя на ближайший сервер (гео-маршрутизация).

Никогда не «зашивайте» хосты *.radiomv.live в код Плейлисты, которые возвращает stream.radiomv.com, содержат абсолютные URL на хостах *.radiomv.live — так задумано (аудиотрафик идёт напрямую на ближайший к слушателю сервер). Эти хосты — внутренняя инфраструктура: они могут измениться, переехать или исчезнуть в любой момент. Переходите по ним, когда плейлист их выдаёт, но никогда не сохраняйте их в приложении, конфигурации или базе данных.
Если вы ограничиваете исходящие хосты — разрешите оба домена Браузерный плеер, направленный на stream.radiomv.com, будет загружать аудиосегменты с *.radiomv.live. Для веб-страницы это означает директивы CSP вида:

media-src https://stream.radiomv.com https://*.radiomv.live;
connect-src https://stream.radiomv.com https://*.radiomv.live;

HTTPS или HTTP: везде, где возможно, используйте https://. Обычный http:// намеренно оставлен рабочим для аудио-эндпоинтов (.mp3, .m3u), чтобы встраиваемые и аппаратные плееры без поддержки TLS могли подключаться.

Станции

Основные станции

Круглосуточные программы и музыка.

ID станцииНазваниеЯзык
slavicХристианское РадиоРусский
slavic-musicМузыкальный КаналРусский
slavic-kidsДетский КаналРусский
englishEnglishАнглийский
spanishSpanishИспанский
germanGermanНемецкий

Библейские станции

Непрерывное чтение Библии, круглосуточно.

ID станцийНазвание
slavic-nt / slavic-otНовый / Ветхий Завет (русский)
english-nt / english-otНовый / Ветхий Завет (английский)
spanish-nt / spanish-otНовый / Ветхий Завет (испанский)
german-nt / german-otНовый / Ветхий Завет (немецкий)

С точки зрения интеграции библейские станции ведут себя точно так же, как основные — те же URL, те же плееры, тот же API метаданных (в заголовке — текущая книга и глава). Единственное отличие: в их HLS-мастер-плейлистах нет уровня качества ultra.

Получайте список станций динамически GET /api/metadata возвращает по одной записи на станцию — используйте его, чтобы строить список станций динамически, а не «зашивать» его в код.

Вариант 1 — HLS (рекомендуется)

HLS — рекомендуемый способ воспроизведения RadioMV в любой современной среде: iOS, Android, браузеры, смарт-ТВ, VLC, ffmpeg. Качество адаптируется к скорости соединения слушателя автоматически.

Достаточно одного URL — мастер-плейлиста:

GET /stream/{station}.m3u8

Передайте этот URL вашему плееру. Он сам обнаружит варианты качества, выберет подходящий и будет загружать аудиосегменты.

Уровни качества

Что мастер-плейлист объявляет сегодня:

ВариантБитрейтКодек
lofi~24–32 кбит/сHE-AAC v2
midfi64 кбит/сHE-AAC
hifi128 кбит/сAAC-LC
ultra248 кбит/сAAC-LC

У библейских станций нет уровня ultra. Сегменты — 6-секундные fMP4/CMAF (.m4s).

Не собирайте URL вариантов и сегментов вручную Уровни, битрейты и структура URL могут измениться; контракт — это мастер-плейлист. URL вариантов, которые он возвращает, содержат query-строку (например, ?sid=...) — передавайте URL без изменений, как это и делает любой стандартный HLS-плеер.

Встраивание на сайт (hls.js + Safari)

Safari воспроизводит HLS нативно; остальным браузерам нужен hls.js:

<audio id="player" controls></audio>
<script src="https://cdn.jsdelivr.net/npm/hls.js@1"></script>
<script>
    const url = "https://stream.radiomv.com/stream/slavic.m3u8";
    const audio = document.getElementById("player");
    if (audio.canPlayType("application/vnd.apple.mpegurl")) {
        audio.src = url;                    // Safari / iOS
    } else if (Hls.isSupported()) {
        const hls = new Hls();
        hls.loadSource(url);
        hls.attachMedia(audio);
    }
</script>

CORS открыт (Access-Control-Allow-Origin: *) на всех эндпоинтах стриминга и метаданных, поэтому это работает с любого веб-домена.

Вариант 2 — MP3 (простые плееры и «железо»)

Один поток MP3 с фиксированным качеством 128 кбит/с, совместимый с Icecast/SHOUTcast. Работает со всем, что умеет воспроизводить MP3 по URL: теги <audio>, VLC, Winamp, интернет-радиоприёмники, микроконтроллеры.

Рекомендуемая схема — сначала разрешить адрес, потом играть:

  1. Загрузите плейлист:
    GET /stream/{station}.m3u
  2. Тело ответа — одна строка: прямой URL MP3-потока на сервере, назначенном этому слушателю.
  3. Подключите плеер к этому URL.
  4. При каждом переподключении или новом сеансе воспроизведения сначала заново загружайте .m3u. Никогда не сохраняйте полученный URL — он указывает на один конкретный сервер, и сохранённый адрес перестанет работать, если этот сервер будет заменён. Устройства, которые запрашивают адрес заново, восстанавливаются сами; устройства, закэшировавшие конечный URL, — это те самые, что «вечно подключаются».

Прямой URL (тоже поддерживается — например, для обычного тега <audio>, где схема с плейлистом непрактична):

GET /stream/{station}.mp3

Метаданные ICY (SHOUTcast)

Если клиент отправляет заголовок Icy-MetaData: 1, поток будет содержать названия текущих треков в стандартном формате ICY. В ответе присутствуют:

icy-name: English
icy-br: 128
icy-metaint: 16000

icy-metaint — интервал в байтах между блоками метаданных. Если не отправлять Icy-MetaData: 1, вы получите чистый MP3-поток без встроенных метаданных — тогда используйте JSON API метаданных.

Метаданные «сейчас в эфире»

JSON, без авторизации, CORS открыт. Для библейских станций в заголовке — текущая книга и глава; для основных — текущий трек или программа.

GET /api/metadata

Массив — что в эфире на всех станциях.

GET /api/metadata/{station}

Объект — что в эфире на одной станции:

{
    "station": "english",
    "name": "English",
    "title": "The Righteous Requirement of the Law | Clip 1 | Derek Prince",
    "artist": "J Scott Rakozy",
    "updated_at": 1787445124
}

updated_at — Unix-время в секундах. artist может быть пустым. Неизвестные дополнительные поля считайте совместимыми расширениями формата.

GET /api/metadata/{station}/events

Поток Server-Sent Events — держит соединение открытым и отправляет каждое изменение строкой data: с тем же JSON:

const es = new EventSource("https://stream.radiomv.com/api/metadata/slavic/events");
es.onmessage = (e) => {
    const now = JSON.parse(e.data);
    document.getElementById("title").textContent = now.title;
};
Предпочитайте SSE, а не опрос Если всё же нужно опрашивать — запрашивайте GET /api/metadata/{station} не чаще одного раза в 10–15 секунд. Все эндпоинты имеют ограничение частоты запросов по IP; корректно работающие клиенты никогда с ним не столкнутся.

Проверка из командной строки

# Что сейчас в эфире
curl -s https://stream.radiomv.com/api/metadata/slavic

# Живой поток метаданных (Ctrl-C для выхода)
curl -N https://stream.radiomv.com/api/metadata/slavic/events

# HLS мастер-плейлист
curl -s https://stream.radiomv.com/stream/slavic.m3u8

# Воспроизведение в VLC / ffplay / mpv
vlc https://stream.radiomv.com/stream/slavic.m3u8
ffplay -nodisp https://stream.radiomv.com/stream/slavic.m3u8

# MP3: получить плейлист, затем проверить поток по адресу из него
curl -s http://stream.radiomv.com/stream/slavic.m3u

Идентифицируйте своё приложение (User-Agent)

Пожалуйста, отправляйте User-Agent, который называет ваше приложение или сервис, а не стандартное значение вашей HTTP-библиотеки. Так мы узнаём вашу интеграцию в аналитике слушателей, замечаем, когда очередной ваш релиз меняет поведение, и можем связаться с вами до того, как внесём изменение, которое вас затронет.

Желаемый формат (стандартный формат HTTP User-Agent):

User-Agent: YourApp/2.1 (Android 14; https://yourapp.example)

Формат ни на что не влияет технически — отсутствующий или обезличенный User-Agent всё равно будет играть. Но идентифицируемый агент даёт вам лучшую поддержку и предупреждение об изменениях заранее.

Правила добрососедства

Стабильность этого контракта

URL и форматы JSON, описанные на этой странице, — поддерживаемый публичный интерфейс. Всё, что вы обнаружите за пределами этой страницы (внутренние хосты, недокументированные пути, дополнительные поля), может измениться без предупреждения. Если эта страница расходится с наблюдаемым поведением — сообщите нам, и мы исправим то, что окажется неверным.