Skip to content

maks-mk/maksiptv

Repository files navigation

MaksIPTV Плеер

Версия Платформа Архитектура Стабильность Новые функции

Современный кроссплатформенный плеер для просмотра IPTV каналов из M3U плейлистов. Построен с использованием Python, PyQt5 и библиотеки VLC с применением принципов SOLID для максимальной надежности и расширяемости.

MaksIPTV Плеер
Примечание: перед распространением добавьте актуальный скриншот приложения

Возможности

🎯 Основные функции

  • 📺 Воспроизведение IPTV каналов из M3U плейлистов
  • 🌐 Загрузка плейлистов как из локальных файлов, так и с удалённых URL
  • 🔍 Улучшенный поиск каналов с точным соответствием результатов
  • ⭐ Добавление каналов в избранное для быстрого доступа
  • 👁️ Скрытие ненужных каналов
  • 📋 История просмотренных плейлистов с именами
  • 🖼️ Поддержка полноэкранного режима
  • 🔄 Автоматическое переподключение при ошибках воспроизведения

🎮 Расширенные возможности воспроизведения (НОВОЕ v0.14.0)

  • Контроль скорости воспроизведения (0.5x - 2.0x) с визуальным индикатором
  • 🔊 Улучшенное управление аудио треками с автоматическим определением
  • 📝 Полная поддержка субтитров с переключением и индикацией
  • 📸 Профессиональные снимки экрана с автоматическим именованием
  • 🎯 Умная перемотка с поддержкой клика по слайдеру
  • 📊 Детальная информация о медиа (разрешение, FPS, треки)

🛡️ Надежность и стабильность

  • 💾 Автоматическое сохранение настроек между сеансами
  • 🖥️ Умное позиционирование окна - всегда в видимой области экрана
  • 🔧 Экстренный сброс позиции окна (Ctrl+Shift+R)
  • 🧵 Корректное завершение всех потоков при закрытии
  • 📊 Подробное логирование для диагностики проблем

🏗️ Архитектурные преимущества

  • 🎯 Применение принципов SOLID для лучшей поддерживаемости
  • 🔄 Модульная архитектура с разделением ответственности
  • 🚀 Высокая производительность и стабильность
  • 📈 Легкость расширения и добавления новых функций

Системные требования

  • Python 3.6 или выше
  • Установленный VLC Media Player
  • Требуемые библиотеки:
    • PyQt5
    • python-vlc
    • qtawesome

Установка

Установка зависимостей

pip install -r requirements.txt

Запуск приложения

python main.py

Сборка исполняемого файла

В проекте имеется скрипт для сборки исполняемого файла с помощью PyInstaller:

python build.py

Архитектура проекта

Проект использует современную модульную архитектуру с применением принципов SOLID:

🏗️ Основные компоненты

  • main.py - основной файл приложения с классом IPTVPlayer
  • ConfigManager - управление конфигурацией и настройками
  • PlaylistManager - парсинг и управление плейлистами
  • UIComponentFactory - фабрика для создания UI элементов
  • PlatformManager - обработка платформенно-зависимой логики

🧵 Потоки для асинхронных операций

  • DownloadThread - загрузка плейлистов из интернета
  • ChannelPlayThread - подготовка медиа для воспроизведения
  • LogoDownloadThread - асинхронная загрузка логотипов каналов

🔧 Утилиты

  • reset_window_position.py - утилита для сброса позиции окна
  • ClickableLabel - расширенный класс QLabel с поддержкой событий клика

Крупные обновления (v0.14.0) - Профессиональный медиаплеер

🎮 Революционные улучшения воспроизведения

Контроль скорости воспроизведения

  • Поддержка скоростей: 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
  • Улучшена производительность за счет правильной обработки событий
  • Подробное логирование всех операций для диагностики

🎨 Визуальные индикаторы (v0.14.0)

Новая панель управления теперь показывает полную информацию о воспроизведении:

