Почему добавление рендеринга в мой график фильтра DirectShow сглаживает аудио вход в график?
-
27-10-2019 - |
Вопрос
У меня есть график фильтра DirectShow в моем приложении Delphi 6, построенный с библиотекой компонентов DSPACK. Структура графика заключается в следующем:
- Пользовательский звуковой фильтр источника Push
- Образец захвата
- Фильтр TEE (но только когда я включаю как автора файлов WAV, так и рендеринга)
- Рендерер (предпочтительное устройство вывода ПК)
- WAV -файловый писатель
Фильтр TEE добавляется на график, только если у меня есть оба Фильтры рендерера и автора WAV включены. В противном случае я подключаю только тот фильтр, который является Включите прямо к образцу Grabber.
Аудио доставляется через аудио-сервер RTSP подключенного Wi-Fi, который транслирует аудио в режиме реального времени. Если я не Включите WAV File Writer, аудио, выходящая из моих наушников, имеет типичные накачки и случайные звуки щелчков, связанные с беспрепятственным аудио -потоком. Как ни странно, как только я включаю фильтр WAV -файлов, звук становится гладким, как стекло.
У меня есть исходный код для автора файлов WAV, и он в основном обрабатывает задачи вывода подходящего заголовка файла WAV, когда это необходимо, и при необходимости написание аудио буферы, что не намного больше. Поэтому я нахожу странным, что включение его сглаживает входящий аудио -поток, тем более что он не находится вверх по течению от рендерера (фильтр), а вместо этого является фильтром, свисающим с конца фильтра тройника рядом с рендерера.
Может ли кто -нибудь сказать мне, что может произойти, чтобы заставить аудио -доставку сгладить, когда я включаю фильтр для автора файлов? Фильтр TEE делает какой -либо присущий буферизации? Я хочу дублировать тот же механизм, чтобы я мог иметь плавный звук, когда писатель файлов не включен. Я стараюсь не добавлять свою собственную буферизацию, потому что я не хочу добавлять больше задержек в аудио -поток в реальном времени, чем я должен.
Решение
Если у вас есть живой источник, и вы можете прослушать его и доставленное звук одновременно, вы можете сказать, представляет ли добавление файлового автора задержку, которая может быть подотчетна за разницу. Или может произойти изменение размера или количество согласованных буферов в DecideBufferSize
.
Я бы посоветовал ввести явную буферизацию в вашем Push Filter, например, добавление смещения к образцам носителей. Основная буферизация в фильтре тройника может быть не надежной. Различия в срок доставки неизбежны.
Более сложный подход, если вам нужно работать с минимальной или отсутствием буферизации, может быть растяжение/сжатие звука при сохранении шага.