LINUX.ORG.RU

Как использовать gstreamer appsrc?


0

0

У меня есть переменная, в которую загружен mp3 файл.
Я хочу играть этот файл при помощи gstreamer.

Если я правильно понимаю, какраз для этого используется элемент appsrc. Это так?
Если да, покажите, пожалуйста, простой пример использования этого элемента. Что он вообще собой представляет? Как запихивать в него звук?

Был бы очень благодарен, если бы кто-нибудь показал пример на языке Python.


:(

я вдруг понял что при том что все гстримеровские пакеты у мня установлены, такого элемента в гстримере нету.

как же сделать такое без appsrc?
возможно создать какой-то свой обьект, который будет источником данных для гстримера?

A2K
() автор топика
Ответ на: комментарий от mv

попробовал сделать вот такое:

def handoff(*args):
print args

player = gst.Pipeline("player")
source = gst.element_factory_make('fakesrc', 'file-source')
source.connect('handoff', handoff)
source.set_property('signal-handoffs', True)
decoder = gst.element_factory_make("mad", "mp3-decoder")
conv = gst.element_factory_make("audioconvert", "converter")
sink = gst.element_factory_make("alsasink", "alsa-output")
player.add(source, decoder, conv, sink)
gst.element_link_many(source, decoder, conv, sink)
player.set_state(gst.STATE_PLAYING)

функция handoff вызывается с такими аргументами:
<__main__.GstFakeSrc object (source) at 0xa127644>
<gst.Buffer 0xa25ce98 of size 0>
<GstPad (source:src) at a222840>

я правильно понимаю что теперь мне нужно записать во второй аргумент (буфер) музыку?
Попробовал это делать - не играет...

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

А с filesrc играет? Если играет, то нужно вешать обработчик событий пайплайна и смотреть, как (и почему) изменяется его состояние.

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

да, filesrc играет.

с этим гстримером почти всё делать приходится эксперементальным методом :(

попробовал сделать свой источник - не получилось.
даже на примере fakesrc.py из архива гстримера получаю ошибку сегментирования.
похоже, баг или в самом гстримере, или в биндингах или в примерах.

решил пока что отказаться от гстримера - слишком он меня задерживает.

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

Забавно, но два года назад я тоже бросил затею применить gstreamer в проекте, потому что всё приходилось проверять экспериментально, в нём была куча багов до совсем неюзабельного состояния некоторых частей, плюс gstreamer не умел работать, как хотелось (конфигурацию пайплайна в рантайме изменять) =)

mv ★★★★★
()

вроде сделал :)
написал свой источник, который читает буфер и возвращает данные :)
сильно рад.

A2K
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.