2012-04-27 3 views
0

비디오 플레이어를 쓰고 있습니다. 오디오 부분에 대해서는 XAudio2를 사용하고 있습니다. 이를 위해 BufferEnd 이벤트를 기다리고있는 별도의 스레드가 있으며 새 데이터로 버퍼를 채우고 SubmitSourceBuffer를 호출합니다. 버퍼 크기가 작 으면 (1024 바이트) XAudio2 (드라이버 또는 사운드 카드)에 다음 버퍼를 재생하기 전에 막대한 지연이 발생합니다. 나는 측정을했고 XAudio는 그러한 덩어리를 재생할 때 최대 2 배의 시간이 걸린다. (48khz 원시 2 채널 pcm의 1024 바이트 청크는 거의 5ms 내에서 재생되어야하지만 내 컴퓨터에서는 10ms까지 재생됩니다). 그리고 버퍼를 4kbytes 이상 만들면 거의 지연이 없습니다. 비디오 클럭 또는 외부 클럭 (예 : ffplay와 동일)과 동기화 할 수있는 작은 버퍼가 필요합니다. 내 버퍼를 너무 크게 만들면 최종 사용자는 동기화 작업으로 인해 출력에 많은 소음이 들립니다.버퍼 크기가 작은 XAudio2 지연

또한 오디오를 디코딩하고 동기화하거나 지연을 유발할 수있는 모든 기능을 측정 했으므로 실행에 0 또는 1ms가 걸리므로 문제가 100 %되지 않습니다.

누구에게 무엇이 될 수 있는지, 왜 그것이 일어 났는지를 아는 사람이 있습니까? 그는 작은 버퍼와 동일한 지연 문제가 있는지 누구든지 확인할 수 있습니까?

답변

0

.wav 파일을 사용하여 지연이나 일시 중지가 발생하지 않았습니다. mp3 형식을 사용하는 경우 압축 작업 중 소리의 시작과 끝 부분에 무음이 추가되어 사운드 재생이 지연 될 수 있습니다. 자세한 내용은 See this post을 참조하십시오.