[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Идеологически верный звукосервер.



On 18.02.2010 22:55, Ed wrote:
> Yuriy Kaminskiy wrote:
>> On 23.11.2009 21:07, Ed wrote:
>>  
>>>>>> flashpugin-nonfree имеет гадкую способность захватывать /dev/snd/*
>>>>>> самолично.
>>>>>> И пока не пришебешь iceweasel - держать.
[...]
>> Если держать аудио-устройство открытым в dmix (к примеру, запущенным
>> mpd), то никто его эксклюзивно зохавать его не сможет.
> сейчас проверил: пустил параллельно с ютубовским роликом mplayer - они
> друг другу не мешают, значит flash не открывает аудиоустройство
> эксклюзивно. но, несмотря на это, evince периодически блокирует
> воспроизведение звука.

Начать с того, что я предложил: попробовать держать устройство *постоянно*
открытым в каком-то процессе. До запуска firefox.

> что и где не так?
>> PS Отдельная проблема - с тем, что libasound за каким-то [beep] не
>> ставит на всё ей открытое fcntl(FCLOEXEC). В результате у evince/xarchiver
>> оказывается /dev/snd/pcmXX про который он ничего не знает, и ничего сделать
>> с ним не может.
>>  FWIW, разработчики в курсе и исправлять отказались :-E На мой взгляд
>> это баг именно libasound, поскольку этот fd скрыт внутри структур алсы, и
>> приложение ничего разумного с ним сделать не может.
> гхм...

...И я таки чуть-чуть посмотрел в кишки alsa-lib на предмет реализации dmix,
если я правильно понял - этот баг вполне может играть в этом случае: флеш-плагин
открывает dmix, dmix открывает железячное устройство, потом firefox запускает
evince [не закрыв железное устройство], потом флеш закрывает dmix (и дескриптор
железного устройства, который был в процессе firefox), но ещё дескриптор
остаётся висеть внутри evince -> для всех остальных облом.

И держание устройства открытым должно этот баг замаскировать (только запущенный
до того плеер держит открытый дескриптор устройства).

Впрочем, я могу и ошибаться.

Экспериментировать мне сейчас негде - моя звуковая карточка умеет микшировать в
железе :-) [и что я будут делать, если она сдохнет - не представляю:
производитель помер смертью храбрых, современных более-менее бюджетных карточек
умеющих микшировать в железе хрен найдёшь :-\
а, помимо проблем из топика, с dmix/hda-intel mpd жрёт при проигрывании 12-20%
cpu {на ресемплинге}, с hw/au8830 - 3%], флеш-плагина у меня нет и не будет,
xarchiver и evince отсутствуют ;-)

Если я таки прав ;-), то могу только помимо того посоветовать ещё раз поругаться
с разработчиками alsa-lib ;-) Потому как после exec использовать открытый
алсовый fd всё равно абсолютно невозможно - для этого надо передавать в
запущенный процесс внутренние структуры alsa, и требовать от программы закрывать
все fd подряд перед exec - абсолютно неправильно (она не знает и не может знать
какие из них переданы ей специально и будут нужны в потомках).


Reply to: