"WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]

Автор Evgeniy1990, 23 мая 2016, 10:03:54

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Evgeniy1990

Краткое описание проблемы:

Если, во время воспроизведения видео, или аудио файла, вызвать используемое звуковое устройство, то звук просто исчезнет, т.е. будет тишина, при дальнейшем воспроизведении файла.

Условия:

1. Использование аудио-рендерера: "MPC Audio Renderer (WASAPI: Shared Mode)"
2. Необходимы программы, или утилиты, с возможностью вызова звукового устройства.

Алгоритм воспроизведения (при условии открытия окна настроек "ASIO4ALL 2"):

1. Выбрать аудио-рендерер: "MPC Audio Renderer" в настройках "Аудио"
2. Выбрать режим WASAPI: "Shared Mode"
3. Открыть любой видео, или аудио файл
4. После открытия видео, или аудио файла, во время непрерывного воспроизведения, открыть окно автономных настроек "ASIO4ALL 2"

Фактический результат: после открытия окна автономных настроек "ASIO4ALL 2", звук в самом плеере, во время воспроизведения видео, или аудио файла, просто исчезнет, будет тишина и он не восстановится (не вернется).

Ожидаемый результат: после открытия окна автономных настроек "ASIO4ALL 2", должен быть просто произойти обыкновенный реконнект, благодаря которому, звук должен был просто восстановиться и продолжить нормально воспроизводиться дальше до самого конца видео, или аудио файла.

Небольшое пояснение:

Вся суть бага в том, что при открытии автономного окна настроек "ASIO4ALL 2", происходит вызов аудио устройства, из-за чего в самом плеере, при использовании "WASAPI: Shared Mode", во время воспроизведения видео, или аудио файла, просто пропадает звук.

По идее, если аудио устройство вызывается, но, при этом, не занимается, то звук, в дальнейшем, должен просто автоматически восстанавливаться.

Должно быть так: вызвали аудио устройство -> звук пропал буквально на 1-2 секунды, после чего, сражу же должен восстановиться, т.е. обратно появиться. Именно так работает правильный реконнект, при использовании "Sanear Audio Renderer (WASAPI: Shared Mode)", т.е. при открытии и закрытии окна автономных настроек, звук всегда восстанавливается, т.е. возобновляется.

("Вызов устройства" -> "Отклик устройства (пропадание звука)" -> "Возвращение устройства (возобновление звука)" -> "Закрытие окна автономных настроек (пропадание звука)" -> "Возвращение устройства (возобновление звука)")

P.S. Прилагаю два лог-файла:

1. "MPC Audio Renderer (WASAPI: Shared Mode)": https://yadi.sk/i/OtNucj30ruthv
2. "Sanear Audio Renderer (WASAPI: Shared Mode)": https://yadi.sk/i/FPBZurtPrutoE
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

Ну для начала - это не баг. Это нормальное поведение самого WASAPI движка - забрали устройство и все, звука нет. Тут скорее уже как хотелка - пытаться восстанавливать вывод после перехвата звукового устройства.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Цитата: Aleksoid1978Ну для начала - это не баг. Это нормальное поведение самого WASAPI движка - забрали устройство и все, звука нет. Тут скорее уже как хотелка - пытаться восстанавливать вывод после перехвата звукового устройства.
Если точнее, то устройство просто вызвали, да, можно сказать, что забрали, но ведь при этом, оно само полностью остается свободным, незанятым ни кем. Следовательно, можно спокойно продолжать его использовать, т.е. восстанавливать, возобновлять звук, что выглядит вполне логично.
Да, вы правы, это не совсем баг, хотя и выглядит как баг, скорее уж как "фича", или же "хотелка", но мне кажется, что лучше пытаться восстанавливать и возобновлять звук, чем оставаться полностью без него.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

В том то и дело, если запросили устройство эксклюзивно - то все, оно становится недоступно для другого. Все другие программы его просто теряют. То что Sanear восстанавливает воспроизведение еще ни о чем не говорит.

