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

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

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

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

Evgeniy1990

Проблема №7 - рассинхрон, в случае отсутствия необходимых пакетов данных.
Проявляется на видео файлах, внутри которых может отсутствовать часть данных.

Алгоритм воспроизведения:

1. Скачать данный видео файл
2. Запустить его

В итоге, во время его воспроизведения, после слов "World 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

Что значит отсутствие части данных ??
Битый ??
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]Добавлено: 2018-05-20 04:00:44[/merge_posts_bbcode]

Цитата: Aleksoid1978Битый ??
Не битый. Я вам даже напомню, в свое время, вы уже правили этот видео файл еще на прежнем варианте встроенного "MPC Audio Renderer". Раньше после данных слов было падение, а сейчас на текущем варианте встроенного "MPC Audio Renderer", после данных слов, возникает рассинхрон.
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

С каким source фильтром ??
Как поведение с другими аудио-рендерерами ??
[merge_posts_bbcode]Добавлено: 2018-05-20 11:40:13[/merge_posts_bbcode]

На какое время обратить внимание, когда там эти слова появляются ??

[merge_posts_bbcode]Добавлено: 2018-05-20 14:47:05[/merge_posts_bbcode]

Пробуем - https://yadi.sk/d/BnT09O-H3WDeAa
Ну и сразу погонять на других файлах, перемотку проверить и A/V синхронизация.
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С каким source фильтром ??
С любым фильтром-источником (LAV Splitter Source/WM ASF Reader + MPC Audio Decoder + MPC Audio Renderer)
Цитата: Aleksoid1978Как поведение с другими аудио-рендерерами ??
С DirectSound нет рассинхрона, но зато есть небольшой затуп (обрыв), который дублируется (воспроизводится два раза). Звук начинается, затем прерывается, а после снова возобновляется (восстанавливается).
Цитата: Aleksoid1978На какое время обратить внимание, когда там эти слова появляются ??
В самом начале воспроизведения видео файла, после четвертой секунды. После седьмой секунды начинается рассинхрон.
Цитата: Aleksoid1978Пробуем - https://yadi.sk/d/BnT09O-H3WDeAa
Ну и сразу погонять на других файлах, перемотку проверить и A/V синхронизация.
Проверил тестовый билд. Рассинхрона больше нет, при использовании "MPC Audio Renderer", но поломалось все остальное - это перемотка и скорость воспроизведения.

1. При перемотке наблюдаются очень сильные задержки и всегда идут пропуски кадров.
2. При ускоренном/замедленном воспроизведении всегда присутствуют очень сильные задержки и зависания кадров, частота кадров не успевает вовремя измениться, отчего и возникает зависание (ступор)

Также, при использовании связки: "MPC Audio Decoder" + "DirectSound Audio Renderer" присутствует небольшой затуп (обрыв) в одном моменте после 7-ой секунды. Звук начинается, сразу обрывается, а после - восстанавливается.

В общем, я точно выяснил, что тут проблема заключается именно в нашем текущем встроенном "MPC Audio Decoder".

1. "LAV Splitter Source/WM ASF Reader" + "MPC Audio Decoder" + "MPC Audio Renderer" - есть рассинхрон на данном WMV.
2. "LAV Splitter Source/WM ASF Reader" + "MPC Audio Decoder" + "DirectSound Audio Renderer" - есть дублирующий затуп на данном WMV.

Если заменить его на LAV Audio Decoder, то получается следующее:

1. "LAV Splitter Source/WM ASF Reader" + "LAV Audio Decoder" + "MPC Audio Renderer" - нет рассинхрона на данном WMV.
2. "LAV Splitter Source/WM ASF Reader" + "LAV Audio Decoder" + "DirectSound Audio Renderer" - нет дублирующего затупа на данном WMV.

Т.е. правки и корректировки нужно вносить не во встроенный "MPC Audio Renderer", а во встроенный "MPC Audio Decoder".

P.S. Небольшой затуп (обрыв) звука на "DirectSound Audio Renderer" как раз и говорит нам о том, что проблема (баг) именно в нашем встроенном "MPC Audio Decoder".

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

Но наш текущий "MPC Audio Renderer" тоже ведет себя с одной стороны правильно, с другой стороны - если в видео файлах будут пустые данные, будет отсутствовать часть данных, или если некий фильтр-источник некорректно работает и обрабатывает данные, то тут будут два варианта: первый - рассинхрон, второй - резкая перемотка видео кадров вперед. И если первый не представляет серьезную критическую угрозу, то в случае со вторым вариантом, тут может возникнуть падение плеера, или же падение звукового драйвера. Например, на ASUS Xonar DG, после некорректной работы плеера и падения звукового драйвера, в самой операционной системе звучит просто страшный гул и треск, вроде таких: "РРРРРРРРРРРРРРРРРРРР...", или "НННННННННННННННН...".
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

Ну хз-хз. Перемотка(как и изменение скорости) - одинаковое поведение что на нашем декодер, что с LAV Audio.
То что данный момент пролетает на LAV Audio незаметно - есть такое. Но в этом нет ничего страшного. Ну дернуло разок. Есть нюансы с данными(прилетает слишком большой блок).
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Ну хз-хз. Перемотка(как и изменение скорости) - одинаковое поведение что на нашем декодер, что с LAV Audio.
То что данный момент пролетает на LAV Audio незаметно - есть такое. Но в этом нет ничего страшного. Ну дернуло разок. Есть нюансы с данными(прилетает слишком большой блок).
Да, только при использовании "LAV Audio Decoder" и рассинхрона нет. А с нашим "MPC Audio Decoder", в паре со встроенным "MPC Audio Renderer" - он есть.

