установка временных меток для аудиосэмплов в графике DirectShow - PullRequest
2 голосов
/ 23 февраля 2011

Я разрабатываю фильтр декодера звука DirectShow для декодирования звука AC3.фильтр используется в живом графе, декодирующем TS многоадресной рассылки.демультиплексор (mainconcept) предоставляет мне демодулированные аудиоданные, но не предоставляет метки времени для семпла.

как я могу получить / вычислить правильную метку времени аудио?

Ответы [ 2 ]

2 голосов
/ 27 октября 2011

Я нашел это сообщение на форуме:

http://www.ureader.com/msg/14712447.aspx

В нем член дает следующую формулу для вычисления временных отметок для аудио, учитывая его формат (частота дискретизации, количество каналов, биты на выборку):

С аудио PCM, duration_in_secs = 8 * buffer_size / wBitsPerSample / nChannels / nSamplesPerSec или duration_in_secs = buffer_size / nAvgBytesPerSec (поскольку для аудио PCM nAvgBytesPerSec = wBitsPerSample * nChannels * nSamplesPerSec / 8).

Единственное, что вам нужно добавить, - это переменная отслеживания, которая сообщает вам, какой номер выборки в потоке, в котором вы находитесь, так что вы можете использовать его для смещения времени начала и окончания на продолжительность (duration_in_secs) при выполнении линейного потоковое видео. Для операций поиска вам, конечно, нужно знать или вычислять номер выборки в потоке.

Не забывайте, что единицы для отметок времени в DirectShow набираются как REFERENCE_TIME, длинное целое число или Int64. Каждая единица равна 100 наносекундам. Вот почему вы видите в видеофильтрах значение 10 000 000, деленное на соответствующее число кадров в секунду (FPS) для вычисления временных меток для каждого кадра, поскольку 10 000 000 равны 1 секунде в переменной REFERENCE_TIME.

1 голос
/ 27 октября 2011

Каждый кадр AC-3 встраивает данные для 6 * 256 выборок. Частота дискретизации может составлять 32 кГц, 44,1 кГц или 48 кГц (как определено в спецификации AC-3 Стандарт сжатия цифрового звука (AC-3, E-AC-3) ). Сами кадры не содержат меток времени, поэтому необходимо принять метки времени непрерывного потока и приращения соответственно. Поскольку вы упомянули, что источник работает, вам может понадобиться перенастроить временные метки при нехватке данных.

Каждый кадр AC-3 имеет фиксированную длину (которую можно определить по заголовку битового потока), поэтому вы также можете проверить, выдает ли демультиплексор один кадр AC-3 или несколько пакетов в пакете.

...