सावधान: नीचे दिया गया जवाब केवल तभी वैध है जब आप सर्वर से पीसीएम डेटा प्राप्त करते हैं। यह निश्चित रूप से कभी नहीं होता है। यही कारण है कि ऑडियो को प्रस्तुत करने और डेटा प्राप्त करने के बीच आपको एक और कदम चाहिए: डेटा रूपांतरण।
प्रारूप के आधार पर, यह अधिक या कम मुश्किल हो सकता है, लेकिन सामान्य रूप से आपको इस चरण के लिए ऑडियो कनवर्टर सेवाओं का उपयोग करना चाहिए।
आपको सर्वर से आने वाले डेटा के साथ केवल बफर भरने के लिए -(void)connection:(NSURLConnection)connection didReceiveData:(NSData)data
का उपयोग करना चाहिए, इसे खेलने के लिए इस विधि के साथ कुछ भी नहीं होना चाहिए।
अब, आपके द्वारा रिमोटियो और ऑडियो इकाइयों का उपयोग करने के लिए आवश्यक बफर का उपयोग करके स्मृति में संग्रहीत डेटा को चलाने के लिए। Here is a good, comprehensive tutorial। आप ट्यूटोरियल से "रिकॉर्ड" भाग को हटा सकते हैं क्योंकि आपको वास्तव में इसकी आवश्यकता नहीं है।
आप देख सकते हैं, वे प्लेबैक के लिए एक कॉलबैक को परिभाषित:
static OSStatus playbackCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData) {
for (int i = 0 ; i < ioData->mNumberBuffers; i++){
AudioBuffer buffer = ioData->mBuffers[i];
unsigned char *frameBuffer = buffer.mData;
for (int j = 0; j < inNumberFrames*2; j++){
frameBuffer[j] = getNextPacket();//this here is a function you have to make to get the next chunk of bytes available in the stream buffer
}
}
return noErr;
}
मूल रूप से क्या यह करता है के साथ ioData
बफर को भरने के लिए है:
callbackStruct.inputProc = playbackCallback;
callbackStruct.inputProcRefCon = self;
status = AudioUnitSetProperty(audioUnit,
kAudioUnitProperty_SetRenderCallback,
kAudioUnitScope_Global,
kOutputBus,
&callbackStruct,
sizeof(callbackStruct));
और playbackCallback
समारोह इस तरह दिखता है बाइट्स का अगला हिस्सा जिसे खेला जाना चाहिए। ioData
बफर शून्य करने के लिए सुनिश्चित करें कि अगर कोई नया डेटा खेलने के लिए नहीं है (खिलाड़ी को बंद कर दिया गया है तो स्ट्रीम डेटा बफर में पर्याप्त डेटा नहीं है)।
इसके अलावा, आप alSourceQueueBuffers
और alSourceUnqueueBuffers
का उपयोग करके ओपनएएल के साथ एक ही चीज़ प्राप्त कर सकते हैं ताकि दूसरे के बाद एक बफर कतार हो सके।
यही है। हैप्पी कोडिंग!
टैक्सी आप कैसे nsinputstream में आ रहा है बाइट्स की तरह बाइट्स आने से खेलने ausio ऐसा करने का तरीका समारोह – sajwan
पढ़ राडू @valentin मैं ऑडियो बफर बनाने के लिए से मैं कैसे है कि वापस खेलने कॉल कॉल करने के लिए इस विधि से डेटा और एक और बात हो रही है भ्रमित कर रहा हूँ ? अग्रिम धन्यवाद मदद करने के लिए दयालु हो! –