Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Sound Problem unter Linux
Hallo ersteinmal,
also ich habe folgendes Problem, ich schreibe im moment ein Voice over IP tool unter Linux, welches auf die OpenH323 Bibliothek aufsetzt (und somit auch auf die PWLIB). So, nun passiert folgendes (wohlbemerkt nicht auf allen systemen) wenn ich den client starte funktioniert erstmal alles ganz gut, aber sobald dieser angerufen wird, bekommt der ne cpu auslastung von 100% (und macht auch keine Soundausgabe), selbst wenn die verbindung shon abgebaut ist, bleibt die auslastung (aber immer mit der statusmeldung alles sei in ordnung). Dies tritt wohlbemerkt auch nur auf, wenn ich das tool mit /dev/dsp öffne, mit der loopback device nicht. So, ich hab nun die vermutung, dass das Sound device nicht mehr will, wenn es schon von einem anderen task geöffnet ist, obwohl es im duplexmodus geöffnet wird. Meine vermutung rührt daher, das mein voip tool die sample rate auf 16000Hz herunterstellen will, und es dadurch zu nem block im tool kommt, kann das sein ???
ich bin für jeden tip dankbar.
mfg
hpf
oracle2025
30-06-2005, 12:11
Verwende ALSA unter Linux, und nutze das dmix Plugin, das wandelt IMHO alle Sampleraten passend für die jeweilige Soundkarte um.
erstmal thx für die schnelle antwort, aber das klappt leider nur bei alsa programmen, die pwlib, baut aber leider auf oss auf :(
mfg hpf
oracle2025
30-06-2005, 15:40
probier mal aoss und dmix, aoss ist ein LD_PRELOAD, das oss auf also umlenkt
anda_skoa
30-06-2005, 16:52
oss ist einfach zu limitiert.
Das bettelt quasi gerade zu nach Zugriffproblemen, weil es vom Treiber bzw der Fähigkeit der Karte abhängt, ob mehr als ein Prozess das Device öffnen kann.
Normalfall: nur ein Prozess kann.
Wenn man als Entwickler oss benutzen will weil man dessen API auch unter anderen Betriebsystemen außer Linux hat, dann sollte man sich dieser Einschränkung bewußt sein und entsprechend dokumentieren.
Ciao,
_
@ anda_skoa
thx, aber ich muss leider oss nutzen, kann man denn irgendwie über eine c++ methode rausfinden, ob schon irgendein prozess das sound device geöffnet hat ??, dann könnte ich immerhin mit nem fehler abbrechen. dann weiß der anwender wenigstens, dass er die anderen prozesse abschalten muss.
anda_skoa
30-06-2005, 17:00
@ anda_skoa
thx, aber ich muss leider oss nutzen
Das nenn ich Künstlerpech :)
Stellt sich natürlich zusätzlich die Frage wie lange oss unter Linux noch unterstützt wird.
kann man denn irgendwie über eine c++ methode rausfinden, ob schon irgendein prozess das sound device geöffnet hat ??
Vermutlich nicht Betriebsystemunabhängig.
Eventuell ein non blocking open benutzen und den Fehlerfall behandeln?
Ciao,
_
also, das soll bei nem kunden ausschließlich unter linux laufen, das linux selbst soll wohl auf der distribution die es im moment hat (suse 7.3) bleiben. das öffnen der soundkarte geschieht in der pwlib, ich könnte das überschreiben, aber es liefert leider keinen fehler zurück wenn ich es im non blocking mode öffne, hängt sich aber trotzdem auf. würde es im blocking mode darauf bestehen, dass kein anderer prozess das device geöffnet hat (würde das durch open geprüft?)??
mfg
hpf
anda_skoa
30-06-2005, 18:41
also, das soll bei nem kunden ausschließlich unter linux laufen, das linux selbst soll wohl auf der distribution die es im moment hat (suse 7.3) bleiben.
Du könntest eventuell mit einem Aufruf von fuser arbeiten.
Oder vielleicht steht da auch etwas in /proc
das öffnen der soundkarte geschieht in der pwlib, ich könnte das überschreiben, aber es liefert leider keinen fehler zurück wenn ich es im non blocking mode öffne, hängt sich aber trotzdem auf. würde es im blocking mode darauf bestehen, dass kein anderer prozess das device geöffnet hat (würde das durch open geprüft?)??
Vielleicht mit O_EXCL in den open flags.
Oder mit einem fcntl oder ioctl Aufruf.
Scheint aber nicht so leicht zu sein, die meisten oss Applikationen haben das Problem.
Ciao,
_
danke nochmal für die schnelle hilfe.
dann muss ich wohl mit dieser einschränkung von oss leben :(.
mf hpf
Powered by vBulletin® Version 4.2.5 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.