1

Тема: gstreamer

Скажите, а проигрывание аудио через gstreamer по качеству не уступает стандартному плееру? Вообще есть какая нибудь разница? Где то слышал, что только родной плеер аппаратно ускоряет декодирование мп3 потока.

2 Отредактировано Mitrandir (06-04-2009 23:31:53)

Re: gstreamer

Качество, имхо, везде одинаковое. Не хватало еще чтоб плееры качество портили. А вот ресурсоемкость отличается.

На diablo есть довольно простой способ проверить, используется ли DSP-сопроцессором - посмотреть частоту основного процессора, например с помощью advanced-power. Если 400MHz, то dsp не используется, так как в OMAP2420 при 400MHz на CPU частота DSP резко падает, и поэтому при использовании DSP частоту CPU понижают до 330MHz, чтобы обеспечить нормальную частоту на DSP (220-230MHz если я правильно помню). Это, конечно, "правило большого пальца", но на практике должно быть так.

Замеры:
Родной плеер = 330MHz (значит использует DSP)
MPlayer = 400MHz (значит забивает на DSP)
GStreamer ("gst-launch filesrc location=test.mp3 ! dspmp3sink") = 330MHz (значит использует DSP)
Canola = 330MHz

Но GStreamer - штука модульная и все зависит от того, как составить конвеер плеера. Если составить его грамотно - используя таблеточный модуль dspmp3sink, заточенный под DSP, то DSP очевидно будет задействан. Теоретически, можно составть конвеер по-дурацки и устроить софтварный декодинг mp3.

Вывод: GStreamer может использовать аппаратно-ускоренный mp3-декодинг с помощью DSP.


P.S.
А я всегда считал что родной плеер основан как раз на gstreamer'е. Я неправ?

N̶8̶0̶0̶ + N̶8̶1̶0̶ + N̶9̶0̶0̶ + N̶9̶5̶0̶ + N̶9̶ ̶C̶y̶a̶n̶ + N̶9̶ ̶B̶l̶a̶c̶k̶

3 Отредактировано TWINc (07-04-2009 06:17:15)

Re: gstreamer

Спасибо за развернутый ответ. Мне тоже кажется, что стандартный плеер основывается на gstreamer'е. По крайней мере это было бы логично.

Но GStreamer - штука модульная и все зависит от того, как составить конвеер плеера. Если составить его грамотно - используя таблеточный модуль dspmp3sink, заточенный под DSP, то DSP очевидно будет задействан.

Обязательно задействую этот модуль, как только мой плеер научится играть музыку smile

4

Re: gstreamer

А кто-нибудь знает как запустить gst на a2dp?
Я как-то пробовал, но не получилось.
Не помню уже в чем была проблема.
Если сделать, то многие плейеры заработали через a2dp

gst-inspect bluetooth
Plugin Details:
  Name:                 bluetooth
  Description:          Bluetooth plugin library
  Filename:             /usr/lib/gstreamer-0.10/libgstbluetooth.so
  Version:              3.28
  License:              LGPL
  Source module:        bluez-utils
  Binary package:       BlueZ
  Origin URL:           http://www.bluez.org/

  rtpsbcpay: RTP packet payloader
  a2dpsink: Bluetooth A2DP sink
  avdtpsink: Bluetooth AVDTP sink
  sbcparse: Bluetooth SBC parser
  sbcdec: Bluetooth SBC decoder
  sbcenc: Bluetooth SBC encoder
bluetooth type: sbc

  7 features:
  +-- 6 elements
  +-- 1 types

Был бы у Чехова автомобиль, поворотник бы Чехов включал.
N810 (DIABLO_5.2008.43-7)

5

Re: gstreamer

Сколько читал ITT (правда не в последнее время), ни одного упоминания про A2DP через gst.

Был Nokia N800 + A-Data SDHC6 4Gb + Kingston SDHC6 8Gb + Nokia 5610 + USBHDD + Card Readers + Palm TT3 + Linksys WRT54G / OpenWRT + Megafon EDGE + BT GPS Holux M1000.

6

Re: gstreamer

Ну одно-то точно есть. Я там спрашивал smile
Пытался как в первоисточнике написано
http://wiki.bluez.org/wiki/HOWTO/AudioDevices
В основном получал что не разных плагинов типа mp3parse или audioconvert или alsasource

Был бы у Чехова автомобиль, поворотник бы Чехов включал.
N810 (DIABLO_5.2008.43-7)

7 Отредактировано Mitrandir (07-04-2009 15:03:20)

Re: gstreamer

Я бы попробовал, но мне просто не на чем проверять, нет bt-наушников sad

