Техническое задание
Пошаговое задание
- Поток видео с RSTP через ffmpeg посекундно сохранять в директорию по кадрам
- Собрать 128 последовательных кадров и из них сделать видео, и удалить кадры из директории
- Видео отправить в CDN и получить ID
- Сохранить ID в базу с информацией о времени и об индексов кадров
Этпы реализации
- Абстрагировать интерфейс CDN
- Базовый класс при сохрании отрывков видео
- Отнаследоваться от базового класса и реализовать хранение в том же gridfs
- в публичном CDN Amazon
- локальный CDN поднять и сохранял эти файлы
- Метрики сохранения
- файл теста, в котором будет 30 минут считываться все потоки, сохраняться на CDN и после сохранения чтобы выводил максимальное и среднее значение задержек Задержка - это разница между двумя последовательными кадрами при чтении по каждому урлу выводить максимальное и среднее значение задержек
- Оптимизировать сервис, так чтобы метрики снизились
Продолжение
ffmpeg может читать из потока и сразу созранять как видео
Текущая команда:
ffmpeg -rtsp_transport tcp -i 'rtsp://faceid:Hv4w2!X7r@37.204.180.11:554/cam/realmonitor?channel=6&subtype=0' -filter:v fps=2 -an -use_wallclock_as_timestamps 1 -f segment -reset_timestamps 1 -segment_time 128 -segment_format mkv -strftime 1 test_output/%Y%m%dT%H%M%S.mkv
Нужно ознакомиться с документацией, дополнить команду так, чтобы колиество фреймов было фиксировано - 128 https://ffmpeg.org/ffmpeg-all.html#segment_002c-stream_005fsegment_002c-ssegment
Решение 1
ffmpeg -rtsp_transport tcp -i 'rtsp://faceid:Hv4w2!X7r@37.204.180.11:554/cam/realmonitor?channel=6&subtype=0' -c:v libx264 -x264-params keyint=1:min-keyint=1 -filter:v fps=2 -an -use_wallclock_as_timestamps 1 -f segment -reset_timestamps 1 -segment_time 64 -segment_time_delta 0.5 -segment_format mkv -strftime 1 test_output/2/%Y%m%dT%H%M%S.mkv
Решение 2 - с архивацией
ffmpeg -rtsp_transport tcp -i 'rtsp://faceid:Hv4w2!X7r@37.204.180.11:554/cam/realmonitor?channel=6&subtype=0' -c:v libx264 -preset veryfast -crf 40 -filter:v fps=1 -x264-params keyint=1:min-keyint=1 -an -use_wallclock_as_timestamps 1 -f segment -reset_timestamps 1 -segment_time 128 -segment_format mp4 -strftime 1 'test_output/6/%Y%m%dT%H%M%S.mp4'
Решение 3 (лучшее) - с архивацией и ускорением
ffmpeg \
-rtsp_transport tcp \
-i 'rtsp://faceid:Hv4w2!X7r@37.204.180.11:554/cam/realmonitor?channel=6&subtype=0' \
-c:v libx264 -preset medium -crf 34 \
-filter:v "fps=16, setpts=PTS/16" \
-x264-params keyint=1:min-keyint=1 -an \
-use_wallclock_as_timestamps 1 \
-f segment -reset_timestamps 1 -segment_time 8 \
-segment_format mp4 -strftime 1 \
'test_output/11/%Y%m%dT%H%M%S.mp4'
Доп. информация
Иструкция: https://gist.github.com/TomHumphries/f565e0ce479e4acae4a6ecb1d244dbbc
Структурв БД:
- dt: datetime
- grid_id: ObjectId
- index: int
- room_id: ObjectId
- meta: dict
storage: [grid_id, file]
10:00 - 12:00 room_id
query - grid_id, index которые в этот промежток
Техническое задание для оптимизации записи и хранения медиа файлов
Общее описание задачи
Целью проекта является оптимизация процессов захвата, записи и хранения видео и аудио данных, используя возможности ffmpeg, для улучшения производительности, эффективности хранения и расширения функциональности системы.
Основные требования:
-
Интеграция
ffmpegдля захвата и обработки видеопотоков:- Замена текущей логики захвата видеопотоков с использованием OpenCV на
ffmpeg. - Реализация функций предварительной обработки видеопотоков, включая изменение разрешения, сжатие, конвертацию в черно-белый формат и другие.
- Замена текущей логики захвата видеопотоков с использованием OpenCV на
-
Разработка новых классов для записи и чтения видео с использованием
ffmpeg:- Создание классов, аналогичных
EfficientGridFSWriterиEfficientGridFSReader, для работы с файлами черезffmpeg. - Обеспечение совместимости новых классов с существующей архитектурой системы.
- Создание классов, аналогичных
-
Оптимизация хранения видео и аудио данных:
- Исследование возможностей
ffmpegдля оптимизации форматов хранения данных с целью экономии дискового пространства при сохранении качества. - Адаптация схемы хранения данных в MongoDB с учетом новых форматов и требований к эффективности.
- Исследование возможностей
-
Разработка метрик и тестов для оценки производительности системы:
- Создание инструментов для измерения производительности захвата, обработки и хранения данных.
- Сбор и анализ метрик для определения оптимальных настроек
ffmpegи структуры хранения данных.
Детальные требования:
-
Абстракция интерфейса CDN для унификации работы с хранилищами:
- Разработка базового класса для абстракции процессов сохранения и чтения данных.
- Имплементация конкретных классов для работы с GridFS MongoDB, Amazon CDN и локальными хранилищами.
-
Реализация тестового сценария для измерения задержек:
- Создание скрипта для автоматизированного тестирования, измеряющего задержки при работе с различными CDN.
- Анализ полученных данных для выявления узких мест в процессе сохранения данных.
-
Оптимизация сервиса для снижения задержек:
- Использование результатов тестирования для оптимизации параметров кодирования
ffmpeg. - Адаптация логики записи и чтения данных для минимизации задержек.
- Использование результатов тестирования для оптимизации параметров кодирования
Технические детали:
- Язык программирования: Python 3.
- Основные библиотеки и инструменты:
ffmpeg,imageio-ffmpeg,PIL(Pillow),numpy,pymongo,gridfs. - Среда разработки: Возможность разработки и тестирования должна быть обеспечена как в локальной среде, так и на целевых серверах.
- Документация: Каждый новый класс и метод должен сопровождаться подробными комментариями и документацией. Также необходимо подготовить инструкции по развер
тыванию и настройке новых компонентов системы.
Metadata
Release files for piestreamer 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| piestreamer-0.1.0.tar.gz | 25.0 kB | With provenance | Details for piestreamer-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| piestreamer-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for piestreamer-0.1.0-py3-none-any.whl |
Total release size: 63.4 kB
Release files / piestreamer-0.1.0.tar.gz
| Download URL | piestreamer-0.1.0.tar.gz |
|---|---|
| Size | 25.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8da3f1176b9804a793287048cda411ef471e7d81366f77d64fdb580b270bc41d
|
|
BLAKE2b-256 checksum How to use checksums |
5310ea0d9b5f99f95b628bb10dfc729fd5fb0731ef563381f83f38fc91089661
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 6, 2026.
Transparency logRelease files / piestreamer-0.1.0-py3-none-any.whl
| Download URL | piestreamer-0.1.0-py3-none-any.whl |
|---|---|
| Size | 38.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
323ef0ddb983175dff51e91a7e6679a4e71067ba51c65291130720237c4df4d3
|
|
BLAKE2b-256 checksum How to use checksums |
aa87d8f7ea7239b122e95f149dedbe4e6184753064ccaf7979d4f8a1277e3f87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 6, 2026.
Transparency logSecurity for piestreamer 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for piestreamer-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Mar 6, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.