Мне конечно стало интересно и я посмотрю что к чему.
[merge_posts_bbcode]Добавлено: 2016-05-23 17:53:57[/merge_posts_bbcode]

Так - скажу почему это работает на Sanear, для Shared режима автор использует push режим, т.е. он сам в коде "толкает" данные, в случае ошибки - видимо пересоздает доступ к устройству.

У нас всегда используется event режим - так вот в случае потери устройства сообщения вообще перестают приходить, и мы даже не можем попытаться восстановить воспроизведение.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Цитата: Aleksoid1978Так - скажу почему это работает на Sanear, для Shared режима автор использует push режим, т.е. он сам в коде "толкает" данные, в случае ошибки - видимо пересоздает доступ к устройству.

У нас всегда используется event режим - так вот в случае потери устройства сообщения вообще перестают приходить, и мы даже не можем попытаться восстановить воспроизведение.
Теперь понятно, из-за разных режимов (push и event) в коде этих двух аудио-рендереров.
Получается так, что если не изменить режим в коде, то попытаться восстановить звук мы не сможем вообще, или же существует способ при event восстанавливать данные?
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

Навряд ли. Аудио движок никаких сообщений не шлет по этому поводу.
[merge_posts_bbcode]Добавлено: 2016-05-24 18:03:19[/merge_posts_bbcode]

Вот пробуем тестовый билд - https://yadi.sk/d/3TFLHo5crwjF8
Что он делает - в случае "потери" устройства он пытается восстановить с ним работу.

Самое просто как проверить - запускаем в Shared режиме а потом параллельно другой проигрыватель или копию нашего в Exclusive режиме. Ждем некоторое время - и закрываем другой проигрыватель. По закрытию его наш проигрыватель должен восстановить воспроизведение звука.

Скажу сразу - это происходит не совсем плавно, т.к. у нас построен механизм в аудио-рендерер таким образом что он получает входящие данные, обрабатывает из и накапливает - и уже их них потом берет для воспроизведения. В случае если надо выполнить ре-инициализацию - происходит очистка всех накопленных данных(иначе будут проблемы). Именно поэтому при изменении настроек на лету происходит небольшой "скачок".
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Цитата: Aleksoid1978Навряд ли. Аудио движок никаких сообщений не шлет по этому поводу.
[merge_posts_bbcode]Добавлено: 2016-05-24 18:03:19[/merge_posts_bbcode]

Вот пробуем тестовый билд - https://yadi.sk/d/3TFLHo5crwjF8
Что он делает - в случае "потери" устройства он пытается восстановить с ним работу.

Самое просто как проверить - запускаем в Shared режиме а потом параллельно другой проигрыватель или копию нашего в Exclusive режиме. Ждем некоторое время - и закрываем другой проигрыватель. По закрытию его наш проигрыватель должен восстановить воспроизведение звука.

Скажу сразу - это происходит не совсем плавно, т.к. у нас построен механизм в аудио-рендерер таким образом что он получает входящие данные, обрабатывает из и накапливает - и уже их них потом берет для воспроизведения. В случае если надо выполнить ре-инициализацию - происходит очистка всех накопленных данных(иначе будут проблемы). Именно поэтому при изменении настроек на лету происходит небольшой "скачок".
Проверил тестовый билд. К сожалению, пока не работает.

Звук, после вызова аудио устройства, или же после закрытия другого плеера, при условии, что в нем в это время работал Exclusive-режим, не восстанавливается.

При вызове только аудио устройства должно быть так:

Вызов (звук пропал) -> через 1-2 сек. звук восстановился -> закрыли окно автономных настроек (звук пропал) -> через 1-2 сек. звук восстановился. Это то, что касается вызова окна автономных настроек "ASIO4ALL 2".

Если используется вторая копия нашего плеера (еще одна сессия) и в ней работает Exclusive-режим, или же просто в другом плеере работает Exclusive-режим, то при их закрытии звук должен сразу же восстанавливаться.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

