MPC-BE forum

MPC-BE => Баг Репорт / The bug report => Архив / Archive => Тема начата: Evgeniy1990 от 23 мая 2016, 10:03:54

Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Evgeniy1990 от 23 мая 2016, 10:03:54
Краткое описание проблемы:

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

Условия:

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
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Aleksoid1978 от 23 мая 2016, 10:16:41
Ну для начала - это не баг. Это нормальное поведение самого WASAPI движка - забрали устройство и все, звука нет. Тут скорее уже как хотелка - пытаться восстанавливать вывод после перехвата звукового устройства.
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Evgeniy1990 от 23 мая 2016, 10:25:41
Цитата: Aleksoid1978Ну для начала - это не баг. Это нормальное поведение самого WASAPI движка - забрали устройство и все, звука нет. Тут скорее уже как хотелка - пытаться восстанавливать вывод после перехвата звукового устройства.
Если точнее, то устройство просто вызвали, да, можно сказать, что забрали, но ведь при этом, оно само полностью остается свободным, незанятым ни кем. Следовательно, можно спокойно продолжать его использовать, т.е. восстанавливать, возобновлять звук, что выглядит вполне логично.
Да, вы правы, это не совсем баг, хотя и выглядит как баг, скорее уж как "фича", или же "хотелка", но мне кажется, что лучше пытаться восстанавливать и возобновлять звук, чем оставаться полностью без него.
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Aleksoid1978 от 23 мая 2016, 10:53:57
В том то и дело, если запросили устройство эксклюзивно - то все, оно становится недоступно для другого. Все другие программы его просто теряют. То что Sanear восстанавливает воспроизведение еще ни о чем не говорит.

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

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

У нас всегда используется event режим - так вот в случае потери устройства сообщения вообще перестают приходить, и мы даже не можем попытаться восстановить воспроизведение.
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Evgeniy1990 от 23 мая 2016, 11:17:33
Цитата: Aleksoid1978Так - скажу почему это работает на Sanear, для Shared режима автор использует push режим, т.е. он сам в коде "толкает" данные, в случае ошибки - видимо пересоздает доступ к устройству.

У нас всегда используется event режим - так вот в случае потери устройства сообщения вообще перестают приходить, и мы даже не можем попытаться восстановить воспроизведение.
Теперь понятно, из-за разных режимов (push и event) в коде этих двух аудио-рендереров.
Получается так, что если не изменить режим в коде, то попытаться восстановить звук мы не сможем вообще, или же существует способ при event восстанавливать данные?
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Aleksoid1978 от 24 мая 2016, 11:03:19
Навряд ли. Аудио движок никаких сообщений не шлет по этому поводу.
[merge_posts_bbcode]Добавлено: 2016-05-24 18:03:19[/merge_posts_bbcode]

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

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

Скажу сразу - это происходит не совсем плавно, т.к. у нас построен механизм в аудио-рендерер таким образом что он получает входящие данные, обрабатывает из и накапливает - и уже их них потом берет для воспроизведения. В случае если надо выполнить ре-инициализацию - происходит очистка всех накопленных данных(иначе будут проблемы). Именно поэтому при изменении настроек на лету происходит небольшой "скачок".
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Evgeniy1990 от 24 мая 2016, 13:22:41
Цитата: 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-режим, то при их закрытии звук должен сразу же восстанавливаться.
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Aleksoid1978 от 24 мая 2016, 14:17:23
Хм - а у меня восстанавливается, причем на 2-х разных машинах :)
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Evgeniy1990 от 24 мая 2016, 15:15:02
Цитата: 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, т.е. посмотреть как там будет это работать, будет восстанавливаться звук, или не будет. А все потому, что драйвера, в зависимости от операционных систем, совершенно разные. Отсюда и нельзя сразу сказать точно и наверняка, что все будет работать также аналогично и нормально. Вот поэтому и необходимы тщательные проверки.
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Aleksoid1978 от 24 мая 2016, 15:21:58
У меня на работе так же встроенный Realtek HD - и все нормально, смотрю исключительно на нем + WASAPI Exclusive.

А по поводу восстановления - нет так нет, я попытался сделать костыль. Дальше "костылить" уже не хочется.
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Evgeniy1990 от 24 мая 2016, 15:25:54
Цитата: Aleksoid1978А по поводу восстановления - нет так нет, я попытался сделать костыль. Дальше "костылить" уже не хочется.
Давайте попробуем через билд, с созданием лог-файла, решить эту проблему. Может найдем причину.
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Aleksoid1978 от 25 мая 2016, 04:30:22
Вариант №2 - https://yadi.sk/d/I6ULSivrry9Af

Проверил работу на встроенном Realtek, на USB аудио девайсе(дешевом китайском), на обоих методах синхронизации.
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Evgeniy1990 от 25 мая 2016, 06:43:49
Цитата: 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

Отсюда уже можно сказать, что дело явно не в драйверах, поскольку версия одна и та же, компоненты одни и те же.
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Aleksoid1978 от 25 мая 2016, 08:58:49
Вариант №3 - https://yadi.sk/d/68zuGbGrryF7E
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Evgeniy1990 от 25 мая 2016, 09:34:55
Цитата: Aleksoid1978Вариант №3 - https://yadi.sk/d/68zuGbGrryF7E
Проверил третий тестовый билд.

