Разбираем zyfun — модульный плеер для стримов и IPTV на Electron
Если вы хоть раз пробовали организовать просмотр IPTV или сетевого видео на десктопе, то наверняка натыкались на две крайности. С одной стороны лежат громоздкие комбайны вроде Kodi, которые тянут сотни мегабайт зависимостей и перегружены сложным интерфейсом. С другой — аскетичные утилиты, где плейлисты приходится зашивать вручную в текстовые конфиги без нормального поиска и синхронизации.
Недавно я наткнулся на zyfun. Это прямой наследник популярного плеера ZY-Player, полностью переписанный на актуальном стеке. Проект уже собрал более 8 800 звёзд на GitHub, но за пределами азиатского сообщества о нём знают немногие. Причина банальна: документация написана на китайском, а машинные переводы не всегда точны. При этом инженерная часть проекта заслуживает разбора.
Что под капотом
Архитектурно zyfun представляет собой десктопное приложение на связке Electron, Vue 3, Vite и TypeScript. Для интерфейса авторы выбрали компонентную библиотеку TDesign.
Приложение работает по принципу тонкого клиента. Оно не содержит встроенного контента, а выступает в роли обработчика внешних источников. Вы скармливаете клиенту структурированный JSON-конфиг, после чего приложение берет на себя парсинг данных, фильтрацию, поиск по каталогам и воспроизведение потоков.


Главные инженерные решения
В кодовой базе проекта есть несколько интересных решений, которые отличают его от типичных самодельных плееров.
1. Модульные адаптеры источников
Вместо жесткой логики парсинга авторы внедрили систему адаптеров (типы от T0 до T4). Это помогает подключать совершенно разные бэкенды:
- T0 и T1: классические REST-интерфейсы с ответами в формате XML или JSON.
- T3 и T4: скриптовые адаптеры, поддерживающие запуск пользовательских обработчиков на JavaScript (DRPy), CatVod и Python.
- Подключение файловых хранилищ через протокол Alist.
Благодаря этому можно подключить новый сайт с фильмами или каталог домашнего NAS, просто описав схему маппинга полей в конфигурационном файле, без пересборки самого бинарника.
2. Сниффер потоков через Chrome DevTools Protocol
Многие онлайн-кинотеатры прячут прямые ссылки на потоки за сложными скриптами. Обычно такие задачи решают через скрытые фреймы, что часто ломает страницу.
В zyfun перехват потоков устроен через CDP (Chrome DevTools Protocol). Приложение открывает целевой URL в изолированном контексте Chromium, подписывается на события сетевого уровня Network.requestWillBeSent и вылавливает ссылки на файлы .m3u8 или .mp4. Такой подход работает стабильнее эвристических регулярок.
{
"sniffer": {
"type": "cdp",
"url": ""
}
}
3. Сменяемые видеоядра
Внутри приложения нет жесткой привязки к единственному плееру. В настройках можно выбрать нужный движок:
- XGPlayer (разработка команды ByteDance)
- ArtPlayer
- Внешний бинарник через системный вызов (например, mpv или VLC с аппаратным декодированием)
Если нативный веб-плеер не справляется с тяжелым битрейтом или специфическим кодеком, поток в один клик уходит во внешний mpv.


4. Синхронизация и встроенный ИИ
История просмотров, закладки и конфигурация источников синхронизируются через WebDAV или iCloud. Это удобно, если вы используете приложение на нескольких машинах.
Авторы также добавили интеграцию с OpenAI API. Клиент умеет отправлять запрос к выбранной языковой модели, чтобы быстро получить краткое саммари сюжета или рекомендации похожих релизов.
Из приятных бытовых мелочей: в настройки вынесена функция Boss Key. По нажатию хоткея (по умолчанию Shift+Cmd+Z на macOS) окно моментально прячется в трей и заглушает звук.
Как устроена конфигурация
Вся база источников импортируется единым JSON-документом. Структура разделена на независимые блоки: site для каталогов VOD, iptv для плейлистов, channel для отдельных стримов и analyze для резолверов ссылок.
Вот так выглядит описание стандартного источника:
{
"site": [
{
"id": "fddfb425-6fd9-0b39-459f-a21f69739a6e",
"name": "Custom VOD Source",
"api": "https://example.com/api.php/provide/vod/",
"search": true,
"group": "Основное",
"type": 1,
"categories": "Фильмы,Сериалы",
"isActive": true
}
],
"iptv": [
{
"id": "993841fe-5e91-5e5d-35d6-5be81822960b",
"name": "Спорт IPTV",
"api": "https://example.com/streams/playlist.m3u",
"type": 1,
"epg": "https://epg.example.com/?ch={name}&date={date}",
"isActive": true
}
]
}
Установка и платформы
Готовые сборки есть под Windows (x64, arm64), macOS (Intel и Apple Silicon) и Linux (AppImage, deb, rpm, пакет в AUR).
При установке на macOS система может заблокировать запуск неподписанного приложения. Это обходится стандартным сбросом атрибутов карантина:
sudo xattr -cr /Applications/zyfun.app
В Linux при запуске AppImage на некоторых дистрибутивах потребуется библиотека libfuse2:
sudo apt-get install libfuse2
./zyfun.AppImage
Итоги
zyfun получился крепко сбитым инструментом для тех, кто хочет контролировать свои медиапотоки без привязки к проприетарным сервисам.
Кому проект будет полезен:
- Любителям IPTV, которым нужен аккуратный плеер с поддержкой EPG и удобной группировкой каналов.
- Владельцам домашних медиасерверов, желающим объединить разные API в одном клиенте.
- Разработчикам на Vue и Electron, ищущим рабочий пример интеграции Chrome DevTools Protocol для фонового анализа сетевого трафика.
Исходники открыты под лицензией AGPL-3.0. Если вы ищете всеядный клиент для стриминга, на репозиторий определенно стоит взглянуть.
