Я пытаюсь микшировать аудио, используя gstaudiomixer из двух исходных элементов, которые я динамически добавляю и удаляю.
+---------+ +------------+
| source1 |--->| |
+---------+ | | +-----------+
| audiomixer |--->| audiosink |
+---------+ | | +-----------+
| source2 |--->| |
+---------+ +------------+
Динамическое добавление элементов (с использованием пэдов и шаблонов пэдов), кажется, работает как задумано.Однако, когда динамическое удаление пэда приводит к зависанию конвейера.
Этот код я использовал для удаления элемента:
public void remove(Gst.Element? element)
{
/* Removes the element from the pipeline */
if (element == null) return;
element.set_state(Gst.State.NULL); // Stop it from streaming data
element.unlink(this.mixer);
this.pipeline.remove(element);
}
Это моя вторая попытка блокировать пэд:
public void remove(Gst.Element? element)
{
/* Removes the element from the pipeline */
if (element == null) return;
element.get_static_pad("src").get_peer().add_probe(Gst.PadProbeType.IDLE, (pad, info) => {
element.set_state(Gst.State.NULL); // Stop it from streaming data
element.unlink(this.mixer);
this.pipeline.remove(element);
return Gst.PadProbeReturn.REMOVE;
});
}
Как правильно это сделать?