2012-04-27 1 views
0

Я пишу видеоплеер. Для аудио-части я использую XAudio2. Для этого у меня есть отдельный поток, который ждет события BufferEnd и после этого заполняет буфер новыми данными и вызывает SubmitSourceBuffer. Проблема в том, что XAudio2 (драйвер или звуковая карта) имеет огромные задержки перед воспроизведением следующего буфера, если размер буфера невелик (1024 байта). Я сделал измерения, и XAudio занимает до двух раз больше времени для игры в такой кусок. (1024 байта на 48 кГц сырой 2-канальный pcm должен воспроизводиться почти в 5 мс, но на моем компьютере он воспроизводится до 10 мс). И почти никаких задержек, если я делаю буфер 4kbytes или больше. Мне нужен такой маленький буфер, чтобы можно было синхронизировать с видеочасами или внешними часами (например, ffplay). Если я сделаю свой буфер слишком большим, то конечный пользователь услышит много шумов на выходе из-за материала синхронизации.Задержка XAudio2 с небольшим размером буфера

Также я выполнил измерения во всех моих функциях, которые декодируют и синхронизируют звук или что-либо еще, что может блокировать или производить задержки, они выполняют 0 или 1 мс для выполнения, поэтому они не являются проблемой 100%.

Кто-нибудь знает, что это может быть и почему это происходит? Может ли кто-нибудь проверить, есть ли у него такие же проблемы с задержкой с небольшим буфером?

ответ

0

Я не испытывал задержки или паузы с использованием .wav-файлов. Если вы используете формат mp3, он может добавить молчание в начале и в конце звука во время операции сжатия, что приведет к задержке воспроизведения звука. See this post для получения дополнительной информации.