Современный кроссплатформенный плеер для просмотра IPTV каналов из M3U плейлистов. Построен с использованием Python, PyQt5 и библиотеки VLC с применением принципов SOLID для максимальной надежности и расширяемости.
Примечание: перед распространением добавьте актуальный скриншот приложения
- 📺 Воспроизведение IPTV каналов из M3U плейлистов
- 🌐 Загрузка плейлистов как из локальных файлов, так и с удалённых URL
- 🔍 Улучшенный поиск каналов с точным соответствием результатов
- ⭐ Добавление каналов в избранное для быстрого доступа
- 👁️ Скрытие ненужных каналов
- 📋 История просмотренных плейлистов с именами
- 🖼️ Поддержка полноэкранного режима
- 🔄 Автоматическое переподключение при ошибках воспроизведения
- ⚡ Контроль скорости воспроизведения (0.5x - 2.0x) с визуальным индикатором
- 🔊 Улучшенное управление аудио треками с автоматическим определением
- 📝 Полная поддержка субтитров с переключением и индикацией
- 📸 Профессиональные снимки экрана с автоматическим именованием
- 🎯 Умная перемотка с поддержкой клика по слайдеру
- 📊 Детальная информация о медиа (разрешение, FPS, треки)
- 💾 Автоматическое сохранение настроек между сеансами
- 🖥️ Умное позиционирование окна - всегда в видимой области экрана
- 🔧 Экстренный сброс позиции окна (Ctrl+Shift+R)
- 🧵 Корректное завершение всех потоков при закрытии
- 📊 Подробное логирование для диагностики проблем
- 🎯 Применение принципов SOLID для лучшей поддерживаемости
- 🔄 Модульная архитектура с разделением ответственности
- 🚀 Высокая производительность и стабильность
- 📈 Легкость расширения и добавления новых функций
- Python 3.6 или выше
- Установленный VLC Media Player
- Требуемые библиотеки:
- PyQt5
- python-vlc
- qtawesome
pip install -r requirements.txtpython main.pyВ проекте имеется скрипт для сборки исполняемого файла с помощью PyInstaller:
python build.pyПроект использует современную модульную архитектуру с применением принципов SOLID:
- main.py - основной файл приложения с классом
IPTVPlayer - ConfigManager - управление конфигурацией и настройками
- PlaylistManager - парсинг и управление плейлистами
- UIComponentFactory - фабрика для создания UI элементов
- PlatformManager - обработка платформенно-зависимой логики
- DownloadThread - загрузка плейлистов из интернета
- ChannelPlayThread - подготовка медиа для воспроизведения
- LogoDownloadThread - асинхронная загрузка логотипов каналов
- reset_window_position.py - утилита для сброса позиции окна
- ClickableLabel - расширенный класс QLabel с поддержкой событий клика
- Поддержка скоростей: 0.5x, 0.75x, 1.0x, 1.25x, 1.5x, 2.0x
- Визуальный индикатор с цветовой кодировкой:
- 🔵 Синий (1.0x) - нормальная скорость
- 🟠 Оранжевый (<1.0x) - медленная скорость
- 🟢 Зеленый (>1.0x) - быстрая скорость
- Горячие клавиши:
+/-для изменения,0для сброса - Клик по индикатору для быстрого сброса на 1.0x
- Автоматическое определение всех доступных аудио треков
- Отображение имен треков с поддержкой разных кодировок
- Умное переключение с обработкой ошибок
- Визуальный индикатор
A:1/2(трек 1 из 2 доступных) - Улучшенные сообщения с подробной информацией о треках
- Автоматическое обнаружение доступных субтитров
- Циклическое переключение: отключено → трек 1 → трек 2 → отключено
- Горячая клавиша
Sдля быстрого переключения - Цветовая индикация состояния субтитров:
- 🟢 Зеленый - субтитры включены
- 🟣 Фиолетовый - доступны но отключены
- ⚫ Серый - недоступны
- Два режима создания:
P- полный режим с диалогом и опциямиC- быстрый режим без диалога
- Автоматическое именование с именем канала и временной меткой
- Определение разрешения видео для качественных снимков
- Контекстное меню (ПКМ по кнопке камеры):
- 📸 Сделать снимок
- ⚡ Быстрый снимок
- 📁 Открыть папку со снимками
- ℹ️ Информация о видео
- Кроссплатформенная поддержка открытия файлов и папок
- Клик по слайдеру для мгновенного перехода к позиции
- Перетаскивание слайдера с предварительным просмотром времени
- Кнопки перемотки с автоматическим обновлением позиции
- Всегда активный слайдер даже для live потоков
- Умное определение типа потока по URL
- Разрешение и соотношение сторон видео
- Частота кадров (FPS) если доступна
- Информация о треках с именами и количеством
- Статус субтитров с текущим треком
- Информация о канале и категории
- Исправлена обработка событий VLC с безопасными Qt сигналами
- Устранены ошибки потоков
QObject::startTimer - Улучшена производительность за счет правильной обработки событий
- Подробное логирование всех операций для диагностики
Новая панель управления теперь показывает полную информацию о воспроизведении:
[00:15] ████████████░░░░░░░░░░░░ [45:30] [REC] [1.5x] [A:2/3 S:1/2]
Где:
00:15- текущее время- Слайдер позиции (активен всегда)
45:30- общая длительностьREC- тип потока (LIVE/REC/VOD/UNKNOWN)1.5x- скорость воспроизведения (цветная индикация)A:2/3- аудио трек 2 из 3 доступныхS:1/2- субтитры трек 1 из 2 доступных (цветная индикация)
- Запустите фильм
- Нажмите
Sдля включения субтитров - Нажмите
Sеще раз для переключения между треками - Используйте
Aдля выбора аудиодорожки на нужном языке
- Увеличьте скорость до 1.5x клавишей
+ - Используйте
→для перемотки вперед на 30 секунд - Сделайте быстрый снимок клавишей
Cдля сохранения кадра
- Нажмите
Pдля снимка с диалогом - Или
Cдля быстрого снимка - ПКМ по кнопке камеры → "Открыть папку со снимками"
- ПКМ по кнопке камеры → "Информация о видео" для деталей
- Единая кнопка "📋 Плейлисты" заменила множество отдельных кнопок
- Упрощенный диалог с вкладками "Файл" и "URL" для добавления плейлистов
- Интуитивное меню с эмодзи и понятными названиями действий
- Быстрый доступ к недавним плейлистам через подменю
- Автоматическая индикация текущего плейлиста
- Сокращение кликов на 50% для основных операций
- Упрощение меню "Файл" - убраны дублирующиеся пункты
- Улучшена кнопка "Плейлисты" - теперь гармонично вписывается в общий UI
- Исправлено позиционирование окна - по умолчанию [50, 40] вместо [40, 20]
- Консистентный дизайн - все кнопки следуют единому стилю
- Добавлена утилита
test_window_position.pyдля тестирования позиции окна - Компактные размеры - кнопка плейлистов оптимизирована под общий стиль
- Устранено зависание при отсутствии файла
player_config.json - Исправлен deadlock в ConfigManager при создании конфигурации
- Гарантированное создание файла конфигурации с параметрами по умолчанию
- Добавлена диагностическая утилита
debug_config.pyдля тестирования конфигурации - Улучшена обработка ошибок при работе с файлами конфигурации
- Убраны все адаптации под разные разрешения экрана
- Фиксированный размер окна 1000x650 пикселей
- Упрощен код - удалено 100+ строк адаптивной логики
- Повышена предсказуемость поведения на всех мониторах
- Улучшена поддерживаемость - меньше edge cases и условий
- Добавлено поле названия для плейлистов из файлов
- Автозаполнение названия именем выбранного файла
- Консистентный интерфейс - одинаковая функциональность для файлов и URL
- Немедленное сохранение названий в конфигурацию
- Улучшенный UX с разумными значениями по умолчанию
- Исправлена ошибка UnboundLocalError при добавлении плейлистов из файлов
- Создан ThreadManager для централизованного управления потоками
- Улучшена работа с конфигурацией - позиция окна корректно читается из
player_config.json - Добавлен пул потоков для ограничения количества одновременных операций
- Выделены классы потоков в отдельный модуль
threads.pyдля лучшей организации - Улучшена обработка ошибок и завершения потоков
- Добавлена типизация для лучшей читаемости кода
- Применены принципы SOLID более последовательно
- Все потоки теперь поддерживают прерывание через метод
abort() - Централизованное управление через
ThreadManager - Автоматическая регистрация и отмена регистрации потоков
- Ограничение количества одновременных потоков
- Корректное завершение всех потоков при закрытии приложения
- Потокобезопасная работа с конфигурацией
- Автоматическая валидация и коррекция некорректных значений
- Создание резервных копий перед сохранением
- Улучшенная обработка позиции окна
- Применены принципы SOLID для улучшения архитектуры
- Разделение ответственности: выделены отдельные менеджеры для конфигурации, плейлистов и UI
- Устранено дублирование кода через создание фабрик и утилит
- Упрощена сложность методов согласно принципу KISS
- Проблема с поиском: Исправлено несоответствие выбранного и воспроизводимого канала при фильтрации
- Позиционирование окна: Добавлена автоматическая коррекция позиции окна при запуске
- Управление потоками: Улучшено корректное завершение всех потоков при закрытии
- Экстренный сброс позиции окна (Ctrl+Shift+R)
- Внешняя утилита для сброса настроек окна
- Улучшенное логирование для диагностики проблем
- Автоматическое сохранение позиции и размера окна
| Клавиша | Действие |
|---|---|
| Пробел | Воспроизведение/Пауза |
| F или CTRL+F | Полный экран |
| ESC | Выход из полноэкранного режима |
| ← | Перемотка назад на 10 секунд |
| → | Перемотка вперед на 30 секунд |
| Клавиша | Действие |
|---|---|
| A | Переключить аудио трек |
| S | Переключить субтитры |
| Клавиша | Действие |
|---|---|
| + или = | Увеличить скорость |
| - | Уменьшить скорость |
| 0 | Сбросить скорость на 1.0x |
| Клавиша | Действие |
|---|---|
| P | Снимок экрана с диалогом |
| C | Быстрый снимок экрана |
| Клавиша | Действие |
|---|---|
| Ctrl+Shift+R | Экстренный сброс позиции окна |
# Сброс позиции окна (если плеер не виден)
python reset_window_position.py
# Просмотр текущих настроек окна
python reset_window_position.py --showplayer_config.json- основные настройки плеераlogs/- директория с логами для диагностикиcache/logos/- кэш логотипов каналовscreenshots/- НОВОЕ v0.14.0 - папка со снимками экрана
- Нажмите
Ctrl+Shift+Rдля сброса позиции окна - Или запустите:
python reset_window_position.py - Окно переместится в центр экрана
- Поиск теперь работает корректно - выбранный канал соответствует воспроизводимому
- Поддерживается поиск по нескольким словам
- Скорость не меняется: Убедитесь, что медиа воспроизводится
- Треки не переключаются: Дождитесь полной загрузки потока (2-4 секунды)
- Субтитры не отображаются: Проверьте, что они доступны в индикаторе
S:0/1 - Перемотка не работает: Функция доступна только для записей (REC), не для live потоков
- Снимок не создается: Убедитесь, что видео воспроизводится
- Папка не открывается: Проверьте права доступа к директории приложения
- Низкое качество: Снимки создаются в разрешении исходного видео
- Все потоки корректно завершаются при закрытии
- Логи сохраняются в папке
logs/для диагностики - События VLC теперь обрабатываются безопасно без ошибок потоков
- 🎛️ Эквалайзер - настройка звука с предустановками
- 📋 Пользовательские плейлисты - создание и управление
- 📹 Запись потоков - сохранение видео на диск
- 📊 Сетевая статистика - мониторинг качества потока
- 📺 Добавление поддержки EPG (электронной программы передач)
- ⚙️ Расширенные настройки воспроизведения
- 📱 Доработка мобильного интерфейса
- 🌐 Поддержка дополнительных форматов плейлистов
- 🔄 Синхронизация настроек между устройствами
MaksIPTV Плеер © 2025 MaksK