2013-06-16 3 views
0

Я создаю своеобразное приложение для потокового видео и использую несколько разных библиотек. Я использую NAudio для распаковки аудиопотока по мере его поступления. Я нашел на своих досках объявлений this поток, который я использовал так;Live Audio Stream задерживается

BufferedWaveProvider mybufferwp = null; 
    WaveOut wo = new WaveOut(); 
    WaveFormat wf = new WaveFormat(16000, 1); 

    void MainWindow() 
    { 
    _audioClient = new AudioClient(); 
    _audioClient.AudioFrameReady += _audioClient_AudioFrameReady; 
    _audioClient.Connect(parent.TempIp, parent.AudioPort); 

    mybufferwp = new BufferedWaveProvider(wf); 
    mybufferwp.BufferDuration = TimeSpan.FromMinutes(5); 
    wo.Init(mybufferwp); 
    wo.Play(); 
    } 

    void _audioClient_AudioFrameReady(object sender, AudioFrameReadyEventArgs e) 
    { 
     if (mybufferwp != null) 
     { 
      mybufferwp.AddSamples(e.AudioFrame.AudioData, 0, e.AudioFrame.AudioData.Length); 
     } 
    } 

Моя проблема заключается в том, что звук слегка задерживается. Не очень много, но это было заметно, и я надеялся, что может быть что-то, что я мог бы сделать, чтобы синхронизировать его с моим видеороликом, который почти идеально жив.

Extra Info AudioClient от Kinect Service, который позволяет мне отправлять и получать Kinect Данные камеры.

ответ

1

Проблема, с которой вы имеете дело, называется латентностью. В этой системе есть два источника латентности. Первый - это размер буфера записи. Kinect будет заполнять буфер аудио, а затем поднимать его событие AudioFrameReady. Чем больше размер буфера (в миллисекундах), тем дольше будет задержка. Я не знаю, дает ли Kinect возможность минимизировать размер этого буфера.

Затем на стороне воспроизведения больше буферизации. Настройка по умолчанию для Uudio для WaveOut - это два буфера по 100 мс каждый - один воспроизводится, пока другой заполняется. Это значение выбирается для плавного воспроизведения - слишком мало буферов, и воспроизведение может заикаться. Тем не менее, он полностью настраивается, поэтому я предлагаю уменьшить размеры буфера WaveOut до тех пор, пока воспроизведение не начнет разрушаться.