API конфигурации приложения
Список станций, URL потоков, пути метаданных, обложки, расписания и настройки — один JSON-файл, на котором работает полноценный клиент RadioMV.
Эндпоинт
GET
https://stream.radiomv.com/static/appv3.json
Текущая конфигурация (v3). Это единственный URL, который приложению нужно «зашить» — всё остальное берётся из него.
Как работают URL в v3
config.baseUrl — корень для всех относительных путей в файле. Чтобы получить полный URL, добавьте его в начало: baseUrl + station.streams.hls → https://stream.radiomv.com/stream/slavic.m3u8. Пути, уже начинающиеся с https:// (например, shareUrl), используются как есть. Сохраняйте query-строки (например, ?v=1 у обложек) — они версионируют кэш.
Формат ответа
{
"config": {
"version": "20260428.2044",
"baseUrl": "https://stream.radiomv.com",
"analytics": "/api/analytics"
},
"navigation": { ... },
"settings": { ... },
"stations": [ ... ]
}
Объект config
version
string
обязательное
Версия на основе даты в формате
YYYYMMDD.HHMM. Используйте для инвалидации кэша.
baseUrl
string
обязательное
Корневой URL для всех относительных путей в этом файле.
analytics
string
обязательное
Относительный путь эндпоинта аналитики воспроизведения (официальные приложения отправляют туда пакеты событий по POST).
Объект navigation
Навигационные URL по языковым группам — у каждой группы есть абсолютный URL explore:
{
"navigation": {
"english": { "explore": "https://radiomv.com/support/#english" },
"spanish": { ... },
"german": { ... },
"slavic": { ... }
}
}
Объект settings
Контактная информация и ссылки по языковым группам:
{
"settings": {
"slavic": {
"website": "https://sl.radiomv.com/",
"office": "+1-425-296-7829",
"sms": "+1-919-283-9868",
"beta-program": "https://...",
"report-a-bug": "https://...",
"share-url": "https://radiomv.com/apps/"
}
}
}
website
string
Основной сайт для данного языка.
office
string
Телефон офиса.
sms
string
Номер для SMS.
beta-program
string
URL записи в бета-программу.
report-a-bug
string
URL формы сообщения об ошибке.
share-url
string
URL, которым делятся при рекомендации приложений.
Массив stations
Массив всех объектов станций. Каждая станция содержит:
{
"id": "slavic",
"name": "Христианское Радио",
"language": "slavic",
"isMain": true,
"streams": {
"hls": "/stream/slavic.m3u8",
"mp3": "/stream/slavic.m3u"
},
"metadata": "/api/metadata/slavic",
"artwork": {
"1x1": "/assets/slavic/artwork-1x1.jpg?v=1",
"1x1Small": "/assets/slavic/artwork-1x1-small.jpg?v=1",
"16x9": "/assets/slavic/artwork-16x9.jpg?v=1",
"nowPlaying": "/assets/slavic/artwork-now-playing.jpg?v=1",
"nowPlayingSmall": "/assets/slavic/artwork-now-playing-small.jpg?v=1",
"miniPlayer": "/assets/slavic/mini-player.jpg?v=1"
},
"video": "/assets/slavic/video-loop.mp4?v=1",
"schedule": "/static/schedules/slavic.json",
"shareUrl": "https://player.radiomv.com/slavic.html"
}
Поля станции
id
string
обязательное
Идентификатор-слаг станции (например,
slavic, slavic-nt). Совпадает с ID станций в API стриминга и метаданных.
name
string
обязательное
Отображаемое название станции на её языке.
language
string
обязательное
Языковая группа:
english, spanish, german или slavic. Совпадает с ключами navigation и settings.
isMain
boolean
обязательное
Основная это станция (true) или дополнительный канал (false).
streams.hls
string
обязательное
Относительный путь HLS мастер-плейлиста (
.m3u8). Предпочтительный поток для приложений.
streams.mp3
string
обязательное
Относительный путь MP3-плейлиста (
.m3u) — загрузите его и перейдите по URL потока внутри. Резервный вариант для плееров без HLS.
metadata
string
обязательное
Относительный путь JSON-эндпоинта «сейчас в эфире». Добавьте
/events для живого SSE-потока — см. Стриминг и метаданные.
artwork
object
обязательное
Относительные пути обложек:
1x1, 1x1Small, 16x9, nowPlaying, nowPlayingSmall, miniPlayer; у некоторых станций дополнительно motionArtwork4x3 / motionArtwork1x1 (MP4). Сохраняйте query ?v= — она сбрасывает кэш при обновлении обложек.
video
string
необязательное
Относительный путь фонового видео-лупа (MP4). Присутствует у некоторых основных станций.
schedule
string
необязательное
Относительный путь JSON-расписания станции. Присутствует только у станций с опубликованным расписанием — см. Расписание.
shareUrl
string
обязательное
Абсолютный URL веб-плеера для «поделиться».
Список станций
| ID | Название | Язык | Основная |
|---|---|---|---|
english | English | english | Да |
english-ot | English Old Testament | english | Нет |
english-nt | English New Testament | english | Нет |
spanish | Radio Cristiana en Español | spanish | Да |
spanish-ot | El Antiguo Testamento | spanish | Нет |
spanish-nt | El Nuevo Testamento | spanish | Нет |
german | Deutsch RadioMv | german | Да |
german-ot | Altes Testament | german | Нет |
german-nt | Neues Testament | german | Нет |
slavic | Христианское Радио | slavic | Да |
slavic-music | Музыкальный Канал | slavic | Нет |
slavic-kids | Детский Канал | slavic | Нет |
slavic-nt | Новый Завет | slavic | Нет |
slavic-ot | Ветхий Завет | slavic | Нет |
Примеры кода
Загрузка конфигурации и разрешение URL
const response = await fetch('https://stream.radiomv.com/static/appv3.json');
const data = await response.json();
// Разрешаем относительный путь через baseUrl
const resolve = (path) =>
path.startsWith('http') ? path : data.config.baseUrl + path;
Все основные станции
const mainStations = data.stations.filter(s => s.isMain);
// Возвращает: english, spanish, german, slavic
Воспроизведение станции
const station = data.stations.find(s => s.id === 'slavic');
const hlsUrl = resolve(station.streams.hls);
// https://stream.radiomv.com/stream/slavic.m3u8 — передайте вашему плееру
Показ «сейчас в эфире»
const now = await (await fetch(resolve(station.metadata))).json();
console.log(now.title, now.artist);
// Или подписка на живые обновления (SSE)
const es = new EventSource(resolve(station.metadata) + '/events');
Проверка обновлений конфигурации
async function checkForUpdates(cachedVersion) {
const response = await fetch('https://stream.radiomv.com/static/appv3.json');
const data = await response.json();
if (data.config.version !== cachedVersion) {
// Доступна новая версия — обновляем кэш
return { updated: true, data };
}
return { updated: false };
}
Устаревшие версии
appv1.json и appv2.json (обслуживаются с api.radiomv.studio) — предыдущие поколения конфигурации: числовые ID станций, абсолютные URL в каждом поле и текстовые эндпоинты метаданных. Они остаются доступными для существующих сборок приложений, но устарели — не используйте их в новых проектах.