Пока по прежнему не восстанавливается звук на Windows 7.
Также заметил, что метод синхронизации "Аудио по видео" стал хуже работать, появились "щелчки".
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Aleksoid1978 от 27 мая 2016, 08:17:48
Ладно - закрываю тогда тему, т.к. это не баг.
[merge_posts_bbcode]Добавлено: 2016-05-27 13:36:25[/merge_posts_bbcode]

Вариант №4 - https://yadi.sk/d/u4A6oW6xs3Y8J

[merge_posts_bbcode]Добавлено: 2016-05-27 15:17:48[/merge_posts_bbcode]

Вот Debug билд - https://yadi.sk/d/NAnNpKOns3apA
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Evgeniy1990 от 27 мая 2016, 08:54:14
Цитата: Aleksoid1978Вариант №4 - https://yadi.sk/d/u4A6oW6xs3Y8J

Вот Debug билд - https://yadi.sk/d/NAnNpKOns3apA
В четвертом варианте звук также по прежнему не восстанавливается на более ранних операционных системах.
Прилагаю лог-файл с отладочного тестового билда: https://yadi.sk/i/BN02C3z1s3cJb
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Aleksoid1978 от 27 мая 2016, 09:49:54
Странно - по логу ничего нужного совершенно нету.
Попробуй вот так - запусти Debug билд с Shared режимом. После этого еще одну копию MPC-HC но уже с Exclusive режимом. Подожди несколько секунд - закрой вторую копию. Потом закрой Debug билд и лог в студию.
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Evgeniy1990 от 27 мая 2016, 09:58:41
Цитата: Aleksoid1978Странно - по логу ничего нужного совершенно нету.
Попробуй вот так - запусти Debug билд с Shared режимом. После этого еще одну копию MPC-HC но уже с Exclusive режимом. Подожди несколько секунд - закрой вторую копию. Потом закрой Debug билд и лог в студию.
Я так и сделал в первый раз с отладочным билдом.
Ладно, буду пробовать дальше... Попытка №2: https://yadi.sk/i/RL6uXo5Ps3gTc
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Aleksoid1978 от 27 мая 2016, 10:01:44
Кажется понял в чем может быть дело, вот пробуем - https://yadi.sk/d/vfbVlywQs3giL
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Evgeniy1990 от 27 мая 2016, 10:07:39
Цитата: Aleksoid1978Кажется понял в чем может быть дело, вот пробуем - https://yadi.sk/d/vfbVlywQs3giL
Проверил второй отладочный тестовый билд - звук не восстанавливается.
Прилагаю лог-файл с данного второго отладочного тестового билда: https://yadi.sk/i/-qRYHEI5s3hEM
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Aleksoid1978 от 27 мая 2016, 10:19:05
Очень и очень странно - я просто напросто не вижу в логе ошибок, которая случается в случае "перехвата" устройства другим приложением. Поэтому и звук не восстанавливается :)

Sanear нормально восстанавливает ??
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Evgeniy1990 от 27 мая 2016, 10:25:39
Цитата: Aleksoid1978Очень и очень странно - я просто напросто не вижу в логе ошибок, которая случается в случае "перехвата" устройства другим приложением. Поэтому и звук не восстанавливается :)

Sanear нормально восстанавливает ??

Sanear нормально и всегда восстанавливает звук.
Вот лог-файл, при использовании Sanear: https://yadi.sk/i/j-ex5-u2s3igW
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Aleksoid1978 от 29 мая 2016, 13:08:10
Да тут лог не причем - у него там своя логика.
[merge_posts_bbcode]Добавлено: 2016-05-29 20:08:10[/merge_posts_bbcode]

Вариант №5 - https://yadi.sk/d/VNVcDpKHs69Ft
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Evgeniy1990 от 29 мая 2016, 13:25:44
Цитата: Aleksoid1978Вариант №5 - https://yadi.sk/d/VNVcDpKHs69Ft
Проверил пятый тестовый билд (пятый вариант).
Вот теперь наконец-то звук, после вызова аудио устройства, или же после закрытия другого плеера, при условии, что в нем в это время работал Exclusive-режим, полностью стал восстанавливаться на Windows 7.

В общем, вам удалось разобраться с восстановлением звука на более ранних операционных системах, т.е. на системах, ниже Windows 10. :)
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: V0lt от 29 мая 2016, 20:16:12
Aleksoid1978
Таймаут в 1 секунду не мал будет для реинициализации? Не будут ли ложные срабатывания?

Не знаю какими блоками отправляет рендерер, но приходить от декодера он может довольно большими кусками (Monkey's Audio, TAK, WavPack).
Просто не такое уж частое событие реального отвала устройства. Можно и подольше подождать.
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: Aleksoid1978 от 30 мая 2016, 02:22:34
Наоборот - 1 секунда это много. Обычно период запроса данных 20 - 100мс. У нас минимальное значение периода 50мс. Все зависит от звуковухи и драйвера. И если за этот период не поступило сообщения о запросе новых данных - значит что-то пошло не так. Так что я взял с огромным запасом.

Посмотри в отладчике во время работы значение переменной m_hnsPeriod(10000 = 1мс).
Название: "WASAPI: Shared Mode" - пропадание звука [не баг, исправлено]
Отправлено: V0lt от 30 мая 2016, 06:56:39
Т.е., допустим, имея 2 секундный блок от декодера, мы все равно отдаем его кусками по 50 мс. Если так, тогда вроде нормально.

Я бы сделал побольше секунды 2 или даже 5. Зачем вообще часто теребить реинициализацию, если и устройство забрано и звук пропал? Спешить некуда, спокойно ждем, периодически пытаемся вернуть устройство.