2013-06-16 4 views
0

저는 일종의 라이브 비디오 스트리밍 응용 프로그램을 만들고 다양한 라이브러리를 사용하고 있습니다. 나는 들어오는 오디오 스트림을 풀기 위해 NAudio을 사용하고 있습니다. 나는 토론 게시판에서 this 스레드를 발견했습니다.라이브 오디오 스트림이 지연됩니다.

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); 
     } 
    } 

내 문제는 오디오가 약간 지연된다는 것입니다. 그다지 당연하지만 그 눈에 띄는 것은 아니지만 거의 완벽하게 사는 비디오 피드와 동기화하여 더 많은 것을 얻을 수 있기를 바랄 수 있습니다.

추가 정보 AudioClient 나를 보내 넥트 카메라 데이터를받을 수 있습니다 Kinect Service에서입니다.

답변

1

처리중인 문제를 대기 시간이라고합니다. 이 시스템에는 대기 시간의 두 가지 원인이 있습니다. 첫 번째는 레코드 버퍼의 크기입니다. Kinect는 오디오 버퍼를 채운 다음 AudioFrameReady 이벤트를 발생시킵니다. 버퍼 크기 (밀리 초)가 클수록 지연 시간은 길어집니다. Kinect가이 버퍼의 크기를 최소화하는 옵션을 제공하는지 여부는 알 수 없습니다.

그러면 재생면에 더 많은 버퍼링이 있습니다. NAudio의 WaveOut 기본 설정은 각각 100ms의 두 버퍼입니다. 하나는 다른 하나가 채워지는 동안 재생됩니다. 이 값은 매끄러운 재생을 위해 선택되며 버퍼가 너무 작아서 재생이 더듬어 질 수 있습니다. 그러나 완전히 구성 가능하므로 재생이 중단되기 전까지 WaveOut 버퍼 크기를 줄이는 것이 좋습니다.

관련 문제