Почему добавление рендеринга в мой график фильтра DirectShow сглаживает аудио вход в график?

StackOverflow https://stackoverflow.com/questions/8844063

Вопрос

У меня есть график фильтра DirectShow в моем приложении Delphi 6, построенный с библиотекой компонентов DSPACK. Структура графика заключается в следующем:

  • Пользовательский звуковой фильтр источника Push
  • Образец захвата
  • Фильтр TEE (но только когда я включаю как автора файлов WAV, так и рендеринга)
  • Рендерер (предпочтительное устройство вывода ПК)
  • WAV -файловый писатель

Фильтр TEE добавляется на график, только если у меня есть оба Фильтры рендерера и автора WAV включены. В противном случае я подключаю только тот фильтр, который является Включите прямо к образцу Grabber.

Аудио доставляется через аудио-сервер RTSP подключенного Wi-Fi, который транслирует аудио в режиме реального времени. Если я не Включите WAV File Writer, аудио, выходящая из моих наушников, имеет типичные накачки и случайные звуки щелчков, связанные с беспрепятственным аудио -потоком. Как ни странно, как только я включаю фильтр WAV -файлов, звук становится гладким, как стекло.

У меня есть исходный код для автора файлов WAV, и он в основном обрабатывает задачи вывода подходящего заголовка файла WAV, когда это необходимо, и при необходимости написание аудио буферы, что не намного больше. Поэтому я нахожу странным, что включение его сглаживает входящий аудио -поток, тем более что он не находится вверх по течению от рендерера (фильтр), а вместо этого является фильтром, свисающим с конца фильтра тройника рядом с рендерера.

Может ли кто -нибудь сказать мне, что может произойти, чтобы заставить аудио -доставку сгладить, когда я включаю фильтр для автора файлов? Фильтр TEE делает какой -либо присущий буферизации? Я хочу дублировать тот же механизм, чтобы я мог иметь плавный звук, когда писатель файлов не включен. Я стараюсь не добавлять свою собственную буферизацию, потому что я не хочу добавлять больше задержек в аудио -поток в реальном времени, чем я должен.

Это было полезно?

Решение

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

Я бы посоветовал ввести явную буферизацию в вашем Push Filter, например, добавление смещения к образцам носителей. Основная буферизация в фильтре тройника может быть не надежной. Различия в срок доставки неизбежны.

Более сложный подход, если вам нужно работать с минимальной или отсутствием буферизации, может быть растяжение/сжатие звука при сохранении шага.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top