locsemege Creative Commons License 2010.04.16 0 0 40
Tapasztalataim szerint a PulseAudio még mindig több sebből vérzik. Végrehajtottam egy olyan kísérletet, amelyben két gép lokális hálózaton van, az egyiken audacious2 játszik le zenét, a PulseAudio RTP Multicast hálózatra teszi a stream-et, a másik gép PulseAudio hangszervere felszedi azt, s a lokális hangkártyáján hallhatóvá teszi.

A kísérlet ugyan sikerült, most másodjára stabilan megy egy órája, ugyanakkor első nekifutásra sikerült egy olyan állapotot előidéznem, hogy szaggatottan játszott le, és valahogy furcsán vinnyogva. Mintha teszem azt, minden második hangmintát küldene a hangkártyára, vagy nem 44.1 kHz mintavételi beállítást használna, persze úgy, hogy közben elfelejt resampling-et csinálni. Aztán emiatt kiszalad a buffer, megvárja, míg feltöltődik, aztán megint gyorsabban játszik le. Fura volt, s mintha az idő előrehaladtával nőtt volna a szünet ideje, s csökkent a vinnyogva lejátszás ideje.

További problémám, hogy erős gépeken - a stream-et küldő egy 2.5 GHz-es 2 magos AMD, a stream-et fogadó egy 3 GHz-es 4 magos AMD - képes eközben a PulseAudio 14%-os, illetve 10%-os CPU használatot összehozni.

Értem én, hogy a feladatnak van nehézsége, hiszen minden merev időzítésű. Maga a hanganyag 44.1 kHz mintavételű, a hangkártya ugyanígy fogadja be az adatot, de fizikailag másik gép, így másik órajel. Ha a tunkoló oldal siet, akkor lassan, de hízik a buffer, ha a stream-et fogadó oldal siet, akkor idővel buffer underflow lesz. Nem véletlen az, hogy elvileg a telefonos hálózatok a maguk 8 kHz mintavételével - CCITT G.711 - az egész világon szinkronban járnak, s az eszközök PLL-el ráhúznak a központ órajelére frekvenciában. Tehát átérzem a feladat nehézségét.

Amit szerintem csinálni lehet, hogy buffer overflow esetén néha egy-egy hangmintát el kellene dobni - aligha hallatszik ez meg -, buffer underflow esetén pedig egy-egy extra hangmintát be kell szúrni - célszerűen az utolsót megismételni. Vagy valamilyen metóduson keresztül biztosítani a szinkront. Hiszen máris nem olyan merev a lejátszás, ha az időzítést a hangkártya adja, a hálózatra meg nem forszírozva mennének az adó oldalon a csomagok, hanem akkor, amikor a vevő bufferében már csak kevés hanganyag van.

Mindegy is, a szösszenetem lényege, hogy noha működésre bírható, ugyanakkor egyelőre bugzik a PulseAudio. Továbbra is tartom magam ahhoz a megfigyeléshez, hogy ha valamiért úgy jönnek össze a fázisviszonyok, hogy a PA sok futásidőt visz, akkor nagyon vacak, recseg-ropog a hang, ha viszont kevés futásidőt emészt fel, jól működik. Fura módon erős gépen a Skype nagyon sok futásidőt visz, de olyankor a PulseAudio is. Szokott is ropogni, akadozni a hang.