2012-08-09 37 views
11

का उपयोग कर वीओआईपी एप्लिकेशन को कैसे कार्यान्वित करें I android.net.rtp पैकेज के ऑडियोग्रुप और ऑडियोस्ट्रीम कक्षाओं का उपयोग करके वीओआईपी एप्लिकेशन को लागू करने की कोशिश कर रहा हूं। लेकिन मेरा आवेदन ठीक से काम नहीं करता है। "ऑडियोग्रुप" ऑब्जेक्ट के साथ "ऑडियोग्रुप" क्लास ऑब्जेक्ट में "जुड़ें" के बाद, यह सफलतापूर्वक udp पैकेट भेजता है। मैंने पैकेट विश्लेषक का उपयोग करके जांच की। लेकिन फोन से आवाज़ नहीं सुनाई देती है। मैं अपना आवेदन 2 फोन में चलाता हूं और उनके बीच आवाज संवाद करने की कोशिश करता हूं।एंड्रॉइड.net.आरआरपी पैकेज

नीचे मैं अपने स्रोत कोड का उल्लेख करता हूं।

public class MainActivity extends Activity { 
private AudioStream audioStream; 
private AudioGroup audioGroup; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 

try { 
    audioGroup = new AudioGroup(); 
    audioGroup.setMode(AudioGroup.MODE_NORMAL);   
    audioStream = new AudioStream(InetAddress.getByAddress(new byte[] {(byte)192, (byte)168, (byte)1, (byte)4 })); 
    audioStream.setCodec(AudioCodec.PCMU); 
    audioStream.setMode(RtpStream.MODE_NORMAL); 
    audioStream.associate(InetAddress.getByAddress(new byte[] {(byte)192, (byte)168, (byte)1, (byte)2 }), 5004); 
    audioStream.join(audioGroup); 
    AudioManager Audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
    Audio.setMode(AudioManager.MODE_IN_COMMUNICATION); 
} 
catch (SocketException e) { e.printStackTrace();} 
catch (UnknownHostException e) { e.printStackTrace();} 
catch (Exception ex) { ex.printStackTrace();} 
} 

मैंने मैनिफेस्टफाइल में यह अनुमतियां सेट की हैं।

<uses-permission android:name="android.permission.USE_SIP" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 
<uses-feature android:name="android.hardware.sip.voip" android:required="true" /> 
<uses-feature android:name="android.hardware.wifi" android:required="true" /> 
<uses-feature android:name="android.hardware.microphone" android:required="true" /> 

मैं एंड्रॉयड 4.0 ओएस के साथ सैमसंग गैलेक्सी एस 3 फोन का उपयोग कर रहा

+0

लागू करता

चेक आप इस कैसे हल किया? मेरे पास बिल्कुल वही प्रश्न है –

उत्तर

4

मैं एक ही कोड आपके द्वारा भेजी इस्तेमाल किया है, और यह मामूली परिवर्तन के साथ काम कर ली। असल में मैंने पाया कि समस्या पोर्ट नंबर सही हो रही थी।

audioStream बनाते समय पोर्ट नंबर यादृच्छिक प्रतीत होता है। Android developer पर मैंने पाया: Note that the local port is assigned automatically to conform with RFC 3550.

मैंने जो किया था, मैंने पहले एक फोन पर एप्लिकेशन शुरू किया था और पोर्ट नंबर खोजने के लिए audioStream.getLocalPort() का उपयोग किया था। तब मैं दूसरे बंदरगाह का उपयोग कर इस बंदरगाह से जुड़ा हुआ हूं। इसके परिणामस्वरूप दो-तरफा संचार हुआ, भले ही मेरे पास केवल एक फोन पर सही पोर्ट नंबर था।

उम्मीद है कि इससे मदद मिलती है।

+0

आपकी प्रतिक्रिया के लिए बहुत बहुत धन्यवाद। आपका जवाब बहुत अच्छा है। लेकिन मैं आरटीपी स्थानीय पोर्ट नंबर मैन्युअल रूप से सेट करना चाहता हूं। मैं कोड से आरटीपी स्थानीय बंदरगाह सेट करने के लिए "ऑडियोस्ट्रीम" कक्षा को कैसे संशोधित करता हूं। उन्नत में धन्यवाद। – user1576358

+0

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

+0

मैंने क्लाइंट (पोर्ट नंबर और कोडेक्स इत्यादि) – tristan2468

1

मुझे लगता है कि आपको स्पीकर को सेट करना चाहिए!

audioManager.setSpeakerphoneOn(true); 
5

चाल पोर्ट मानचित्रण सही पाने के लिए है:

हो सकता है कि आप निम्न विधि का उपयोग कर सकते हैं। आपको ऑडियोस्ट्रीम.getLocalPort() से पोर्ट नंबर का उपयोग करने की आवश्यकता है और एसडीपी सिग्नलिंग के रूप में एसडीपी पैकेट में इस पोर्ट नंबर को सहकर्मी को भेजना होगा। बाहर इस उदाहरण आवेदन जो घूंट कार्यक्षमता https://github.com/Mobicents/restcomm-android-sdk/tree/master/Examples/JAIN%20SIP