2016-06-09 2 views
0

C는 스레드 세이프 큐를 통해 별도의 스레드에서 실행되는 오디오를 통해 오디오를 스트리밍합니다. naudio 로의 입력은 네이티브 C# AAC 디코더를 찾지 못해서 16 비트 PCM 데이터로 구성된 스트림입니다. AAC는 libfaad2에 의해 PInvoke로 디코딩됩니다. 데이터는 라이브 "dab plus"방송 소스에서 발생하는 연속적인 스트림으로 구성됩니다.AAC 및 샘플링 속도가 일치하지 않습니다.

이것은 아주 조금만 예외를 제외하고 모두 매우 훌륭하고 부드럽게 작동합니다. AAC 디코더와 naudio에서보고 한 데이터 속도가 일치하지 않습니다. 예를 들어, libfaad2 디코더는 방송국의 메타 데이터로 초기화 된 48000 Hz 샘플링 속도를보고합니다. 이 샘플링 속도로 초기화 된 NAudio는 짧은 시간 (버퍼 크기로 선형 적으로 타임 아웃 스케일링을하는 512000 바이트의 naudio 버퍼로 30 초) 후에 "버퍼 풀"예외를 생성합니다.

naudio의 "DiscardOnBufferOverflow"옵션은 문제 발생 이후에 발생하는 소리의 원인이되므로 문제의 실행 가능한 해결책이 아닙니다. 보고 된 48000 Hz를 3000으로 증가시킨 즉, 51000 Hz로 초기화하면, 버퍼 오버 플로우 예외가 발생하기 거의 1 시간 동안 실행됩니다.

48kHz로 남은 naudio가있는 3 분짜리 파일을 녹음하여 완벽하게 들립니다.

내 질문 : 스트리밍 할 때 naudio와 AAC 디코더의 비트 전송률이 일치하지 않는 이유는 무엇입니까? 나는 현재의 해킹을 그대로두고 싶지 않기 때문에이 이유를 알고 싶다.

답변

0

샘플 속도는 Hz 단위로 측정되며 bps가 아닙니다. AAC가 48kHz 또는 48kbps라고 확신합니까? 이 경우 샘플 속도는 44.1kHz가 될 수 있으며 그 차이를 설명 할 수 있습니다.

이것을 디버깅하려면 libfaad2의 출력을 48kHz WAV 파일에 기록하고 예상 속도로 재생되는지 확인하십시오.

+0

마크, 빠른 답장을 보내 주셔서 감사합니다. Hz-bps 혼란에 대해 죄송합니다. 물론 샘플링 속도는 Hz입니다. 그에 따라 질문을 편집했습니다. dab plus 시스템은 16, 24, 32 및 48 kHz의 네 가지 가능한 샘플링 속도를 생성하며 (2010 년 표준 ETSI TS 102 563 V 1.2.1 참조) 사용되는 스트림이 스트림의 메타 데이터에보고됩니다 (표 2 참조). 문서에서). 내 질문에 썼 듯이, 48kHz 샘플링 속도로 naudio 파일을 녹음하라는 귀하의 제안을 이미 깨달았습니다.이 파일에는 들리지 않는 오류없이 완벽한 클래식 음악이 3 1/2 분 포함되어 있습니다. – josh

+0

NAudio 재생이 늦어지고 버퍼가 서서히 채워지도록 무음을 삽입 할 수 있습니까? 내가 생각할 수있는 다른 설명은 재생 장치가 실제로 48kHz에서 작동하지 않는다는 것입니다. –

+0

naudio에 무음이 삽입 된 경우 스트림에 간격이 표시되지 않습니까? 그리고 Win10 미디어 플레이어로 파일을 재생할 때 재생 장치 (새로운 랩톱 쿼드 코어 i7)의 부정확성이 나타나야합니까? 나는 aac 출력을 충분한 크기의 파일에 기록하고 격리 된 응용 프로그램에서 해당 파일에서 naudio로 스트리밍하려고 시도합니다. 아마도 그것이 실시간 문제라는 올바른 추측이 올바른 방향을 가리킬 수도 있습니다. – josh

관련 문제