android - No connection between devices? -


i've developed android application. voice chating

streaming audio between 2 android device works wifi on local network.

but when press start button nothing happends.it should ring , make connection

server code:

package com.example.voicechatserver;  import android.support.v7.app.actionbaractivity; import android.os.bundle; import android.app.activity;  import java.io.ioexception; import java.net.datagrampacket; import java.net.datagramsocket; import java.net.socketexception;  import android.content.context; import android.media.audioformat; import android.media.audiomanager; import android.media.audiorecord; import android.media.audiotrack; import android.media.mediarecorder; import android.util.base64; import android.util.log; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.edittext; import android.widget.textview;  public class mainactivity extends activity {   private button receivebutton,stopbutton; private textview recive; private edittext port; public static datagramsocket socket; private audiotrack speaker; private int port_num=4444;  private int samplerate = 44100;       private int channelconfig =  audioformat.channel_out_mono;     private int audioformat = audioformat.encoding_pcm_16bit;        int minbufsize =audiorecord.getminbuffersize(samplerate, channelconfig, audioformat); byte[] buffer;  //256  private boolean status = true;   @override public void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);      receivebutton = (button) findviewbyid (r.id.receive_button);     stopbutton = (button) findviewbyid (r.id.stop_button);     recive= (textview) findviewbyid(r.id.receive_label);     //recive.settext("created...!");     receivebutton.setonclicklistener(receivelistener);     stopbutton.setonclicklistener(stoplistener);     //receivebutton.settext("start reciving...!");     //stopbutton.settext("stop reciving...!");     port=(edittext) findviewbyid(r.id.edittext1);     //port.settext("1234");      audiomanager audiomanager = (audiomanager) this.getsystemservice(context.audio_service);    // samplerate =integer.parseint( audiomanager.getproperty(audiomanager.property_output_sample_rate)); }   private final onclicklistener stoplistener = new onclicklistener() {      @override     public void onclick(view v) {         status = false;         //recive.settext("recoder stop...!");         speaker.release();         log.d("vr","speaker released");      }  };   private final onclicklistener receivelistener = new onclicklistener() {      @override     public void onclick(view arg0) {         status = true;        // recive.settext(" before start ");          startreceiving();      }  };  public void startreceiving() {      thread receivethread = new thread (new runnable() {          @override         public void run() {                    runonuithread(new runnable() {                      @override                     public void run() {                         port_num=integer.parseint(port.gettext().tostring());                         buffer= new byte[4096];                         datagramsocket socket = null;                          try {                             socket = new datagramsocket(port_num);                             log.d("vr", "socket created");                             speaker = new audiotrack(audiomanager.stream_voice_call,samplerate,channelconfig,audioformat,16000,audiotrack.mode_stream);                            //audiotrack.mode_stream,                             speaker.play();                             while(status == true) {                                  datagrampacket packet = new datagrampacket(buffer,buffer.length);                                  socket.receive(packet);                                 log.d("vr", "packet received");                                  //reading content packet                                 buffer=packet.getdata();                                 log.d("vr", "packet data read buffer");                                buffer= base64.decode(buffer, base64.default);                                 //sending data audiotrack obj i.e. speaker                                 speaker.write(buffer, 0, minbufsize);                                 log.d("vr", "writing buffer content speaker");                         }                          } catch (socketexception e) {                             // todo auto-generated catch block                             e.printstacktrace();                         } catch (ioexception e) {                             // todo auto-generated catch block                             e.printstacktrace();                         }                        }                 });}      });     receivethread.start(); }} 

client code:

package com.example.voicechatclient;  import android.support.v7.app.actionbaractivity; import android.os.bundle; import android.view.menu; import android.view.menuitem;    import android.app.activity;  import java.io.ioexception; import java.net.datagrampacket; import java.net.datagramsocket; import java.net.inetaddress; import java.net.socketexception; import java.net.unknownhostexception;  import android.content.context; import android.content.dialoginterface; import android.media.audioformat; import android.media.audiomanager; import android.media.audiorecord; import android.media.audiotrack; import android.media.mediarecorder; import android.util.base64; import android.util.log; import android.view.view; import android.view.view.onclicklistener; import android.widget.button; import android.widget.edittext; import android.widget.textview;   public class mainactivity extends activity {  private edittext target,target_port; private textview streaminglabel; private button startbutton,stopbutton;  public byte[] buffer; public static datagramsocket socket; private int port=1370;         audiorecord recorder;   private int samplerate = 44100; private int channelconfig = audioformat.channel_in_mono;     private int audioformat = audioformat.encoding_pcm_16bit;         private boolean status = true;     @override public void oncreate(bundle savedinstancestate) {     super.oncreate(savedinstancestate);     setcontentview(r.layout.activity_main);      target = (edittext) findviewbyid (r.id.target_ip);     streaminglabel = (textview) findviewbyid(r.id.streaming_label);     startbutton = (button) findviewbyid (r.id.start_button);     stopbutton = (button) findviewbyid (r.id.stop_button);     target_port=(edittext) findviewbyid(r.id.target_port);     streaminglabel.settext("press start! begin");      startbutton.setonclicklistener (startlistener);     stopbutton.setonclicklistener (stoplistener); }  private final onclicklistener stoplistener = new onclicklistener() {      @override     public void onclick(view arg0) {                 status = false;                 recorder.release();                 log.d("vs","recorder released");     }  };  private final onclicklistener startlistener = new onclicklistener() {      @override     public void onclick(view arg0) {                 status = true;                 startstreaming();                }  };  public void startstreaming() {       thread streamthread = new thread(new runnable() {          @override         public void run() {             try {                   int minbufsize = audiorecord.getminbuffersize(samplerate, channelconfig, audioformat);                 datagramsocket socket = new datagramsocket();                 log.d("vs", "socket created");                  byte[] buffer = new byte[minbufsize];                  log.d("vs","buffer created of size " + minbufsize);                 datagrampacket packet;                  final inetaddress destination = inetaddress.getbyname(target.gettext().tostring());                 log.d("vs", "address retrieved");                   recorder = new audiorecord(mediarecorder.audiosource.mic,samplerate,channelconfig,audioformat,minbufsize);                 log.d("vs", "recorder initialized");                  recorder.startrecording();                   while(status == true) {                       //reading data mic buffer                     minbufsize = recorder.read(buffer, 0, buffer.length);                    buffer= base64.encode(buffer, base64.default);                     //putting buffer in packet                     port=integer.parseint(target_port.gettext().tostring());                     packet = new datagrampacket (buffer,buffer.length,destination,port);                      socket.send(packet);                   }              } catch(unknownhostexception e) {                 log.e("vs", "unknownhostexception");             } catch (ioexception e) {                 log.e("vs", "ioexception");             }            }      });     streamthread.start();  }  } 

tested local ip address correctly. ip's 192.168.1.100 (my phone's ip) 10.0.2.2 , ....

you're question might have been answer here : https://stackoverflow.com/a/5440517/795245

if you're permission set correctly think problem device not support 44100 sample rate, , recorder may have not been initialized correctly.

add sanity check before creating audiorecord object after checking minbuffersize:

int minbufsize = audiorecord.getminbuffersize(samplerate, channelconfig, audioformat); if (minbufsize != audiorecord.error_bad_value) {    // check if can instantiate , have success     audiorecord recorder = new audiorecord(audiosource.default, rate, channelconfig, audioformat, minbufsize);     if (recorder.getstate() == audiorecord.state_initialized)        //do whatever want recorder        recorder.startrecording();        ...    }  } 

you should try out other sample rate values : { 8000, 11025, 22050, 44100 };


Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -