Изменить частоту кадров в конвейере GStreamer дважды - PullRequest
0 голосов
/ 15 ноября 2018

У меня проблема с созданием конвейера в GStreamer.

Мой конвейер выглядит так:

gst-launch-1.0 videotestsrc is-live=true ! videorate ! video/x-raw,framerate=200/1 ! videorate max-rate=50 ! videoconvert ! x264enc bitrate=500000 byte-stream=true ! h264parse ! rtph264pay mtu=1400 ! udpsink host=127.0.0.1 port=5000 sync=false async=true

На данный момент я оптимизирую конвейер для приложения.Таким образом, вместо videotestsrc в конвейере будет appsrc, который получает кадры из приложения, которое возвращает кадры.Каждый раз, когда appsrc запрашивает фрейм, приложение возвращает его.Камера имеет около 50 кадров в секунду.

Я помогу объяснить с изображением:

enter image description here

Серая линия означает время.Допустим, камера отправляет кадр каждые 20 мс (50 кадров в секунду) (красные точки), а appsrc - каждые 20 мс, но всегда запрашивает 1 мс, прежде чем камера создаст новый кадр (синие точки).Это сгенерирует задержку в 19 мс, которую я пытаюсь уменьшить до минимума.

Моя идея - использовать videorate ! video/x-raw,framerate=200/1, чтобы источник запрашивал новый кадр каждые 5 мс, что означает, что синяя точка будетБыть в 4 раза быстрее, чем камера, получающая новые кадры, что означает, что 4 кадра будут равны.После получения этих «новейших» кадров я хочу ( без кодировки ) ограничить частоту кадров до 50 кадров в секунду, используя videorate max-rate=50.

Проблема в том, что мой конвейер не работает в приложении;даже не как команда терминала gst-launch-1.0.

Как я могу дважды контролировать частоту кадров в одном конвейере?Есть ли другое решение?

1 Ответ

0 голосов
/ 19 ноября 2018

Используйте set_property для установки / изменения свойств вашего элемента. Дескриптор элемента может быть получен с помощью [gst_element_factory_make][1].

rate = gst_element_factory_make("videorate","vrate")
g_object_set("rate","property-name","property-value")

Вы можете устанавливать / изменять значения в зависимости от ваших требований во время воспроизведения конвейера.

...