Как gstreamer решает, какой из них использовать?
GStreamer имеет очень общий механизм автоподключения, так что он может делать правильные вещи. Документация довольно краткая, но давайте рассмотрим go для случая autovideosink
.
На первом этапе автоподключение будет пытаться отфильтровать соответствующие элементы в вашей системе: например, если входом элемента decodebin
является поток H264, он найдет только элементы, которые рекламируют ограничения video/xh264
на своих контактных площадках. В случае autovideosink
он отфильтрует все элементы, которые добавили явные теги «Sink» и «Video», чтобы найти соответствующие элементы.
На втором этапе ему все равно необходимо выбрать наилучшее соответствие из набора элементов, который мы только что собрали. Для этого GStreamer выбирает плагин с самым высоким «рангом». Плагины имеют рейтинг по умолчанию, но вы можете изменить его программно (как это сделать ответили в другом месте ).
Примечание: некоторые элементы (например, decodebin
) также предоставляют дополнительный API для еще более детальный контроль.
Есть ли возможность изменить это?
Итак, краткий ответ здесь: изменив рейтинг плагина.
Также хорошо отметить, что разработчики приложений обычно выбирают конкретный приемник (например, glimagesink
) и оптимизируют его для этого случая, настраивая свойства этого элемента.