[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 доступных (цветная индикация)

💡 Примеры использования новых функций

🎬 Просмотр фильмов с субтитрами

  1. Запустите фильм
  2. Нажмите S для включения субтитров
  3. Нажмите S еще раз для переключения между треками
  4. Используйте A для выбора аудиодорожки на нужном языке

Быстрый просмотр новостей

  1. Увеличьте скорость до 1.5x клавишей +
  2. Используйте для перемотки вперед на 30 секунд
  3. Сделайте быстрый снимок клавишей C для сохранения кадра

📸 Профессиональные снимки экрана

  1. Нажмите P для снимка с диалогом
  2. Или C для быстрого снимка
  3. ПКМ по кнопке камеры → "Открыть папку со снимками"
  4. ПКМ по кнопке камеры → "Информация о видео" для деталей

Предыдущие обновления (v0.13.1)

📋 Упрощение работы с плейлистами (UX улучшения)

  1. Единая кнопка "📋 Плейлисты" заменила множество отдельных кнопок
  2. Упрощенный диалог с вкладками "Файл" и "URL" для добавления плейлистов
  3. Интуитивное меню с эмодзи и понятными названиями действий
  4. Быстрый доступ к недавним плейлистам через подменю
  5. Автоматическая индикация текущего плейлиста
  6. Сокращение кликов на 50% для основных операций
  7. Упрощение меню "Файл" - убраны дублирующиеся пункты

🎨 Визуальные улучшения UI

  1. Улучшена кнопка "Плейлисты" - теперь гармонично вписывается в общий UI
  2. Исправлено позиционирование окна - по умолчанию [50, 40] вместо [40, 20]
  3. Консистентный дизайн - все кнопки следуют единому стилю
  4. Добавлена утилита test_window_position.py для тестирования позиции окна
  5. Компактные размеры - кнопка плейлистов оптимизирована под общий стиль

🔧 Критические исправления

  1. Устранено зависание при отсутствии файла player_config.json
  2. Исправлен deadlock в ConfigManager при создании конфигурации
  3. Гарантированное создание файла конфигурации с параметрами по умолчанию
  4. Добавлена диагностическая утилита debug_config.py для тестирования конфигурации
  5. Улучшена обработка ошибок при работе с файлами конфигурации

📐 Упрощение размеров окна

  1. Убраны все адаптации под разные разрешения экрана
  2. Фиксированный размер окна 1000x650 пикселей
  3. Упрощен код - удалено 100+ строк адаптивной логики
  4. Повышена предсказуемость поведения на всех мониторах
  5. Улучшена поддерживаемость - меньше edge cases и условий

📝 Улучшение ввода названий плейлистов

  1. Добавлено поле названия для плейлистов из файлов
  2. Автозаполнение названия именем выбранного файла
  3. Консистентный интерфейс - одинаковая функциональность для файлов и URL
  4. Немедленное сохранение названий в конфигурацию
  5. Улучшенный UX с разумными значениями по умолчанию
  6. Исправлена ошибка UnboundLocalError при добавлении плейлистов из файлов

🎯 Улучшенный рефакторинг и управление потоками (v0.13.0)

  1. Создан ThreadManager для централизованного управления потоками
  2. Улучшена работа с конфигурацией - позиция окна корректно читается из player_config.json
  3. Добавлен пул потоков для ограничения количества одновременных операций
  4. Выделены классы потоков в отдельный модуль threads.py для лучшей организации
  5. Улучшена обработка ошибок и завершения потоков
  6. Добавлена типизация для лучшей читаемости кода
  7. Применены принципы SOLID более последовательно

🧵 Улучшения в работе с потоками

  • Все потоки теперь поддерживают прерывание через метод abort()
  • Централизованное управление через ThreadManager
  • Автоматическая регистрация и отмена регистрации потоков
  • Ограничение количества одновременных потоков
  • Корректное завершение всех потоков при закрытии приложения

⚙️ Улучшения конфигурации

  • Потокобезопасная работа с конфигурацией
  • Автоматическая валидация и коррекция некорректных значений
  • Создание резервных копий перед сохранением
  • Улучшенная обработка позиции окна

Предыдущие обновления (v0.12.0)

🎯 Архитектурный рефакторинг

  1. Применены принципы SOLID для улучшения архитектуры
  2. Разделение ответственности: выделены отдельные менеджеры для конфигурации, плейлистов и UI
  3. Устранено дублирование кода через создание фабрик и утилит
  4. Упрощена сложность методов согласно принципу KISS

🐛 Исправленные проблемы

  1. Проблема с поиском: Исправлено несоответствие выбранного и воспроизводимого канала при фильтрации
  2. Позиционирование окна: Добавлена автоматическая коррекция позиции окна при запуске
  3. Управление потоками: Улучшено корректное завершение всех потоков при закрытии

🛡️ Новые возможности

  1. Экстренный сброс позиции окна (Ctrl+Shift+R)
  2. Внешняя утилита для сброса настроек окна
  3. Улучшенное логирование для диагностики проблем
  4. Автоматическое сохранение позиции и размера окна

Управление

⌨️ Горячие клавиши

🎮 Основное управление

Клавиша Действие
Пробел Воспроизведение/Пауза
F или CTRL+F Полный экран
ESC Выход из полноэкранного режима
Перемотка назад на 10 секунд
Перемотка вперед на 30 секунд

🎵 Управление треками (НОВОЕ v0.14.0)

Клавиша Действие
A Переключить аудио трек
S Переключить субтитры

Скорость воспроизведения (НОВОЕ v0.14.0)

Клавиша Действие
+ или = Увеличить скорость
- Уменьшить скорость
0 Сбросить скорость на 1.0x

📸 Снимки экрана (НОВОЕ v0.14.0)

Клавиша Действие
P Снимок экрана с диалогом
C Быстрый снимок экрана

🔧 Системные

Клавиша Действие
Ctrl+Shift+R Экстренный сброс позиции окна

🔧 Утилиты командной строки

# Сброс позиции окна (если плеер не виден)
python reset_window_position.py

# Просмотр текущих настроек окна
python reset_window_position.py --show

📁 Файлы и папки

  • player_config.json - основные настройки плеера
  • logs/ - директория с логами для диагностики
  • cache/logos/ - кэш логотипов каналов
  • screenshots/ - НОВОЕ v0.14.0 - папка со снимками экрана

Решение проблем

🖥️ Окно плеера не видно

  1. Нажмите Ctrl+Shift+R для сброса позиции окна
  2. Или запустите: python reset_window_position.py
  3. Окно переместится в центр экрана

🔍 Проблемы с поиском

  • Поиск теперь работает корректно - выбранный канал соответствует воспроизводимому
  • Поддерживается поиск по нескольким словам

🎮 Проблемы с воспроизведением (v0.14.0)

  • Скорость не меняется: Убедитесь, что медиа воспроизводится
  • Треки не переключаются: Дождитесь полной загрузки потока (2-4 секунды)
  • Субтитры не отображаются: Проверьте, что они доступны в индикаторе S:0/1
  • Перемотка не работает: Функция доступна только для записей (REC), не для live потоков

📸 Проблемы со снимками экрана

  • Снимок не создается: Убедитесь, что видео воспроизводится
  • Папка не открывается: Проверьте права доступа к директории приложения
  • Низкое качество: Снимки создаются в разрешении исходного видео

🧵 Проблемы с производительностью

  • Все потоки корректно завершаются при закрытии
  • Логи сохраняются в папке logs/ для диагностики
  • События VLC теперь обрабатываются безопасно без ошибок потоков

Планы развития

🎯 Ближайшие планы (v0.15.0)

  • 🎛️ Эквалайзер - настройка звука с предустановками
  • 📋 Пользовательские плейлисты - создание и управление
  • 📹 Запись потоков - сохранение видео на диск
  • 📊 Сетевая статистика - мониторинг качества потока

🚀 Долгосрочные планы

  • 📺 Добавление поддержки EPG (электронной программы передач)
  • ⚙️ Расширенные настройки воспроизведения
  • 📱 Доработка мобильного интерфейса
  • 🌐 Поддержка дополнительных форматов плейлистов
  • 🔄 Синхронизация настроек между устройствами

Лицензия

MaksIPTV Плеер © 2025 MaksK

About

MaksIPTV Player. Современный кроссплатформенный плеер для просмотра IPTV каналов из M3U плейлистов

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors