2016-10-25 3 views
0

Ich versuche PCM Stream-Daten vom Server mit AudioQueue zu spielen.Wie Sie AudioStreamBasicDescription-Eigenschaften festlegen?

PCM-Datenformat:

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

Und Server fest Bytes ist nicht auf Client-Streaming. (variable Bytes.) (Bsp .: 30848, 128, 2764, ... Bytes)

Wie ASBD einstellen? Ich weiß nicht, wie man mFramesPerPacket, mBytesPerFrame, mBytesPerPacket setzt. Ich habe Apple Referenzdokument gelesen, aber es gibt keine detaillierten Beschreibungen.

Bitte geben Sie mir eine Idee.

Neu hinzugefügt: Hier, ASBD Struktur, was ich eingestellt habe. (Sprache: Swift)

// 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) 

... 

Ich habe ASBD-Struktur wie oben festgelegt.

Audioqueue Play Streaming-Daten PCM sehr gut für ein paar Sekunden,

aber bald aufhören zu spielen ist. Was kann ich tun?

(noch Streaming und Warteschlangenaudioqueue)

Bitte geben Sie mir eine Idee.

Antwort

1

ASBD ist nur eine Struktur unterhalb definiert wie folgt:

struct AudioStreamBasicDescription 
{ 
    Float64    mSampleRate; 
    AudioFormatID  mFormatID; 
    AudioFormatFlags mFormatFlags; 
    UInt32    mBytesPerPacket; 
    UInt32    mFramesPerPacket; 
    UInt32    mBytesPerFrame; 
    UInt32    mChannelsPerFrame; 
    UInt32    mBitsPerChannel; 
    UInt32    mReserved; 
}; 
typedef struct AudioStreamBasicDescription AudioStreamBasicDescription; 

Sie können die Variablen einer Struktur wie folgt festgelegt:

AudioStreamBasicDescription streamFormat; 

streamFormat.mFormatID = kAudioFormatLinearPCM; 
streamFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked; 

streamFormat.mSampleRate = sampleRate; 
streamFormat.mBitsPerChannel = bitsPerChannel; 
streamFormat.mChannelsPerFrame = channelsPerFrame; 
streamFormat.mFramesPerPacket = 1; 

int bytes = (bitsPerChannel/8) * channelsPerFrame; 
streamFormat.mBytesPerFrame = bytes; 
streamFormat.mBytesPerPacket = bytes; 
+0

Dank für Ihre Antwort danken. Aber ich habe bereits ASBD-Struktur wie die oben genannten gesetzt. AudioQueue spielt gestreamte PCM-Daten sehr gut für ein paar Sekunden, aber bald zu spielen ist halt. Was kann ich tun? – user6081283

+0

Überprüfen Sie, ob das Audioobjekt nicht freigegeben wird – Bogdan

Verwandte Themen