И еще раз скажу, что именно в данном тестовом билде поломалась корректная работа перемотки и скорости воспроизведения. Поломки только в данном тестовом билде.
[merge_posts_bbcode]Добавлено: 2018-05-20 09:13:38[/merge_posts_bbcode]

Я соглашусь с вашими словами - "есть нюансы с данными", однако они появились именно в текущем "MPC Audio Decoder", в более раннем варианте "MPC Audio Decoder" - их не было.
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

Я не наблюдаю никаких проблем ни с перемоткой, ни с изменением скорости - на тестовом билде. Да - на "проблемном участке" просто идет пропуск ~10 кадров, это необходимо. А то что с LAV Audio это не наблюдается - просто он выделяет буфер под данные с большим запасом. Мы же нет(v0lt не захотел делать много). Так что закрываем данную тему с этим .wmv файлом.
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Я не наблюдаю никаких проблем ни с перемоткой, ни с изменением скорости - на тестовом билде. Да - на "проблемном участке" просто идет пропуск ~10 кадров, это необходимо. А то что с LAV Audio это не наблюдается - просто он выделяет буфер под данные с большим запасом. Мы же нет(v0lt не захотел делать много). Так что закрываем данную тему с этим .wmv файлом.
Подождите пожалуйста с закрытием данной темы. Так что решили по поводу рассинхрона?  
В тестовом билде нет рассинхрона, при воспроизведении данного видео файла. А вот на некоторых других видео файлах, других форматах я отчетливо наблюдаю разницу в работе перемотки и скорости воспроизведения. Сделаю тогда видеозаписи для вас, чтобы было видно наглядно.
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

V0lt

Я не понял. В файле звук пропадает на 3 секунды и более?

PS: стандартный буфер в сплиттере 3 секунды, но при "острой" необходимости можно поднять до 10 секунд.

Aleksoid1978

Не-не, ошибка именно в рендерере. Дело в том что в текущей версии(SVN) при вызове BeginFlush()/EndFlush() рендерер очищает буферы данных и обнуляет текущие временные метки. Вот из-за обнуления временных меток и получаем тишину. А по правильному - это делать надо только после перемотке(вызов NewSegment()), что я и сделал в тестовом билде. Я просто когда писал рендерер - "забыл" что flush может быть вызван во время проигрывания. Так что мои изменения в тестовом билде - корректные, и никаких проблем с перемоткой из-за этого не должно быть.
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Не-не, ошибка именно в рендерере. Дело в том что в текущей версии(SVN) при вызове BeginFlush()/EndFlush() рендерер очищает буферы данных и обнуляет текущие временные метки. Вот из-за обнуления временных меток и получаем тишину. А по правильному - это делать надо только после перемотке(вызов NewSegment()), что я и сделал в тестовом билде. Я просто когда писал рендерер - "забыл" что flush может быть вызван во время проигрывания. Так что мои изменения в тестовом билде - корректные, и никаких проблем с перемоткой из-за этого не должно быть.
Попробуйте увеличить скорость в своем тестовом билде, после открытия данного WMV. Вы убедитесь, что наблюдается зависание.
[merge_posts_bbcode]Добавлено: 2018-05-20 13:29:42[/merge_posts_bbcode]

Заливаю видео файлы для проверки и сравнения скорости воспроизведения.
Ссылка на примеры видео файлов.

Сравните скорость воспроизведения в своем тестовом билде и в SVN-билде.

Что нужно сделать:

1. Скачать каждый видео файл
2. Запустить каждый видео файл
3. Во время их воспроизведения, увеличить скорость воспроизведения на 1.2х

В итоге, в тестовом билде, сначала будет небольшая перемотка (скачок вперед) с пропусками кадров, особенно заметно на MP4-видео файлах, после чего, ускоренное воспроизведение нормализуется.

Так вот, в SVN этого скачка перемотки вперед, в момент увеличения скорости воспроизведения, -  нет и правильно, что нет, его быть не должно. Но тем не менее, он присутствует в вашем тестовом билде.
[merge_posts_bbcode]Добавлено: 2018-05-20 13:32:34[/merge_posts_bbcode]

Весь этот алгоритм необходимо выполнять при наличии использования встроенного "MPC Audio Renderer".
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-05-20 20:47:55[/merge_posts_bbcode]

Да уж, этот гребанный DirectShow - наворотили столько всего.
https://yadi.sk/d/w_wEx4tq3WETTw
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

Цитата: Aleksoid1978https://yadi.sk/d/w_wEx4tq3WETTw
Проверил второй тестовый билд.

Результаты:

1. Рассинхрон на WMV-видео, при использовании "MPC Audio Renderer", исправлен.
2. Скорость воспроизведения на различных видео файлах, при использовании "MPC Audio Renderer", исправлена.
3. Скорость воспроизведения на различных видео файлах, при использовании "DirectSound Audio Renderer" - не исправлена.
При изменении скорости воспроизведения, при использовании "DirectSound Audio Renderer", любой видео файл воспроизводится рывками, при этом, частота кадров скачет.

По поводу третьего пункта - очень интересная и в то же время странная проблема. Поясняю:

Рывки кадров, во время ускоренного/замедленного воспроизведения видео файлов, при использовании "DirectSound Audio Renderer" проявляются только если в графе фильтров присутствует аудио процессор AC3Filter.

Что интересно, если используется связка фильтров "AC3Filter" + "MPC Audio Renderer", где "AC3Filter" выступает в качестве аудио процессора, то никаких рывков кадров, при ускоренном/замедленном воспроизведении, во втором тестовом билде нет.

Вот так странность...
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.