Хм - а у меня восстанавливается, причем на 2-х разных машинах :)
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Цитата: Aleksoid1978Хм - а у меня восстанавливается, причем на 2-х разных машинах :)
Я проверил на другой машине, т.е. на звуковой карте "ASUS Xonar DG Audio" и на операционной системе Windows 10.

Звук, после закрытия другого плеера, при условии, что в нем в это время работал Exclusive-режим, восстановился нормально.

Первоначально я проверял на "Realtek High Definition Audio" и на системе Windows 7 - на ней звук не восстанавливается.

Вот это удивительно просто, еще и не на всех звуковых картах восстанавливается звук.
Еще и небось и не на всех операционных системах...

В общем, надо, в таком случае, это очень тщательно проверять.
[merge_posts_bbcode]Добавлено: 2016-05-24 14:41:00[/merge_posts_bbcode]

Aleksoid1978

Ясно, я нашел косяк, который влияет на это.

В общем, как только еще раз все более тщательно перепроверю, я вам отпишусь, распишу что к чему.
Пожалуйста подождите моего ответа.

[merge_posts_bbcode]Добавлено: 2016-05-24 15:15:02[/merge_posts_bbcode]

Aleksoid1978

Начал более тщательную проверку восстановления звука на различных звуковых картах.
Да, как я уже заметил, здесь не все так просто. Нужно учитывать еще и определенные условия.

По поводу вашего тестового билда, результаты:

1. Звуковая карта "Realtek HD Audio":
 
Звук, после вызова аудио устройства, или же после закрытия другого плеера, при условии, что в нем в это время работал Exclusive-режим, полностью не восстанавливается.

2. Звуковая карта "ASUS Xonar DG Audio":

Звук, после вызова аудио устройства, или же после закрытия другого плеера, при условии, что в нем в это время работал Exclusive-режим, полностью восстанавливается только в том случае, если используется метод синхронизации "Видео по аудио". Если использует метод синхронизации "Аудио по видео", то звук также полностью не восстанавливается.

Исходя из этих тестов, можно выделить обязательное условие: "Метод синхронизации".
Эти методы обязательно нужно учитывать и проверять восстановление звука при каждом их них.

На "Realtek HD Audio", ни при каком методе синхронизации, звук вообще не восстанавливается.

По поводу работы режимов WASAPI в нашем "MPC Audio Renderer" на звуковой карте "Realtek HD Audio" я могу сразу и абсолютно точно вам сказать, что они работают не совсем корректно. Есть как минимум два бага, причем оба совершенно стабильные, которые проявляются только на Realtek-звуковых картах и характерны в основном для интегрированных звуковых карт. Realtek - один из таких производителей интегрированных звуковых карт.

Пока такие вот результаты. Это еще только начало тестирования, нужно еще проверить поведение на других системах, т.е. например на Win7, при ASUS Xonar DG, или на Win10, при Realtek, т.е. посмотреть как там будет это работать, будет восстанавливаться звук, или не будет. А все потому, что драйвера, в зависимости от операционных систем, совершенно разные. Отсюда и нельзя сразу сказать точно и наверняка, что все будет работать также аналогично и нормально. Вот поэтому и необходимы тщательные проверки.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

У меня на работе так же встроенный Realtek HD - и все нормально, смотрю исключительно на нем + WASAPI Exclusive.

А по поводу восстановления - нет так нет, я попытался сделать костыль. Дальше "костылить" уже не хочется.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Цитата: Aleksoid1978А по поводу восстановления - нет так нет, я попытался сделать костыль. Дальше "костылить" уже не хочется.
Давайте попробуем через билд, с созданием лог-файла, решить эту проблему. Может найдем причину.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

Вариант №2 - https://yadi.sk/d/I6ULSivrry9Af

