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