Отправка образца / буферов из appsink в appsrc

Мне нужно реализовать архитектуру, в которой я могу передавать данные из AppSink в Appsrc. Теперь я не могу понять, можно ли это сделать в одном конвейере или я для этого потребуется два конвейера. Учитывая, что я как-то манипулирование данными между apppsink и appsrc.

Другое дело, что из AppSink я могу извлекать образцы с помощью pull-samples, а в AppSrc можно использовать push-sample или push-buffer для ввода данных. Итак, есть ли способ явно сгенерировать буфер полученных образцов в AppSink или я должен передавать образец за образцом в AppSrc?

Пожалуйста, предложите.

Поэтому вместо этого вам нужно написать свой собственный элемент.

Velkan 12.04.2018 07:58

Вы имеете в виду, что то, о чем я прошу, не может быть достигнуто с помощью AppSink и AppSrc?

Rhythm Chopra 12.04.2018 09:30

И даже если мне придется, можете ли вы направить меня к хорошему справочнику или руководству?

Rhythm Chopra 12.04.2018 09:31

Что именно ты пытаешься сделать? Зачем вам эта конструкция? Может быть, Pad Probe может сделать это проще?

Florian Zwoch 13.04.2018 11:31

Образец также имеет буфер. Таким образом, вы должны взять образец, получить буфер и передать его источнику. Может быть, требуется увеличенная ссылка на буферный объект. Хотя не уверен.

Florian Zwoch 13.04.2018 11:34

Я пытаюсь создать конвейер, который будет читать поток udp на одном порту, а затем мне нужно декодировать кадры, применить некоторые изменения к полученному кадру, перекодировать его, а затем перенаправить на другой порт. Итак, чтобы извлечь фрейм из конвейера, где я буду изменять фрейм, мне нужен AppSink, а затем, чтобы вернуть измененный фрейм в конвейер, мне нужен AppSrc. Есть ли альтернативный способ добиться того же? Пожалуйста, предложите

Rhythm Chopra 13.04.2018 14:25

Итак, это похоже на один буфер на сэмпл? (поправьте меня если я ошибаюсь). И у образца есть буфер, но у AppSink нет сигнала pull-buffer, он позволяет только pull-sample.

Rhythm Chopra 13.04.2018 14:33

Буфер - это часть образца. Образец предлагает больше, чем буфер, но вы заботитесь только о буфере. Но я предлагаю проверить контактные щупы. Вы можете перехватывать буферы в конвейере транскодирования и изменять их с их помощью без использования appsrc и appsink.

Florian Zwoch 13.04.2018 17:37

Спасибо за ваш ответ, но еще одна вещь, которую я мог бы здесь затронуть, - это то, что вычисления, которые мне нужно выполнить над видеокадром, могут включать тяжелый алгоритм обработки. Итак, я извлекаю входящий кадр, применяю алгоритм, изменяю кадр и возвращаю его в конвейер. И это нужно делать для каждого кадра видео, который получает gstreamer. Как вы думаете, контактные щупы могут помочь мне в этом?

Rhythm Chopra 13.04.2018 20:36

Это волшебным образом не исправит вашу потребность в вычислениях. Пока вы принимаете задержку вычислений и устанавливаете достаточно большие размеры очереди, все должно быть в порядке. То же самое относится и к подходу appsrc. Если ваши вычисления не в реальном времени, как они могут помочь вам в этом?

Florian Zwoch 14.04.2018 01:36

Что ж, спасибо за подробное объяснение. Согласно документации, похоже, что это позволяет изменять буферы. Я попробую использовать контактные щупы и проверю, соответствует ли он моим требованиям.

Rhythm Chopra 14.04.2018 08:21
3
11
1 082
0

Другие вопросы по теме