Qt a multimediální backend

Qt a multimediální backend
« kdy: 24. 02. 2014, 15:39:51 »
Hezký den všem,

mám trochu dost specifickou otázku a nevím, jestli mi vůbec bude někdo tady schopný poradit, ale za pokus nic nedám.

Kdysi jsem vytvořil přehrávač primárně pro můj tablet s Windows napsaný v Pythonu a Qt4/QML. K vidění je tady.

Jelikož projekt PySide a s ním i portace Pythonu na mobilní OS (Android, Sailfish, Ubuntu, Tizen) je v podstatě mrtvý, rozhodl jsem se program přepsat do Qt5 a C++. Narazil jsem ale na poměrně zásadní problém.

Základní funkcí, bez které si nedokážu použitelný přehrávač představit, je podpora replay gain, tedy vyrovnání hlasitosti různých skladeb. Funguje to tak, že se soubor oskenuje a do tagu se zapíše hodnota o kolik se má zesílit nebo zeslabit tak, aby všechny skladby hrály stejně hlasitě. V předchozí Qt4 veriz jsem jako backend používal Phonon a ten měl funkci setVolumeDecibel, která umožňovala hlasitost srovnat. V Qt5 se přešlo na QtMultimedia a tato funkce zmizela. Existuje pouze setVolume s rozsahem hodnot 0-100, což je pro moje účely nepoužitelné.

Nastává teda otázka, co dál. Jedna možnost je nabourat se nějak hlouběji pod kapotu QtMultimedia a tam s hlasitostí hýbat. Na to ale rozhodně moje znalosti a schopnosti nejsou dostatečné, s C/C++ teprve začínám. Další možností je použít komplet jiný backend. Napadá mě GStreamer a libVLC.

GStreamer běží na platformách na které mířím - Windows, Linux a Android. Ale je to obrovský balík a hlavně je postavený kolem GTK+. Existuje sice nějaký binding QtGstreamer, ale ten je postavený na zastaralých knihovnách GStreamer 0.10 a zdá se, že vývoj pro 1.x nějak usnul...

Další možností je libVLC. I ta knihovna by měla fungovat na všech požadovaných platformách, ale nemám s ní vůbec žádné zkušenosti. Ale dostupná dokumentace mi přijde poměrně nekompletní a nevím, jestli to není vzhledem k mým slabým znalostem C/C++ příliš low-level záležitost.

Máte s tím někdo nějaké zkušenosti? Také jsem slyšel, že je problém s dynamicky linkovanými knihovnami na Androidu. Je to pravda?

Předem děkuju za jakoukoliv radu.


nou

Re:Qt a multimediální backend
« Odpověď #1 kdy: 24. 02. 2014, 18:25:38 »
QtMultimedia pouziva viacero backendov podla platformy. pokial viem na Linuxe je to gstreamer, na windows nieco z directX, a na androide nativny prehravac ktory je pritomny v android API.

gstreamer je obrovsky balik, ale hlavne kvoly tomu ze podporuje vsetko mozne. co som ale posledne skusal gstreamer na android tak to nebolo prave pouzitelne kedze prehraval tak 1-2FPS na mojom skusobnom tablete.

Re:Qt a multimediální backend
« Odpověď #2 kdy: 24. 02. 2014, 19:21:12 »
Na Windows používá QtMultimedia buďto DirectShow nebo Media Foundation.

Každopádně to nemění nic na tom, že nelze nastavit hlasitost v decibelech na rozdíl od staršího Phononu. Kromě toho je tam nějaká údajná podpora bezešvého přehrávání, které závisí na dekódovacím backendu. Jenže nefunguje ani ve Windows ani v Linuxu (s libVLC ani GStreamerem), takže nevim, kde tedy má vlastně fungovat.

Přehrávání videa budu řešit tak jako tak přes QML Video komponentu, takže to mě netrápí. Jde čistě o hudbu, kde chci, aby to hrálo bez pauz a hlavně aby se daly použít replay gain tagy. Zdá se, že jediná šance je ten moloch GStreamer, protože libVLC také evidentně nezvládá bezešvé přehrávání.