Дмитрий
Был на сайте: 24.03.2024 13:42

Дмитрий nn1317

Паспорт не верифицирован

IPTV MPEG-TS Video Streamer с буфером на 12 часов (Linux + Win) 

  • 50
  • Опубликовано: 2013-11-29
Стояла задача переписать на С\С++ написанный ранее другим программистом на Perl вещатель потокового видео.

К программе предудущего разработчика были следующие претензии у заказчика - из за утечек памяти, которые невозможно решить на уровне выбранного тем программистом языка 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 самостоятельно, однако, мои знания в этой предметной области не настолько сильны.
Комментариев нет
оставить комментарий могут только авторизованные пользователи
Другие работы автора:

Сервер для приема данных от 2 000 GPS-трекеров (Qt, Linux) Сервер для приема и хранения данных, посылаемых мобильными GPS трекерами, установленными на автомобилях/автобусах/спецтехнике. GPS-трекеры (клиенты) поддерживают постоянный коннект с сервером и посылаю 1 раз в 5 секунд сообщение серверу о своем сост…

кроссплатформенная библиотека работы с сетью (NNA) NNA - NEX NET API Кратко Кроссплатформенная библиотека для работы с сетью. Использует на винде и линуксе асинхронные сокеты (через механизм select). Предоставляет единый интерфейс на поддерживаемых ОС для работы с сетью через сокеты. Содержит реализ…

ПО платежного терминала для таксопарка и программа учета (Win)

ПО платежного терминала для таксопарка и программа учета (Win) ПО платежного терминала для таксопарка для приема денег от водителей: 1. автоматическая загрузка и расчет текущего долга водителя с учетом смены и индивидуального плана 2. контроль и учет километража машин при каждой сдаче денег водителем 3. автомат…

ПО платежного терминала с выдачей и внесением денег для клуба

ПО платежного терминала с выдачей и внесением денег для клуба ПО платежного терминала с выдачей и внесением денег для игрового клуба, разработано во времена, когда они еще были легальными. ПО кроссплатформенно и работает под OC Windows и ОС Linux. Поддержка 3 видов термопринтеров: 1. Custom VKP80 II 2. ICT 3. …

Squish - приложение для сжатия изображений (PNG, JPG, GIF)

Squish - приложение для сжатия изображений (PNG, JPG, GIF) Приложение под MacOs для сжатия изображений (PNG жмет без потерь за счет оптимизации палитры и удаления лишнего, JPG и GIF с небольшой потерей качества). Сделано на Cocoa в XCode (полностью нативно). Сделано под заказ для публикации в apple store. …

IOS Приложение и сервис делегирования задач, контроля выполнения

IOS Приложение и сервис делегирования задач, контроля выполнения Разработано мной: клиентское приложение для iphone & ipad, а так же серверная часть ко всему этому (PHP + MySQL). Сервис назначения задач исполнителям. При регистрации пользователя-администратора группы создается сама группа с уникальным именем и н…

PHP + MySql: Система поиска по реализуемому имуществу банкротов

PHP + MySql: Система поиска по реализуемому имуществу банкротов Система поиска по реализуемому имуществу банкротов, можно посмотреть по ссылке. Техническая часть - PHP + MySQL + Smarty + JavaScript. Доступ - по подписке, он-лайн оплата через робокассу, демо-доступ на 2 недели.

Таксометр на основе CarPC

Таксометр на основе CarPC Система работает под Ubuntu Linux Unity, во всех машинах таксопарка установлены CarPC с сенсорными мониторами, к которым подключены: 1. gps приемник 2. 3g модем для связи с диспетчерской 3. тревожные кнопки 4. выходы на управление цепью глушения двиг…