2016-06-09 5 views
0

Я транслирую аудио в C# через naudio, работая в отдельном потоке, подаваемом через поточную сеть. Ввод в naudio - это поток, состоящий из 16-битных данных PCM, AAC, декодированных libfaad2 с PInvoke, поскольку я не нашел собственный C# AAC-декодер. Данные состоят из непрерывного потока, происходящего из живых источников вещания «dab plus».Ошибка несоответствия AAC и naudio

Это работает очень красиво и гладко, с одним исключением. Скорость передачи данных, сообщенная декодером AAC и naudio, не соответствует. В качестве примера, декодер libfaad2 сообщает частоту дискретизации 48000 Гц, инициализированную метаданными вещательной станции. NAudio - инициализируется с этой частотой дискретизации - генерирует исключение «Buffer full» через короткое время (30 секунд с 512000 байт за буфером), тайм-аут масштабируется линейно с размером буфера).

Опция «DiscardOnBufferOverflow» naudio не является жизнеспособным решением проблемы, поскольку она вызывает, конечно, звуковые артефакты после этого события. Когда я увеличиваю для naued сообщили о 48000 Гц на 3000, т. Е. Инициализировал naudio с частотой 51000 Гц, он работает почти за час до исключения переполнения буфера.

Я также записал трехминутный файл с naudio слева на 48 кГц, звучащий идеально.

Мой вопрос: Что может быть причиной несоответствия битрейта между naudio и AAC-декодером при потоковой передаче? Мне действительно хотелось бы узнать причину этого, так как я не хочу оставлять текущий хак.

ответ

0

Частота дискретизации измеряется в Гц, а не bps. Вы уверены, что AAC составляет 48 кГц или, может быть, 48 Кбит/с? В этом случае частота дискретизации может составлять 44,1 кГц, что может объяснить разницу.

Чтобы отладить это, я бы написал некоторые данные из libfaad2 в 48-килобайтный WAV-файл и проверил, что он играет на ожидаемой скорости.

+0

Mark, большое спасибо за ваш быстрый ответ! Извините за путаницу Hz-bps. Конечно, частота дискретизации равна Гц. Я отредактировал вопрос соответствующим образом. Система dab plus генерирует четыре возможных частоты дискретизации 16, 24, 32 и 48 кГц (см. Стандарт ETSI TS 102 563 V 1.2.1 2010 г.), используемая в метаданных потока (см. Таблицу 2 в документе). Как я писал в своем вопросе, я уже понял ваше предложение записать файл с naudio с частотой дискретизации 48 кГц: файл содержит 3 1/2 минуты идеальной классической музыки без каких-либо слышимых ошибок. – josh

+0

может ли это быть, что воспроизведение NAudio отстает и вставляет молчание, заставляя буфер медленно заполнять? Только другое объяснение, о котором я могу думать, это то, что устройство воспроизведения на самом деле не работает на частоте 48 кГц. –

+0

В случае, если naudio добавит тишину, это не будет отображаться как пробелы в потоке? И неточность в устройстве воспроизведения (новый ноутбук quadcore i7) также должна отображаться при воспроизведении файла с помощью медиаплеера Win10? Я попытаюсь записать выход aac в файл достаточного размера и передать его из этого файла в naudio в изолированном приложении. Вероятно, вы догадались, что это вопрос в реальном времени, который может указывать на правильное направление. – josh