Skip to content
This repository has been archived by the owner on Nov 20, 2024. It is now read-only.

Minimal application

Nikita edited this page Jul 21, 2019 · 2 revisions

Минимальное приложение

В качестве тренировки и первичному обучению программирование на golang предлагается реализовать минимально функциональное приложение, которое будет захватывать изображение с сенсора, делать из него несколько вариантов разного разрешения (допустим захватили изображение 3840х2160, сделали доп. 2560х1440, 1920х1080 и 1280х720), далее это видео отправляется в блок энкодинга, который на выходе дает закодированное видео/изображение (конечно подразумеваются только аппаратные энкодеры, софтверный энкодинг слишком сложная задача для цпу) в форматах jpeg, mjpeg, h.264 или h.265. Полученные после энкодера изображения/видео пригодны для отправки по сети. Минимально интересный набор это jpeg по http (т.е. просто скачивание очередного кадра, как jpeg файла по http) и rtsp для видео потока, который можно проиграть практически любым приложением видео плеера, таким как на пример VLC. Имеется возможность настройки всего этого процесса. Для того, чтобы это было не слишком примитивно добавляем возможность что-то нарисовать на картинке перед отправкой в энкодер (текущее время, температуру окружающей среды или картинку котика) и возможность скачать сырой кадр (сырой кадр это yuv420 на пример).

Функциональная структура видео тракта минимального приложения

Simple application function structure

  • cmos image capturing - захват, это проекция того, что в Hisilicon Media SDK называется VI
  • channels - блок процессинга видео, это проекция того, что в Hisilicon Media SDK называется VPSS
  • overlay - блок "рисования" поверх видео кадра/изображения, аппаратно ускоренный, то что в HiMPP называется VGS
  • encoders - блок энкодеров, аппаратно Hisi позволяет кодировать jpeg, mjpeg, h.264, h.265
  • serving - это доставка, по сети (http, rtsp/rtp, rtmp, webrtc, hls, hds, etc), на файловую систему (сохранить в файл)

Детали реализации

Делать предлагается это все на конкретной железке hi3519v101+imx174, которая у нас есть в нужном количестве. Относительно просто это потом можно портировать на любую железку на базе hisilicon`а.

Т.к. на golang`е никто не программировал серьезно до этого, основной целью ставится понять как вести групповую разработку на нем, так чтобы это было эффективно и познавательно для всех участников процесса.

...

Термины

  • VLC - http://www.videolan.org/vlc/ - один из самых популярные и продвинутых приложений видео плееров
  • RTSP - https://ru.wikipedia.org/wiki/RTSP - Real Time Streaming Protocol
  • H.264 - стандарт сжатия видео, максимально широко распространен, практически все мобильные устройства и приложения браузеров проигрывают такое видео нативно
  • H.265 - он же HEVC - один из самых новых стандартов сжатия, последователь H.264, более эффективен, но поддержка в плане просмотра пока оставляет желать лучшего
  • yuv420 - https://en.wikipedia.org/wiki/YUV - формат представления сырого (без сжатия) цветного изображения