Техническое задание на разработку тестового функционала
Необходимо разработать микроприложение с использованием языка PHP 5.x и базы данных MySQL 5, реализующие следующий функционал: Базовые предположения:
- Существует непрерывный видеопоток (телеканал) данных реального времени, доступный по адресу rtmp://localhost:1935/tv/mp4:superchannel
- Существует консольное приложение, позволяющее записывать видеопоток данных на диск в файл ffmpeg –i rtmp://localhost:1935/tv/mp4:superchannel –c copy –f mp4 –t <seconds_need_to_write> <output_file_name>
В процессе работы, приложение непрерывно выводит в консоль (буфер) данные в следующем виде: Capturing. Time: [000:00:15] fps: 25 vbr: 4600 abr: 1400 … Capturing. Time: [000:00:17] fps: 25 vbr: 4500 abr: 1410 … … Capturing. Time: [000:23:54] fps: 25 vbr: 4700 abr: 1320 … Т.е. выводится длительность уже захваченного фрагмента. Перескок времени от строчки к строчке может быть в интервале 1-10 секунд. - Существует SOAP сервис, позволяющий получить информацию о передачах, идущих на телеканале по времени начала и конца https://localhost/WebServices/Schedule.asmx?WSDL Удаленный метод: getInfoByTime параметры: start_time -> <Время в формате Y-m-d H:i>, end_time -> <Время в формате Y-m-d H:i> Метод возвращает массив из строк с названиями телепередач, транслируемых в канале в указанном интервале времени.
Приложение должно:
- Записывать фрагменты видепотока длительностью 1 час в отдельные файлы и размещать их в папке /storage/video/… Именование файлов на усмотрение исполнителя.
- Каждый записанный фрагмент должен иметь смещение относительно предыдущего на ~5 минут. Т.е. запись (захват) каждого следующего часового потока должна начаться за 5 минут до конца записи предыдущего. Нужно так же учитывать что процесс записи распределен в реальном времени неравномерно, и зависит от текущей скорости канала данных, т.е. к примеру за 10 минут реального времени может быть записано от 10 минут видео (реалтайм поток) до, к примеру 1 минуты (поток с прерывистой буферизацией), таким образом для выполнения поставленного условия, описанного выше, необходимо ориентироваться на лог программы ffmpeg, в которую выводится реальная информация о длительности записанного на данный момент фрагменте, а не на обычный таймер (sleep и пр.)
- Собирать информацию (названия) о передачах, транслируемых в записанном фрагменте видеопотока.
- Весь процесс записи и получения/обработки информации должен происходить в одном PHP файле, запущенным ТОЛЬКО один раз. Т.е. запущенный PHP файл работает бесконечно, а несколько таких одновременно запущенных файлов-обработчиков не допускается.
- Вся полученная информация о файле, передаче, времени и пр. должна храниться в базе данных.
- Приложение должно предоставлять отдельный веб интерфейс для вывода таблицы сохраненных материалов, содержащую всю доступную информацию, а также ссылку на открытие видео файла. Необходимо предусмотреть возможность сортировки по следующим полям: ID, время начала фрагмента, время конца фрагмента, названия передач фрагмента.
Архитектура и применяемые паттерны остаются на усмотрение разработчика. Плюсом будет использование фреймворка Phalcon (v. >= 2) в качестве основы приложения.