LINUX.ORG.RU

Поток GStreamer в железо с выполнением нормирования частоты следования буферов.

 


0

2

Здравствуйте

Имею такую задачу: Имеется устройство в ALSA 44100, моно (alsasrc device=somedev). somedev - пусть это будет микрофон. Имеется некая железка, которая через определенный файловый интерфейс принимает буфера раз в 20 мс по 160 байт. Можно не раз в 20 мс, а пореже, но кратно 20 мс.

Как мне поток в GStreamer'e заквантовать по n*20 мс? Какой механизм можно использовать для приведения к такому кванту. То есть сыпятся буфера много чаще, чем надо отдавать в свою железку. Может есть элемент для таких целей? К выходу этого элемента будет подключаться свой элемент, аналог filesink, который по приходу буферов будет закидывать их в железку, упаковывая их в свой формат. Железка не имеет калбечного механизма, она просто принимает буфера и по факту приема буферов их обрабатывает.

Хорошего дня!

К выходу этого элемента будет подключаться свой элемент, аналог filesink

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

ox55ff ★★ ()

Имеется устройство в ALSA 44100, моно (alsasrc device=somedev). somedev - пусть это будет микрофон.
Имеется некая железка, которая через определенный файловый интерфейс принимает буфера раз в 20 мс по 160 байт.

50 * 160 = 8000

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

https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-pl...

насчет размера буфера - надо покопаться в плагинах, как вариант посмотреть можно ли период явно указать в плагине alsasrc.

anonymous ()
Ответ на: комментарий от anonymous

Посмотрел - в alsasrc не изменить размер периода. Судя по этому

К выходу этого элемента будет подключаться свой элемент, аналог filesink

у вас есть свой плагин, посмотрите в сторону

https://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-libs/html...

This class is for elements that receive buffers in an undesired size. While for example raw video contains one image per buffer, the same is not true for a lot of other formats, especially those that come directly from a file. So if you have undefined buffer sizes and require a specific size, this object is for you.
anonymous ()