Проверил работу на встроенном Realtek, на USB аудио девайсе(дешевом китайском), на обоих методах синхронизации.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Цитата: Aleksoid1978Вариант №2 - https://yadi.sk/d/I6ULSivrry9Af

Проверил работу на встроенном Realtek, на USB аудио девайсе(дешевом китайском), на обоих методах синхронизации.
Проверил второй тестовый билд (второй вариант).

Вот теперь, после своих очень тщательных тестов, мне абсолютно все стало ясно, где и при каких условиях восстанавливается звук, в где нет.

Итак, для тщательных тестов я использовал две звуковые карты: "Realtek HD Audio" и "ASUS Xonar DG".

Т.е. одну - интегрированную, другую внешнюю.

Проверял восстановление звука на обеих звуковых картах, на двух совершенно разных операционных системах : "Windows 10" и "Windows 7", при двух методах синхронизации: "Видео по аудио" и "Аудио по видео".

Итоговые результаты (с учетом второго тестового билда):

"Windows 10" + "ASUS Xonar DG Audio":

Звук, после вызова аудио устройства, или же после закрытия другого плеера, при условии, что в нем в это время работал Exclusive-режим, полностью восстанавливается на обоих методах синхронизации "Видео по аудио" и "Аудио по видео".

"Windows 10" + "Realtek HD Audio (ALC1200)":

Звук, после вызова аудио устройства, или же после закрытия другого плеера, при условии, что в нем в это время работал Exclusive-режим, полностью восстанавливается на обоих методах синхронизации "Видео по аудио" и "Аудио по видео".

"Windows 7" + "ASUS Xonar DG Audio":

Звук, после вызова аудио устройства, или же после закрытия другого плеера, при условии, что в нем в это время работал Exclusive-режим, вообще не восстанавливается ни при каком методе синхронизации.

"Windows 7" + "Realtek HD Audio (ALC1200)":

Звук, после вызова аудио устройства, или же после закрытия другого плеера, при условии, что в нем в это время работал Exclusive-режим, вообще не восстанавливается ни при каком методе синхронизации.

Вторая машина: Windows 7 + Realtek HD Audio (ALC889A):

Звук, после вызова аудио устройства, или же после закрытия другого плеера, при условии, что в нем в это время работал Exclusive-режим, вообще не восстанавливается ни при каком методе синхронизации

Исходя из этих результатов, можно уже точно сделать вывод и сказать, что на операционной системе "Windows 7", ни на одной звуковой карте, ни при каких методах синхронизации, звук вообще не восстанавливается.

По поводу отличий первого тестового билда от второго:

Во втором тестовом билде, т.е. вашем втором варианте, теперь восстанавливается полностью звук на операционной системе Windows 10, на обеих звуковых картах, также и при методе синхронизации "Аудио по видео", а не только "Видео по аудио", в отличие от первого тестового билда. Т.е. вы этот баг полностью исправили, больше его нет.

Улучшение:

На Windows 10, на обеих звуковых картах, звук теперь полностью восстанавливается, при любом методе синхронизации.

Оставшаяся проблема:

Осталось разобраться с восстановлением звука на различных звуковых картах, на операционной системе Windows 7.
Это действительно очень странно, что на ней не восстанавливается звук, причем если взять только интегрированную звуковую карту "RealTek HD Audio", то на обеих операционных системах, т.е. и на Win10 и на Win7, использовалась одна и та же версия драйверов "R2.79":

http://www.realtek.com/downloads/downloadsView.aspx?Langid=1&PNid=24&PFid=24&Level=4&Conn=3&DownTypeID=3&GetDown=false

Отсюда уже можно сказать, что дело явно не в драйверах, поскольку версия одна и та же, компоненты одни и те же.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Цитата: Aleksoid1978Вариант №3 - https://yadi.sk/d/68zuGbGrryF7E
Проверил третий тестовый билд.

Пока по прежнему не восстанавливается звук на Windows 7.
Также заметил, что метод синхронизации "Аудио по видео" стал хуже работать, появились "щелчки".
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.