Skip to content

JPEG-криншоты

Flussonic Media Server умеет вырезать скриншоты из видео. С их помощью вы сможете:

  • показать предпросмотр текущего транслируемого видео на веб-странице;
  • оценить качество потока;
  • захватить нужный момент времени;
  • быстро искать в архиве нужный момент видео по скриншотам;
  • создать страницу со скриншотами потока, чтобы быстро просмотреть сутки архивной записи;
  • делать что вам угодно с маленькими статическими картинками из большого видео потока.

Flussonic Media Server делает скриншоты двумя принципиально разными способами:

  • Извлекает видео-кадры в виде JPEG-изображений и может сохранять их в архиве. Создание и хранение JPEG скриншотов потребляет много ресурсов. Подробнее.
  • Создает экономичные MP4 видео-скриншоты. В H.264-потоке с ключевыми кадрами уже есть сжатые изображения, для получения которых не нужна ресурсоемкая обработка потока. Flussonic Media Server берет первый ключевой кадр из каждого сегмента и показывает его как MP4 видеофайл, состоящий из одного кадра. Подробности в разделе Видео-скриншоты.

О JPEG-скриншотах

Flussonic Media Server выполняет операцию, которая достаточно требовательна к ресурсам процессора: берётся первый ключевой кадр из сегмента, декодируется и кодируется обратно в JPEG изображение. Выглядит просто, но когда у вас 300 потоков, то этот процесс требует много процессорного времени.

Flussonic позволяет оптимизировать нагрузку: меняя длительность сегмента, вы можете менять количество JPEG скриншотов. Тот факт, что Flussonic Media Server берёт только первый ключевой кадр из сегмента, означает, что если вы настроили длительность сегмента равной трём секундам, у вас будет 20 JPEG изображений в минуту. Если длительность сегмента установлена в 6 секунд, получится 10 JPEG изображений в минуту. Если вы получаете поток с IP камеры, у вас может быть 60 ключевых кадров в минуту, но Flussonic Media Server создаст меньшее количество JPEG-изображений.

Note

Когда вы включаете для потока запись архива, все эти JPEG-скриншоты пишутся на диск.

Можно облегчить нагрузку на процессор, используя загрузку скриншотов по заданному URL. Такой способ применяется с IP камерами, так как IP камеры создают свежий JPEG скриншот для показываемого видео. В этом случае Flussonic Media Server будет загружать JPEG изображения каждый раз, когда начинается новый сегмент.

Настройка генерации JPEG-скриншотов

Для создания JPEG скриншотов Flussonic Media Server использует свой встроенный пакет.

Добавьте опцию thumbnails в конфигурацию потока:

stream example {
  input fake://fake;
  thumbnails;
}

Это запустит отдельный процесс flussonic-thumbnailer. Возможно, он будет потреблять значительное количество ресурсов, но, к сожалению, это неотъемлемая черта процессов сжатия видео и изображений.

Настроить получение скриншотов можно также и в панели администратора в настройках потока (Media > выбрать поток > Output). Выберите опцию enabled в разделе Thumbnails.

Flussonic JPEG thumbnails

Настройка скачивания JPEG-скриншотов с камеры

Вы можете указать URL, по которому Flussonic Media Server будет запрашивать скриншоты, что уменьшит использование процессора. Многие камеры имеют специальный URL для скриншотов:

stream example {
  input rtsp://localhost:554/source;
  thumbnails url=http://examplehost:5000/snapshot;
}

Вы можете попробовать найти этот URL в документации на вашу камеру или поискать в Интернете.

Настроить получение скриншотов можно также и в панели администратора в настройках потока (Media > выбрать поток > Output). Выберите опцию enabled в разделе Thumbnails и введите Thumbnail URL.

Flussonic JPEG thumbnails URL

Получение live-скриншота

После того как вы включили скриншоты в настройках, их нужно получить.

URL-адрес для доступа к live-скриншоту такой:

http://FLUSSONIC-IP:80/STREAM_NAME/preview.jpg — последний скриншот потока.

http://FLUSSONIC-IP:80/STREAM_NAME/preview.mjpeg — MJPEG поток скриншотов.

Мы рекомендуем никогда не использовать MJPEG, потому что это неконтролируемый способ передачи видео с очень высоким битрейтом. Вы можете получить MJPEG поток с битрейтом до 50 % от исходного потока со скоростью 0,1 кадр в секунду. Используйте этот способ только при необходимости.

