2010-05-01 20 views
16

मेरे ऐप के लिए, मुझे एक एंड्रॉइड फोन पर एमआईसी से ऑडियो रिकॉर्ड करने की आवश्यकता है, और इसे अन्य एंड्रॉइड फोन पर टीसीपी पर भेजना है, जहां इसे खेला जाना चाहिए।एंड्रॉइड: टीसीपी सॉकेट पर ऑडियो स्ट्रीमिंग

मैं AudioRecord और AudioTrack कक्षा का उपयोग कर रहा हूं। यह फ़ाइल के साथ बहुत अच्छा काम करता है - DataOutputStream का उपयोग कर फ़ाइल में ऑडियो लिखें, और DataInputStream का उपयोग करके इसे पढ़ें।

हालांकि, अगर मैं एक फ़ाइल के बजाय सॉकेट से एक ही स्ट्रीम प्राप्त करता हूं, और इसे लिखने का प्रयास करता हूं, तो मुझे अपवाद मिलता है।

मुझे समझने में कमी आई है कि संभवतः गलत क्या हो सकता है। किसी भी तरह की सहायता का स्वागत किया जाएगा।

संपादित करें: समस्या तब भी वही है जब मैं बड़े बफर आकार (65535 बाइट्स, 160000 बाइट्स) के साथ प्रयास करता हूं।

इस कोड है:

रिकॉर्डर:

int bufferSize = AudioRecord.getMinBufferSize(11025, , AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); 

AudioRecord recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize); 

byte[] tempBuffer = new byte[bufferSize]; 

recordInstance.startRecording(); 

while (/*isRecording*/) { 
     bufferRead = recordInstance.read(tempBuffer, 0, bufferSize); 
     dataOutputStreamInstance.write(tempBuffer); 
} 

DataOutputStream ऊपर प्राप्त किया जाता है के रूप में:

BufferedOutputStream buff = new BufferedOutputStream(out1); //out1 is the socket's outputStream 
DataOutputStream dataOutputStreamInstance = new DataOutputStream (buff); 

आप कृपया एक नज़र मिल सकता है, और मुझे पता है कि यह क्या है कि मैं यहाँ गलत कर सकता था?

धन्यवाद,

+0

क्या आपने ऑडियो डिवाइस को अन्य उपकरणों पर भेजने का प्रबंधन किया था? – B770

उत्तर

8

मुझे यह काम मिल रहा है, कुछ मदद के साथ, और केवल आंशिक रूप से।

मैंने http://emeadev.blogspot.com/2009/09/raw-audio-manipulation-in-android.html पर कोड के साथ शुरुआत की, फाइल की धाराओं को सॉकेट की धाराओं में बदल दिया, और अगर उपलब्ध() को (inputStream.read (byteArray)! = -1) में बदल दिया।

टीसीपी पर ऑडियो की लाइव स्ट्रीमिंग अब हो रही है।

हालांकि,

सभी मैं दूसरे छोर पर सुनने के शोर है, और मैं अब AudioRecorder और audiotrack के लिए मानकों के उपयुक्त सेट के लिए शिकार कर रहा हूँ - आवृत्ति, चैनल config और एन्कोडिंग, ऑडियो स्रोत आदि

यदि आपको इसके बारे में कोई जानकारी है, तो कृपया मुझे बताएं।

धन्यवाद,

संपादित

: यह मेरी ओर से एक मूर्ख त्रुटि थी। मैंने जो कुछ भी ऊपर बताया है, उसके अलावा, खिलाड़ी पक्ष पर इनपुटस्ट्रीम और रिकॉर्डर पक्ष पर आउटपुट स्ट्रीम, और शॉर्ट्स के बजाए बाइट एरे का उपयोग करें और यह काम करेगा।:)

+0

हालांकि मैं कुछ पुराने धागे खोद रहा हूं .. क्या आप अपना कोड डाल सकते हैं (आपके द्वारा किए गए परिवर्तन) ?? –

+0

हैलो चैतन्य, आपने एक ही कोड के साथ कैसे किया? मैं टीसीपी पर ऑडियो की लाइव स्ट्रीमिंग करने में सक्षम नहीं हूं। क्या आप मुझे मार्गदर्शन कर सकते हैं? – iMOBDEV

1

विशिष्ट अपवाद आप हो रही है जानने के बिना, यह पता करने के लिए वास्तव में क्या गलत है मुश्किल है। यह out1 (यानी, आपका सॉकेट कोड) बनाने के लिए उपयोग किए जा रहे कोड को देखने में भी मदद करेगा।

कुछ जो आप ध्यान देना चाहते हैं वह recordInstance.read() से पढ़ने वाले डेटा की मात्रा है; आपको पूरे bufferSize-डेटा के आकार का आकार नहीं मिल सकता है, इसलिए आपको केवल आउटपुट सॉकेट में bufferRead-1 के माध्यम से 0 बाइट्स लिखने की आवश्यकता है।

+0

उत्तर के लिए बहुत बहुत धन्यवाद। – Chaitanya

संबंधित मुद्दे