N̶8̶0̶0̶ + N̶8̶1̶0̶ + N̶9̶0̶0̶ + N̶9̶5̶0̶ + N̶9̶ ̶C̶y̶a̶n̶ + N̶9̶ ̶B̶l̶a̶c̶k̶

8

Re: gstreamer

Поизучал вывод gst-inspect'а, чувствуется что у gstreamer'а на таблетке просто нет mp3-декодера. Есть только закрытый нокиевский dspmp3. Надо ставить что-то стороннее

N̶8̶0̶0̶ + N̶8̶1̶0̶ + N̶9̶0̶0̶ + N̶9̶5̶0̶ + N̶9̶ ̶C̶y̶a̶n̶ + N̶9̶ ̶B̶l̶a̶c̶k̶

9

Re: gstreamer

Хм. Под Scratchbox'ом у меня успешно скомпилировался fluendo mp3 decoder. Но сейчас мне надо бежать, завтра попробую будет ли он играть на таблетке. Если будет, то если его совместить с " a2dpsink: Bluetooth A2DP sink", то может получиться.

N̶8̶0̶0̶ + N̶8̶1̶0̶ + N̶9̶0̶0̶ + N̶9̶5̶0̶ + N̶9̶ ̶C̶y̶a̶n̶ + N̶9̶ ̶B̶l̶a̶c̶k̶

10

Re: gstreamer

ИМХО нужно собирать libtwolame и gstreamer0.10-plugins-ugly
ps
Наврал  libtwolame  только mpeg 2

Был бы у Чехова автомобиль, поворотник бы Чехов включал.
N810 (DIABLO_5.2008.43-7)

11

Re: gstreamer

Собрал fluendo, на таблетке играет ужасно: тормозит и заикается. Стыд и позор.
Играет таким конвеером:

gst-launch filesrc location=taco_-_puttin_on_the_ritz.mp3 ! flump3dec ! dsppcmsink

Выложил в файлы, кому интересно - проверьте с a2dpsink'ом. so класть в /usr/lib/gstreamer-0.10/.   Если заиграет, будет хотя бы proof of concept, что это вообще возможно. Кстати, кто-нибудь вообще проверял работоспособность a2dpsink'a? Хотя бы на wav?

N̶8̶0̶0̶ + N̶8̶1̶0̶ + N̶9̶0̶0̶ + N̶9̶5̶0̶ + N̶9̶ ̶C̶y̶a̶n̶ + N̶9̶ ̶B̶l̶a̶c̶k̶

12

Re: gstreamer

Что-то ничего не выходит:

$ gst-launch filesrc location=test.mp3 ! flump3dec ! a2dpsink device=XX:XX:XX:XX:XX:XX
WARNING: erroneous pipeline: could not link flump3dec0 to a2dpsink0

$ gst-launch filesrc location=/usr/share/sounds/game-mahjong_shuffle_usage.wav !  wavenc ! a2dpsink device=XX:XX:XX:XX:XX:XX
WARNING: erroneous pipeline: could not link wavenc0 to a2dpsink0

Нет звука.

Был бы у Чехова автомобиль, поворотник бы Чехов включал.
N810 (DIABLO_5.2008.43-7)

13

Re: gstreamer

У a2dpsink'a больше полезных опций никаких нет?
Попробуй еще между flump3dec и a2dpsink вставить audioconvert и/или audioresample

N̶8̶0̶0̶ + N̶8̶1̶0̶ + N̶9̶0̶0̶ + N̶9̶5̶0̶ + N̶9̶ ̶C̶y̶a̶n̶ + N̶9̶ ̶B̶l̶a̶c̶k̶

14

Re: gstreamer

кстати, а ты зачем там wavenc вставил? Там wavdec наверное нужен?

N̶8̶0̶0̶ + N̶8̶1̶0̶ + N̶9̶0̶0̶ + N̶9̶5̶0̶ + N̶9̶ ̶C̶y̶a̶n̶ + N̶9̶ ̶B̶l̶a̶c̶k̶

15

Re: gstreamer

Заиграло так
! flump3dec  !  sbcenc ! a2dpsink device=
Только несколько сек. играет потом тишина, потом опять.
Однако звук чистый.
И проц. на 90% грузит

Был бы у Чехова автомобиль, поворотник бы Чехов включал.
N810 (DIABLO_5.2008.43-7)

16

Re: gstreamer

Отлично! И стерео играет? Наверное sbcenc буферизирует, поэтому длинные паузы в несколько секунд. Проц грузит - декодер софтварный. Я пытался компилить fluendo с опцией вроде  --with-tune-n800 (которая у него на удивление оказалась) и с оптимизацией под arm, но результат тот же - тормозит. Надо искать другой mp3-плагин. Есть плагин lame, который используют для кодирования mp3, может он и декодировать умеет? Надо проверить