Получение JPEG-скриншотов из архива по времени

Скриншоты автоматически сохраняются в архив. Они могут быть получены с помощью HTTP API.

Экономично по ресурсам получать JPEG скриншоты, указывая приблизительное время в UTC в URL. Flussonic найдет ближайший сохраненный скриншот и вернет URL с точным временем.

http://FLUSSONIC-IP:80/STREAM_NAME/1652936935.jpg

Человекочитаемый формат времени GMT также поддерживается для совместимости:

http://FLUSSONIC-IP:80/STREAM_NAME/2022/05/19/05/08/11.jpg

По полученному времени находится реальный скриншот.

См. справочник Streaming API.

Получение JPEG скриншотов из архива по промежутку времени UTC

Danger

Этот способ затратный по ресурсам, мы не рекомендуем его использовать. Лучше получать скриншоты по времени UTC или GMT, см. Получение JPEG скриншотов из архива по времени.

Сначала нужно выбрать временной промежуток, для которого нужно прочитать архив. Например, сейчас 21 апреля 2017, 13:10 GMT, что соответствует 1492780200 UTC. Если вы хотите получить скриншоты за последний час, нужно запросить следующий URL:

curl 'http://FLUSSONIC-IP:80/STREAM_NAME/recording_status.json?from=1492776600&to=1492780200&request=brief_thumbnails'

По умолчанию Flussonic не включает в ответ список таймстемпов. Для их получения к запросу нужно добавить request=brief_thumbnails.

Ответ может быть таким:

[{"stream":"clock","ranges":[{"duration":3642,"from":1492776599}],"brief_thumbnails":[1492776599,1492776605,
1492776617,1492776629,1492776641,1492776653,1492776665,1492776677,1492776689,1492776701,1492776713,1492776725,
....]}]

Вы получите длинный список таймстемпов, которые необходимо сконвертировать в пути к скриншотам. Например, 1492776605 будет преобразован в http://FLUSSONIC-IP:80/STREAM_NAME/2017/04/21/12/10/05.jpg.

Таким образом, сначала вы получаете список таймстемпов, а затем получаете сами скриншоты по сформированным URL-адресам.

Генерация JPEG по запросу

Иногда хранить все JPEG скриншоты на диске очень накладно, и вы можете дать инструкцию Flussonic Media Server генерировать JPEG по требованию. В этом случае необходимо добавить в конфигурацию потока параметр thumbnails enabled=ondemand. Например:

stream channel {
  input fake://fake;
  thumbnails enabled=ondemand;
  dvr /storage;
}

Вы также можете настроить получение JPEG скриншотов по запросу в панели администратора, в настройках потока на вкладке Output (Media > выберите поток > Output). Выберите опцию on demand в разделе Thumbnails.

Flussonic JPEG thumbnails on-demand

Запросите URL скриншота для определенного момента времени, указав его в формате UTC:

http://FLUSSONIC-IP:80/STREAM_NAME/1643797938-preview.jpg

Можно также указать дату и время в старом удобочитаемом формате, который поддерживается для совместимости:

http://FLUSSONIC-IP:80/STREAM_NAME/2022/02/21/12/10/05-preview.jpg

Flussonic Media Server прочитает один сегмент, возьмёт первый ключевой кадр после указанного момента времени и cгенерирует JPEG.

Если в текущем сегменте ключевой кадр не найден, Flussonic возьмет первый ключевой кадр следующего сегмента, создаст для него URL и вернет перенаправление 302. Затем браузер отправит новый запрос с новым URL и получит JPEG для найденного ключевого кадра. Такое перенаправление гарантирует, что в кэше для каждого запроса будет сохранен только один уникальный ответ. Таким образом, если для запрошенного времени ключевых кадров не найдено, после перенаправления из кэша будет забран уже готовый нужный URL. При этом два запроса к соседним секундам, для которых нет ключевых кадров, приведут к скачиванию всего одного файла JPEG.

Этот способ может привести к непредсказуемой загрузке процессора и, поэтому, не рекомендуется.

Непредсказуемая нагрузка здесь означает, что её действительно трудно предсказать. С включенным процессом генерации JPEG у вас ровная умеренная загрузка процессора и не более. С генерацией JPEG по запросу у вас может быть низкая загрузка процессора, но в час наибольшей нагрузки может произойти её резкий рост и работа сервера станет нестабильной.

См. справочник Streaming API.