MPC Audio Renderer, LAV Filters и внешнее аудио

Автор Lord_D, 25 ноября 2018, 09:19:14

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

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

Lord_D

Если для декодирования используются LAV Filters (все встроенные фильтры отключены), в качестве аудио-рендерера выбран MPC Audio Renderer и установлена галка "Всегда использовать внешние аудио-файлы как основные", то при открытии видео с внешним аудио плеер не начинает воспроизведение. То есть, состояние плеера меняется на "Воспроизведение", но ничего не выводится. Если при этом перемотать видео, плеер зависнет.
Вывести плеер из этого состояния можно выбрав встроенное аудио. После этого воспроизведение начинается. Теперь можно выбрать внешнее аудио - всё будет нормально.

С аудио-рендерером DirectSound баг не воспроизводится. Там воспроизведение начнётся сразу с внешним аудио.

Обязательным условием является то, чтобы и сплиттер и оба декодера аудио (и внешнего, и встроенного) были LAV. Если хотя бы один декодер будет встроенным в MPC-BE, то бага не будет. Также обязательно, чтобы стояла галка "Всегда использовать внешние аудио-файлы как основные". Если первым будет запущен встроенный поток аудио, то бага также не будет.

Воспроизводится на связках форматов mkv+mka, mp4+aac, mkv+aac, mp4+mka.

Воспроизводится на всех версиях (замечен ещё на версиях 1.3.*). Тестировалось на MPC-BE 1.5.3 (build 4197) beta x64.
Что интересно, баг воспроизводится с Sanear Audio Renderer.
LAV Filters 0.73.1.
Windows 7 SP1 x64.

Видео процесса воспроизведения бага и тестовые наборы: https://www.mediafire.com/file/paidnvokj43n3sy/

Aleksoid1978

Проверил на матроске + mp3 - все отлично, аудио декодер - LAV Audio.

Тестовые наборы тоже проверил - все отлично. Правда я и использую только встроенные фильтры - ну кроме LAV Audio для данного момента.


P.S. А если такое только с LAV - вопросы к его автору. Мы не сможем в любом случае узнать причину, где-то не стартует в Source возможно.
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

Lord_D

Важно, чтобы все встроенные фильтры были отключены, включая сплиттер. С одним лишь декодером аудио от LAV ошибки не будет. Воспроизводится ли ошибка у вас в этом случае? Проверьте на mkv+mka. С mp3 ошибка может и не повторяться, она происходит не со всеми форматами.

Возможно что ошибка и в LAV, но хотелось бы хотя бы понять, что именно происходит. Если я напишу ему не зная ничего, он ответит, что ошибка в MPC-BE.

Плюс, то, что ошибка не повторяется с рендерером DirectSound, наводит на мысли, что дело не в LAV.

Aleksoid1978

Ну как это не в LAV, если именно с ними(фильтрами) не стартует. То что в связке это понятно. Завтра покопаюсь немного в отладчике, посмотрю - может что и пойму.
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

Lord_D

Благодарю.

Я зарегистрировал фильтры из архива MPC-BE standalone filters той же версии, что указана в первом сообщении, и попытался повторить ситуацию в GraphStudio. Вот что получилось:

Так работает:
https://imgur.com/H1IB0hH
https://imgur.com/iCr2hXP
https://imgur.com/vRyQjb4 (выбран первый поток)
https://imgur.com/64RePLW (у каждого собственный рендерер)

А так нет: https://imgur.com/0Ksh3ya (выбран второй поток)
То есть, проблема либо в LAV (но тогда почему работают отдельные потоки или когда выбран первый поток?), либо в MPC Audio Switcher.

Вариант, когда оба потока отправляются в собственные MPC Audio Renderer навёл меня на мысль отключить Audio Switcher, но, как оказалось, в BE такой опции нет (в HC была).
Но я сделал это (включил второй вывод): https://imgur.com/vqr7xDr и.. так почему-то всё работает нормально.

Надеюсь, эта информация поможет вам разобраться.

Aleksoid1978

Не смог воспроизвести. Даже если фильтры LAV - все гуд. Правда я использую в 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

V0lt

У меня тоже все норм.

1. Какая звуковая карта?
2. Какие настройки в аудиорендерере?
3. Какие  настройки в "Обработке звука"?

Lord_D

Звуковая встроенная, Realtek High Definition Audio. Версия драйвера 6.0.1.8186 (последняя, на сайте Realtek значится как 2.82).
Настройки вывода звука: https://imgur.com/7SFCL9D (не влияют)
Настройки аудио: https://imgur.com/GxvaFte (баг исчезает, если включить второй вывод и выбрать там любой рендерер, даже Null)
Настройки аудиорендерера: https://imgur.com/XTvfdFS (не влияют, с Exclusive баг есть)
Обработка звука: https://imgur.com/kgI0jGT (ни одна опция не влияет)

