2016-11-22 5 views
2

서버에서 스트리밍 PCM 데이터를 재생하는 앱을 개발하려고합니다.iOS 서버에서 스트리밍 PCM 데이터를 재생하는 방법은 무엇입니까?

AudioQueue를 사용했지만 제대로 작동하지 않습니다. (서버)

PCM 데이터 포맷 :

Sample rate = 48000, num of channel = 2, Bit per sample = 16 

그리고, 서버가 클라이언트에 고정 바이트를 스트리밍되지 않습니다.

(스트리밍 변수 바이트 예 :. 30848, 128, 2764, ... 바이트)

내 소스 코드 : 여기

, 내가 & 오디오 큐 개체 를 만들 잘 살고 것을 ASBD 구조 (언어 : 스위프트)

// Create ASBD structure & set properties. 
var streamFormat = AudioStreamBasicDescription() 

streamFormat.mSampleRate = 48000 
streamFormat.mFormatID = kAudioFormatLinearPCM 
streamFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked 
streamFormat.mFramesPerPacket = 1 
streamFormat.mChannelsPerFrame = 2 
streamFormat.mBitsPerChannel = 16 

streamFormat.mBytesPerFrame = (streamFormat.mBitsPerChannel/8) * streamFormat.mChannelsPerFrame 
streamFormat.mBytesPerPacket = streamFormat.mBytesPerFrame 
streamFormat.mReserved = 0 

// Create AudioQueue for playing PCM streaming data. 
var err = AudioQueueNewOutput(&streamFormat, self.queueCallbackProc, nil, nil, nil, 0, &aq) 

... 

나는 위와 같이 ASBD 구조 & 생성 AudioQueue 개체를 잘 살고있다.

AudioQueue 플레이, 몇 초 동안 아주 잘

를 PCM 데이터를 스트리밍 곧 연주 소리가 켜져 있고 꺼져 있습니다. 내가 무엇을 할 수 있을지?

나에게 어떤 아이디어를 제공하십시오 (아직 스트리밍 및 AudioQueue 큐잉).

+0

더 낮은 대역폭 형식이 효과가 있습니까? –

+0

용서 하시겠습니까? 나는 네가하는 말을 모른다. – user6081283

+0

mp3와 같은보다 압축 된 형식을 시도하고 스트리밍 할 때 작동합니까? –

답변

5

당신은 (적어도) 두 가지 작업을 수행해야합니다

당신은 지연 지터와 서버에서 데이터 사이의 서로 다른 패킷 크기, 데이터, 오디오 큐 콜백 요청을 처리하기 위해 데이터를 버퍼링 할 필요가

. 일반적인 솔루션은 원형 FIFO를 사용하여, 데이터 양을 미리 채워서 최악의 경우 네트워크 지터를 처리 할 수 ​​있습니다 (이 수를 통계적으로 분석해야합니다). 오디오 대기열 콜백은 요청 된 양의 데이터를 원형 FIFO 밖으로 복사 할 수 있습니다. 네트워크 코드가 채워 지려고합니다.

두 비율이 충분히 동일하지 않은 경우 오류를 숨기는 방법이 필요할 수 있습니다. 네트워크 속도가 너무 느릴 때 여분의 사운드를 복제하거나 합성하는 몇 가지 방법과 네트워크 속도가 너무 높을 때 샘플을 남기지 않는 방법, 가능한 한 들리지 않는 것으로 시도하고 어느 정도 불연속성이있는 큰 소리의 클릭을 생성하지 않는 방법 네트워크 이탈.

+0

두 번째 부분은 실시간 스트림 인 경우에만 적용됩니다. 그렇지 않으면 클라이언트가 서버에서 데이터를 읽는 속도를 제어하고 재생 속도에 맞출 수 있습니다. – Codo

+0

비 실시간 스트림조차도 임시 네트워크 드롭 아웃 (혼잡, 너무 많은 손실 패킷 등)의 영향을받을 수 있습니다. – hotpaw2

+0

부분적으로 동의합니다. 버퍼링이 필요하고 (어쨌든 필요합니다) 긴 일시적인 네트워크 드롭 아웃 만 남습니다. 복제 된 사운드 또는 합성 된 사운드로 사운드를 채울 수 없습니다. 그러나 시끄러운 클릭은 어떻게 든 피할 필요가 있다는 것에 동의합니다. – Codo