У нас возникают утечки памяти в нашем коде Python gstreamer, когда мы пытаемся работать в течение длительного времени.
Конфигурация системы:
intel i9
4 карты захвата черной магии Intensity Pro
Nvidia P4000
64 GM RAM 512 nvm M.2 ssd
Gstreamer Pipelines.
Извлечение кадра: соединение decklinkvideosrc = идентификатор устройства HDMI = <0,3> do-timestamp= Истинный выходной поток-время = Истинный!очередь-максимальный размер-буферов = 10 макс-размер-байтов = 0 макс-размер-время = 0!видеоконвертер!appsink emit-сигналы = True sync = True caps = видео / x-raw, формат = I420
Поддельный конвейер
appsrc format = time do-timestamp = True is-живой = правда!тройникочередь !fakesink
Нет утечки памяти, если мы только запустим эти конвейеры и сможем выполнить код на всех 4 картах черной магии без утечек.
Проблема возникает, когда мы кодируем видео для потоковой передачи инепрерывная запись, т.е. запуск / остановка записи каждые несколько минут.
Наши конвейеры кодирования выглядят следующим образом:
очереди max-size-buffers = 1000 max-size-bytes= 0 max-size-time = 0 leaky = 2!Предустановка nvh264enc = 1 rc-mode = 2 битрейта = 2000!h264parse config-interval = -1!очередь !mpegtsmux!очередь-максимальный размер-буферов = 1000 макс-размер-байтов = 0 макс-размер-время = 0!тройник
Потоковый конвейер:
очередь!tcpserversink host = [ip] port = [port]
конвейер записи:
очередь!filesink async = ложная синхронизация = истинное имя = местоположение файла = [имя файла]
После 15 20 записей объем памяти очень быстро увеличивается и, в конце концов, заканчивается.