Повторил на ноутбуке в этой же версии MPC-BE.
Но повторяемость не 100%-я, иногда всё нормально. На десктопе повторяется всегда.
Отличие, которое могу назвать - процессор Intel Core i3-380M. На десктопе - AMD Phenom II X6 1100T. Возможно баг не повторяется на новых/быстрых процессорах? Какое-нибудь состояние гонки.
Видеокарта на обоих машинах - Radeon (разных моделей), у которой есть своё аудиоустройство HDMI, но оно не отображается в выборе устройств в плеере, т.к. не подключен провод.

ПО ноутбука:
Тот же Windows 7 SP1 x64, только без обновлений системы за последние года три.
Драйвер на звуковую также старый.
Старый LAV Filters 0.65.

UPD. По непонятной причине баг перестал проявляться с Sanear. Возможно после установки новой версии драйверов на звуковую.
Теперь он есть только с MPC Audio Renderer.

UPD2. Почему-то не получается соединить в GraphStudio MPC-HC AudioSwitcher и ваш MPC Audio Renderer. С другими рендерерами соединяется без проблем.

UPD3. Вероятно, выяснил причину, почему баг не всегда повторяется на ноутбуке - дело в медленном жёстком диске и малом объёме оперативной памяти. Когда файл открывается в первый раз и ещё не попал в кэш в оперативной памяти, баг не проявляется. При повторном открытии того же файла (нажать stop и снова play) баг проявляется. Повторил это на десктопе открыв видео сразу после перезагрузки компьютера. На десктопе 16 ГБ памяти и кэш хранится очень долго. Поэтому баг повторяется каждый раз, даже между перезапусками плеера.
Так что здесь точно какое-то состояние гонки. Возможно ли собрать такую тестовую сборку, где бы потоки из разных файлов запрашивались по-очереди, с задержкой?

Aleksoid1978

На работе так же не смог воспроизвести )) Даже и не знаю чем помочь.

Ну и напрашивается вопрос - для чего нужен LAV все фильтры. Ну ладно Source для MKV + linked, ладно LAV Video для DXVA2 Copy-back или CUVID. Но 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

Lord_D

Выполнены все пункты?
[list=*]
  • Все встроенные фильтры отключены (сейчас проверил - видео тоже должно быть LAV, со встроенным не повторяется)[/*]
  • Аудио-рендерер MPC Audio Renderer[/*]
  • Установлена галка "Всегда использовать внешние аудио-файлы как основные"[/*]
После этого плеер следует перезапустить.

Вы сами назвали два преимущества LAV. Плюс к этому, там новые форматы появляются быстрее. Стабильная версия MPC-BE обновляется редко.

У меня осталось два вопроса:
[list=*]
  • Почему не повторяется с другими аудио-рендерами?[/*]
  • Возможно ли собрать такую тестовую сборку, где бы потоки из разных файлов запрашивались с задержкой?[/*]

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

Lord_D

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

Aleksoid1978

Такое можно отловить только сидя в отладчике. Но и то - если проблемы на стороне LAV(пусть и из-за MPC Audio Renderer) - поможет только сидеть в отладчике в коде LAV :)

Добавлено: 2018-11-26 19:15:02

И вопрос - какие такие форматы появляются раньше ?? Те которые 99.9% пользователей не нужны ...
По видео ещё могу согласиться. А вот аудио декодер ничем не лучше нашего.
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

judelaw

Цитата: Lord_DВыполнены все пункты?
[list=*]
  • Все встроенные фильтры отключены (сейчас проверил - видео тоже должно быть LAV, со встроенным не повторяется)[/*]
  • Аудио-рендерер MPC Audio Renderer[/*]
  • Установлена галка "Всегда использовать внешние аудио-файлы как основные"[/*]
После этого плеер следует перезапустить.

Словить баг не удалось. вин10

Update:

Словил баг на вин7. Иногда не с первого раза, но как правило да, не запускается

Lord_D

Повторил баг в MPC-HC 1.8.3 (тот, который форк от clsid2).
[list=*]
  • Выбираем в настройках вывода "Встроенный рендер аудио" (который на самом деле Sanear).[/*]
  • Перезапускаем плеер.[/*]
  • Открываем файл с внешним аудио.[/*]
  • Выбираем внешнее аудио (HC не умеет выбирать его автоматически, поэтому там баг сложнее поймать).[/*]
  • Перематываем куда-нибудь в середину. Воспроизведение не останавливаем.[/*]
  • Перематываем в самое начало, причём перетаскиванием вдоль полоски прогресса с зажатой кнопкой мыши от большего времени к меньшему (так, чтобы подряд произошло несколько перематываний).[/*]
  • Плеер зависает.[/*]
В MPC-BE этот метод тоже срабатывает (там и нашёл).

Не подумайте, что я вот уже несколько дней выискиваю способы повторить баг :). Нашёл совершенно случайно, когда смотрел фильм. До этого решил попробовать Sanear и включил его.

Общего в этих случаях только LAV и WASAPI. И раз баг не повторяется на Win10, как указал уважаемый judelaw, я допускаю, что проблема может быть даже и в WASAPI. Придётся и дальше пользоваться DirectSound.

Благодарю Aleksoid1978 и V0lt за посильную помощь.
Тему предлагаю оставить. Вдруг найдётся герой, который сможет исправить баг.