WASAPI рендерер - периодический дроп пакетов. [Исправлено]

Автор Aleksoid1978, 11 апреля 2018, 14:18:53

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

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

Aleksoid1978

Собственно недавно столкнулся с данной проблемой - изначально пользователь с дум9 сообщил о периодическом дропе данных при битстриме. Начал ковырять - и оказывается что не только при битстриме. Периодичность - раз в 5 - 20 минут. Дроп происходит по причине того что во время проигрывания накапливается разница между временем пакетов и "системными часами". Причина мне совершенно не ясна - ну хоть убей(т.к. пакеты обрабатываются не в реальном времени - а накапливаются в очередь, т.е. это не нехватка данных 100%, в момент дропа в очереди еще есть данные).

Просьба проверить у себя кто может. Запускаете билд и просто смотрите/ждете. При дропе пакета - создастся лог-файл на рабочем столе.

https://yadi.sk/d/ovRYpAL63UKAhj

P.S. Проверял только в эксклюзивном режиме.
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

V0lt

Вопросы:
1. На какие форматы следует обратить внимание?
2. Если ли смысл проверять на рендерере DirectSound?
3. Настройка аудиодекодера. Включена или выключена странная опция "Корректировка A/V синхронизации"?
4. Настройка аудиорендерера. Какой метод синхронизации использовать?

Evgeniy1990

Цитата: Aleksoid1978Просьба проверить у себя кто может. Запускаете билд и просто смотрите/ждете. При дропе пакета - создастся лог-файл на рабочем столе.

https://yadi.sk/d/ovRYpAL63UKAhj

P.S. Проверял только в эксклюзивном режиме.
А есть ли у вас конкретные сэмплы, или видео файлы на которых 100% проявляется этот дроп пакетов?
Ибо у себя я ни разу не замечал никаких дропов, при том что я постоянно использую 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.

V0lt

Aleksoid1978
Вот что у меня получилось при отправке AC3 по HDMI на ТВ.
2018.04.11 21:16:24.216 : CMpcAudioRenderer::RenderWasapiBuffer() - Drop packet, size = 6144, dueTime = 8488960000, refclock = 8489290000(diff = 330000)
2018.04.11 21:37:05.495 : CMpcAudioRenderer::RenderWasapiBuffer() - Drop packet, size = 6144, dueTime = 20901760000, refclock = 20902090000(diff = 330000)
PS: Сам ТВ был отключен, но это не мешает компу его видеть (особенность моего ТВ). В общем получил два дропа на 16-й и 37-й минутах просмотра (начало воспроизведения примерно в 21:01).

Aleksoid1978

Да вот именно так он выглядит. На PCM тоже самое, может просто интервал больше.
[merge_posts_bbcode]Добавлено: 2018-04-12 09:59:52[/merge_posts_bbcode]

А вот что интересно - на работе, с выводом на обычные наушники со звуковухи(в отличии от дома - там вывод по HDMI на телек/монитор) пока не смог поймать "дроп".
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

V0lt

Поясни, что такое dueTime.

Есть ли разница при воспроизведении MKV, DVD, BD?

Aleksoid1978

dueTime - время начала текущих данных(оно может быть больше времени начала текущего пакета - из-за того что часть данных из пакета уже обработались).
Формат не важен - хоть mkv, хоть BD
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

Прогнал ваш тестовый билд. Получил лог-файл с дропом пакетов.

2018.04.12 08:41:33.630 : CMpcAudioRenderer::RenderWasapiBuffer() - Discontinuity detected by -520.63 ms
2018.04.12 08:41:33.630 : CMpcAudioRenderer::RenderWasapiBuffer() - Correct reference clock by -520.63 ms
2018.04.12 08:41:33.630 : CMpcAudioRenderer::RenderWasapiBuffer() - Drop packet, size = 1672, dueTime = 2328167082, refclock = 2333150000(diff = 4982918)

2018.04.12 08:45:26.743 : CMpcAudioRenderer::RenderWasapiBuffer() - Discontinuity detected by -502.04 ms
2018.04.12 08:45:26.744 : CMpcAudioRenderer::RenderWasapiBuffer() - Correct reference clock by -502.04 ms
2018.04.12 08:45:26.744 : CMpcAudioRenderer::RenderWasapiBuffer() - Drop packet, size = 7440, dueTime = 2319799791, refclock = 2324630000(diff = 4830209)

Интересно то, что визуально никак это даже не увидеть. Ни за что не догадаться, что вообще есть какие-то там дропы пакетов.
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]Добавлено: 2018-04-12 19:26:40[/merge_posts_bbcode]

И самое что интересное - если убрать этот дроп, то со временем будет накапливаться рассинхронизация. Да - очень медленно, но будет. А вот на работе нет такого, сегодня более часа проигрывания и все ок.

