2013-01-21 28 views
5

से पीसीएम बफर बजाना मुझे एन्कोडेड पीसीएम बफर वाले सॉकेट से यूडीपी पैकेट की एक श्रृंखला प्राप्त हो रही है। उन्हें डीकोड करने के बाद, मुझे एक int16 * ऑडियो बफर के साथ छोड़ दिया गया है, जिसे मैं तुरंत वापस खेलना चाहता हूं।आईओएस: स्ट्रीम

इच्छित तर्क कुछ इस तरह चला जाता है:

init(){ 
    initTrack(track, output, channels, sample_rate, ...); 
} 

onReceiveBufferFromSocket(NSData data){ 
    //Decode the buffer 
    int16 * buf = handle_data(data); 

    //Play data 
    write_to_track(track, buf, length_of_buf, etc); 
} 

मैं सब कुछ है, हालांकि बफ़र्स प्ले बैक करने के साथ क्या करना है के बारे में यकीन नहीं है। एंड्रॉइड पर, मैं ऑडियोट्रैक ऑब्जेक्ट बनाकर इसे नमूना दर, एक प्रारूप, चैनल इत्यादि निर्दिष्ट करके इसे स्थापित करने में सक्षम हूं ... और फिर बफर के साथ "लिखने" विधि को कॉल करना (जैसे मेरी इच्छा मैं उपरोक्त अपने छद्म कोड में कर सकता था) लेकिन आईओएस पर मैं छोटा आ रहा हूं।

मैं ऑडियो फ़ाइल स्ट्रीम सेवा का उपयोग कर की कोशिश की है, लेकिन मुझे लगता है मैं कुछ गलत कर रहा हूँ के बाद से कोई आवाज कभी बाहर आता है और मैं खुद से उन कार्यों की तरह महसूस वास्तव में किसी भी प्लेबैक नहीं करते अनुमान लगा रहा हूँ। मैंने ऑडियो कतार सेवाओं को समझने का भी प्रयास किया (जो मुझे लगता है कि जो भी मैं चाहता हूं उसके करीब हो सकता है), हालांकि मैं इसके उपयोग के लिए कोई साधारण कोड नमूने नहीं ढूंढ पाया।

किसी भी मदद की बहुत सराहना की जाएगी, विशेष रूप से उदाहरण कोड के रूप में।

+1

अरे, क्या आपने इसे हल करने का प्रबंधन किया था? यदि संभव हो तो मुझे एक समान समस्या है, कृपया अपने कोड का नमूना पोस्ट करें। – moenad

उत्तर

4

आप अपने भेजे यूडीपी डेटा रखने के लिए बफर के कुछ प्रकार का उपयोग करने की जरूरत है। This एक आसान और अच्छा परिपत्र बफर है जिसका मैंने उपयोग किया है।

फिर बफर से डेटा वापस खेलने के लिए, आप ऑडियो यूनिट ढांचे का उपयोग कर सकते हैं। Here एक अच्छा उदाहरण प्रोजेक्ट है।

नोट: पहली कड़ी भी आप ऑडियो यूनिट का उपयोग कर प्लेबैक करने के लिए कैसे पता चलता है।

+0

मैं अभी भी यह कैसे करना है इसके बारे में थोड़ा उलझन में हूं। मेरे पास यूडीपी सॉकेट से रिसेप्शन कॉलबैक फ़ंक्शन है। मैं वहां पीसीएम फ्रेम लाता हूं, तो आप जो कह रहे हैं वह है कि मेरे पास एक गोलाकार बफर होना चाहिए ताकि फ़ंक्शन उस फ्रेम को रख सके जो उसे वहां लाता है, और एक और कॉलबैक (जिसे मैं सुनिश्चित नहीं करता कि कैसे बनाना है) बफर को चेक करता है और audiounit सेवा का उपयोग कर प्लेबैक के लिए फ्रेम प्रस्तुत करता है? लेकिन दूसरी कॉलबैक क्या कहती है? ऐसा प्रतीत नहीं होता है कि ऑडियो कब खेलता है, यह सही है? –

+0

यदि आप मेरे पहले लिंक में उदाहरण देखते हैं, तो एक ऑडियो है जिसे ऑडियोऑटपुट कॉलबैक कहा जाता है। यह आपको दिखाता है कि सर्कुलर बफर से डेटा को ऑडियो यूनिट प्लेबैक में कैसे कॉपी किया जाए। मैंने अभी उपरोक्त उस कार्य की प्रति बना दी है। – user523234

+0

कृपया अपना कार्यान्वयन हिस्सा साझा करें –

3

आप ऑडियोक्यूयू सेवाओं का भी उपयोग कर सकते हैं, सुनिश्चित करें कि आप किसी प्रकार का पैकेट पुन: ऑर्डर कर रहे हैं, अगर आप ffmpeg का उपयोग स्ट्रीम को डीकोड करने के लिए करते हैं तो इसके लिए एक विकल्प है।

अन्यथा ऑडियो कतारों स्थापित करने के लिए आसान है।

https://github.com/mooncatventures-group/iFrameExtractor/blob/master/Classes/AudioController.m

तुम भी AudioUnits इस्तेमाल कर सकते हैं, थोड़ा और अधिक जटिल है, हालांकि।