IPTV MPEG-TS Video Streamer с буфером на 12 часов (Linux + Win)
- 50
- 0
- Опубликовано: 2013-11-29
К программе предудущего разработчика были следующие претензии у заказчика - из за утечек памяти, которые невозможно решить на уровне выбранного тем программистом языка Perl, программа спустя 2-3 дня сама выключалась (падала), что является недопустимым для подобного рода приложений.
Суть программы - создание сервера-буфера для непрерывного вещания, даже если связь с основным вещающим сервером отсутствует (как показала практика, в сетях заказчика часто бывают перерывы до 12 часов).
Организация программы - программа получает видеопоток в формате Apple HLS (по сути, обновляющийся список файлов - на ближайшие 12 часов - со ссылками на коротенькие фрагменты MPEG Transport Stream по 8-15 секунд), скачивает их себе в буфер (кеширует), и при этом вещает фрагменты в UDP Video Stream из своего буфера по порядку, даже в случае отсутствия связи с оригинальным вещающим сервером.
Изначальный бюджет и постановка задачи не предполагали полноценной реализации протокола вещания UDP Video Stream и предполагали использование для этого готовой библиотеки Live 555.
Проект был выполнен в среде Qt 4.8 в виде демона (сервиса) для Ubuntu Linux, так же был написан скрипт для автоматической установки сервиса, и в графическом режиме для Windows (с выводом статистики о буфере и состоянии связи на графичекую форму).
Моя реализация показала стабильную работую в течение многих суток (несколько недель без перезапуска) и отсутствие утечек памяти, что является критичным на подобных проектах.
К сожалению, из за использования хитроумно и нечитабельно (даже для меня!) написанной библиотеки для UDP Streaming-а Live555 стало невозможно вносить изменения в процесс организации стриминга, для получения более стабильной картинки когда битрейт видео немного "гуляет". Для устранения этих проблем было бы необходимо написать код, вещающий видео из MPEG TS в UDP самостоятельно, однако, мои знания в этой предметной области не настолько сильны.