[merge_posts_bbcode]Добавлено: 2018-04-12 23:53:24[/merge_posts_bbcode]

Очередной тестовый билд - в нем кое что изменил именно для бистрима(ну так, для тестов).
https://yadi.sk/d/CnPLkVxg3UMWj5

Т.к. со временем нарастает разница и возникает дроп - я при бистриме просто корректирую системные часы под аудио-данные. Если есть возможность - погонять и понаблюдать за видео-картинкой, нет ли рывков или еще чело ли.

[merge_posts_bbcode]Добавлено: 2018-04-14 10:04:52[/merge_posts_bbcode]

Вообщем я переделываю систему работу с "часами" - сам аудио-рендерер будет выступать в роли часов(а не как сейчас - подстраиваться под системные). Опцию выбора синхронизации уберу - аудио данные всегда будут выступать за источник времени.
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

V0lt

Цитата: Aleksoid1978Опцию выбора синхронизации уберу - аудио данные всегда будут выступать за источник времени.
Круто!

Aleksoid1978

Вроде бы получилось переделать, но пока остались нюансы - плохо стартует после паузы и освобождения устройства, после длительного прожатия плей/пауза.
[merge_posts_bbcode]Добавлено: 2018-04-15 19:16:02[/merge_posts_bbcode]

Предлагаю тестовый билд - https://yadi.sk/d/yQMMAgxB3URVs8
Единственное что - не проверял в нем(и наверняка некорректно будут работать) смена настроек/устройства, потеря устройства(в случае использования Shared режима). Но основное все должно работать корректно.
Опция выбора синхронизации ессно игнорируется.

[merge_posts_bbcode]Добавлено: 2018-04-16 16:26:04[/merge_posts_bbcode]

Новая версия - https://yadi.sk/d/UpfUpIRi3USdrS
Работает вроде бы все что должно, но при реинициализации устройства присутствует небольшой рывок видео.

Просьба погонять по разному и потом отписаться.
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Предлагаю тестовый билд - https://yadi.sk/d/yQMMAgxB3URVs8
Единственное что - не проверял в нем(и наверняка некорректно будут работать) смена настроек/устройства, потеря устройства(в случае использования Shared режима). Но основное все должно работать корректно.
Опция выбора синхронизации ессно игнорируется.х.
Прогнал вчера ваш первый данный тестовый билд. Все верно, при переключении звуковых устройств на лету, во время воспроизведения, происходит мертвое зависание, как на Exclusive, так и на Shared-режимах. В остальном все работает нормально.  
Цитата: Aleksoid1978Новая версия - https://yadi.sk/d/UpfUpIRi3USdrS
Работает вроде бы все что должно, но при реинициализации устройства присутствует небольшой рывок видео.

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

В общем, ваши изменения/исправления полностью удались и работают просто превосходно! ;)
[merge_posts_bbcode]Добавлено: 2018-04-16 11:10:47[/merge_posts_bbcode]

Продолжаю тщательную прогонку...

[merge_posts_bbcode]Добавлено: 2018-04-16 11:19:42[/merge_posts_bbcode]

Раньше, до ваших изменений и переделок, были методы синхронизации, которые, согласно последним тестам и последним всем массовым изменениям, до ваших новых переделок, влияли лишь на некоторые аудио форматы, например на "True-HD", или "DTS-HD MA", включающие "Core".

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

Под "нормально" имеется в виду то, что отсутствуют рывки аудио потоков.

Из своих прошлых тестовых, прежних пометок я нашел следующее:

DTS HD MA Core (Sync Method\'s WASAPI in MPC Audio Renderer):

Sync Method:

Sync Audio to Video - прерывистый звук
Sync Video to Audio - нормальный звук
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В тестовых билдах есть метод синхронизации, и это видео к аудио. Поэтому ессно никаких рывков в аудио не может быть.)
А, ясно, значит все-таки теперь остался только один метод синхронизации из двух и это "Видео по аудио".
Тогда понятно, почему звук на некоторых форматах полностью нормальный, без рывков.
Цитата: Aleksoid1978По поводу переключения на лету и изменения настроек - есть короткие рывки видео, это заметно при включенной статистике(смотреть на линии графа
В моем случае только красная линия заметно, но незначительно слегка съехала вниз.
[merge_posts_bbcode]Добавлено: 2018-04-16 11:42:10[/merge_posts_bbcode]

Хотя нет, если переключать звуковые устройства на лету, то обе линии и зеленая и красная становятся заметно искривленными, а вот если переключать режимы 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

Я же говорил что есть рывки. Сейчас задача моя от них избавиться :)
[merge_posts_bbcode]Добавлено: 2018-04-16 19:38:00[/merge_posts_bbcode]

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

Кто что думает ??
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