( locsemege | 2021. 03. 17., sze – 14:40 )

Nekem a pipewire nem újdonság, mert Fedora 33 alatt is használtam. Írtam is blogot róla itt. Kép átvitelére nem használom, például azért, mert nincs webkamerám, illetve a kis notebook-on van, de nem igazán érintett meg a manapság már-már kötelező exhibicionizmus. :)

Hang esetében azért kellett nekem, mert a pulseaudio zabálja az erőforrásokat, s VoIP klienssel használhatatlanul töredezett a pulseaudio hangja, gyakori volt a buffer underrun.

Nagyon szeretem a pipewire-t, kevés CPU időt eszik, valóban van pulse, alsa, jack interface-e, s ez nyilván egyszerre használható a különböző kliensek részéről. Ugyanakkor a fejlesztés gyakran regresszióba torkollik. Például volt olyan, hogy jól működött minden, majd egy adott build-től kezdve az alsa kliensek amikor lezárták a stream-et, az utolsó buffer ciklikusan play állapotban maradt. Tehát kb. az utolsó 20 ms ismétlődött, így lényegében berregett. Ennek a debugolásában segítettem Wim Taymansnak, kijavította a bugot, meg is köszönte a segítséget.

A másik szörnyűség a bluetooth, mert nem egy egyszetű műfaj. Különféle audio profilok vannak, a csatlakozás egy állapotautomata állapotain való végiglépkedés. Ez is volt, amikor kevesebbet tudott, de működött. Részben az én nyafogásomra konfigurálhatóvá tették, hogy mely kodekeket használhasson. Ez workaround, mert a mikro hifim tud AAC-t és SBC-t, viszont ha AAC-vel próbálkozik, eltéved az állapotautomata és nem csatlakozik. Ami rosszabb, bezavarja egy olyan állapotba a mikro hifit, hogy ott is másik üzemmódra kell kapcsolni, majd vissza bluetooth-ra, azaz kell reinit, hogy menjen SBC-vel.

Ha tiltom az AAC codec használatát, akkor korábban jó volt, most SBC-vel is határeset. Az történik, hogy megpróbálja felépíteni a linket, aztán eldobja, újra próbálja, és így tovább, végtelen ciklusban. Ha csatlakozni akarok, akkor kellően ügyesen, jó ütemérzékkel a blueman kliensen nyomok egy disconnect-et, majd kisvártatva egy connect-et. Ha túl gyors vagyok, még busy, ha túl lassú, akkor megint bekerül végtelen ciklusba. Ettől eltekintve sikerül csatlakozni. :)

Ugyanakkor azt is látni kell, a bluetooth egy bonyolult állat - épp, mint a tehén :) -, így a fejlesztők sokszor észre sem veszik, hogy baj van, mert azokkal a bluetooth-os eszközökkel, amelyekkel ők próbálnak, nem jön elő a hiba. Szóval ez nagyban függ attól, hogy az a bluetooth eszköz, amelyhez csatlakozik a fedorás gép, hogyan lett implementálva.

Ha lesz időm, erről is csinálok részletes logot és bugreportot. De most épp magam is C-ben programozok, igaz, nem pipewire-t. :) Dolgozom.

Ami még hiányzik, az az echo cancel, de lehet, hogy az megfeleően konfigurált gstreamer kliens pipeline-nal megoldható. Ennek utána kellene olvasni. De az is lehet, hogy lesz hozzá natív implementáció vagy modul.