N̶8̶0̶0̶ + N̶8̶1̶0̶ + N̶9̶0̶0̶ + N̶9̶5̶0̶ + N̶9̶ ̶C̶y̶a̶n̶ + N̶9̶ ̶B̶l̶a̶c̶k̶

17

Re: gstreamer

Собрал я lame plugin. Там только encoder
lame:  lame: L.A.M.E. mp3 encoder
Хочу попробовать mad

Был бы у Чехова автомобиль, поворотник бы Чехов включал.
N810 (DIABLO_5.2008.43-7)

18

Re: gstreamer

Отлично. mad играет чистенько. Проц. конечно грузит, но даже не поднимает частоту! на 165 играет.
Теперь можно плейеры на gst использовать с a2dp

Был бы у Чехова автомобиль, поворотник бы Чехов включал.
N810 (DIABLO_5.2008.43-7)

19

Re: gstreamer

Отлично! Поздравляю. Опубликуй где-нибудь, на itt, чтоб кому надо могли начать патчить плееры.

Поразительно что mad играет на 165! Ведь mplayer тоже играет через libmad, но при этом повышает частоту до 400.

N̶8̶0̶0̶ + N̶8̶1̶0̶ + N̶9̶0̶0̶ + N̶9̶5̶0̶ + N̶9̶ ̶C̶y̶a̶n̶ + N̶9̶ ̶B̶l̶a̶c̶k̶

20

Re: gstreamer

Хм. Я чего-то не понимаю: mplayer поднимает частоту до 400, но при этом грузит проц всего на 4%. Причем даже при вручную выставленном режиме powersave. Как так? Почему разгоняется до 400, если загрузки нет? Кроме того, я был уверен, что в powersave частота вообще не должна повышаться

N̶8̶0̶0̶ + N̶8̶1̶0̶ + N̶9̶0̶0̶ + N̶9̶5̶0̶ + N̶9̶ ̶C̶y̶a̶n̶ + N̶9̶ ̶B̶l̶a̶c̶k̶

21

Re: gstreamer

У меня mplayer не повышает частоту.
Стоит ondemand и 165, а загрузка ~ 30%
Это для a2dp.
Я пока написал на ITT в тред panucci
Очень хочется сделать нормально аудио книги.
Паузу на кнопку наушников a2dp я сделал.
А как в питоне вывод поменять не пойму.
Классно было бы если бы прямо в установках плейеров можно было менять вывод a2dp-динамик.

Был бы у Чехова автомобиль, поворотник бы Чехов включал.
N810 (DIABLO_5.2008.43-7)

22

Re: gstreamer

Глянул youamp. Там тоже как и в panucci
gst.element_factory_make("playbin")
и все. И как менять - не понимаю.
Может кто просветит?

Был бы у Чехова автомобиль, поворотник бы Чехов включал.
N810 (DIABLO_5.2008.43-7)

23

Re: gstreamer

В panucci в файле player.py вместо playbin надо собрать собственный пайплайн по аналогии с тем, как там строится пайплайн для ogg  чуть выше.

Я mplayer замерял на проводных наушниках. Можешь у себя тоже на наушниках/динамиках попробовать? Может он у меня какой-то калеченный?

N̶8̶0̶0̶ + N̶8̶1̶0̶ + N̶9̶0̶0̶ + N̶9̶5̶0̶ + N̶9̶ ̶C̶y̶a̶n̶ + N̶9̶ ̶B̶l̶a̶c̶k̶

24

Re: gstreamer

Ладно погляжу panucci. Автор тоже обещал помочь.
mplayer через динамик совсем не загружает процессор.
esd максимальное - 2.5 %
А вот частота поднимается до 400.
Что-то я читал по этому поводу. Как-то связано с использованием DSP.
Нужно будет поискать инфу в инете по этому поводу.
PS
Нашел smile
http://pygstdocs.berlios.de/pygst-tutor … eline.html

Был бы у Чехова автомобиль, поворотник бы Чехов включал.
N810 (DIABLO_5.2008.43-7)

25

Re: gstreamer

Заработало!!!
Правда коряво пока сделал - адрес наушников прямо в код прописал smile
Нужно будет еще youamp переделать.

Одна лишь проблема. Как бы сделать демон на питоне? Для кнопки на наушниках нужен.
Пока я только с kagu использовал a2dp запускал просто в консоле. А теперь для каждого  плейера нужно...

Был бы у Чехова автомобиль, поворотник бы Чехов включал.
N810 (DIABLO_5.2008.43-7)