12

android.net.rtpパッケージのAudioGroupクラスとAudioStreamクラスを使用してVoIPアプリケーションを実装しようとしています。しかし、私のアプリケーションは正しく機能しません。「AudioGroup」クラスオブジェクトを「AudioStream」オブジェクトと「結合」した後、udpパケットを正常に送信します。パケットアナライザを使って確認しました。しかし、電話からは声が聞こえません。私は2台の電話でアプリケーションを実行し、それらの間で音声を通信しようとします。

以下に私のソースコードについて触れます。

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

Android4.0OSでSamsungGALAXYS3電話を使用しています

4

3 に答える 3

6

秘訣は、ポート マッピングを正しくすることです。audioStream.getLocalPort() からのポート番号を使用し、このポート番号を SDP パケットで SIP シグナリングとしてピアに送信する必要があります。

sip 機能を実装するこのサンプル アプリケーションを確認して ください https://github.com/Mobicents/restcomm-android-sdk/tree/master/Examples/JAIN%20SIP

于 2014-10-28T18:18:09.263 に答える
5

あなたが提出したのと同じコードを使用し、マイナーな変更を加えて動作させました。基本的に、ポート番号を正しく取得することが問題であることがわかりました。

ポート番号を作成するとき、audioStreamランダムなようです。Android developer私が見つけた時:Note that the local port is assigned automatically to conform with RFC 3550.

私がやったことは、最初に 1 台の電話でアプリケーションを起動しaudioStream.getLocalPort()、ポート番号を見つけるために使用することでした。次に、他のポートを使用してこのポートに接続しました。これにより、1 つの電話で正しいポート番号しか持っていない場合でも、双方向通信が行われました。

お役に立てれば。

于 2012-08-28T13:30:35.013 に答える
1

スピーカーをつけたほうがいいと思います!

たぶん、次の方法を使用できます。

audioManager.setSpeakerphoneOn(true);
于 2013-08-09T01:51:54.990 に答える