Peer to Peer Audio Chiamata su Android: Le pause vocali e il ritardo (ritardo nella ricezione dei pacchetti) aumentano

Sto cercando di stabilire audio Peer to Peer che invoca Android. Ho usato un telefono Android e un tablet per la comunicazione, ma dopo aver ricevuto circa 40 pacchetti, il telefono quasi smette di ricevere i pacchetti e poi improvvisamente riceve alcuni pacchetti e li riproduce, ecc., Ma questo tempo di attesa aumenta. Allo stesso modo, la tavoletta riceve inizialmente i pacchetti e le riproduce, ma aumenta il ritardo e anche la voce inizia a rompersi dopo qualche tempo come se alcuni pacchetti sono persi. Qualsiasi idea di cosa provochi questo problema …

Questo è il codice per l'applicazione … sto solo dando l'indirizzo IP del mittente e del destinatario nella class RecordAudio durante l'esecuzione su due dispositivi.

  • L'allarme non sveglia il mio servizio
  • Avviso di adattatore di binding personalizzato di DataBinding di Android
  • Licenza di licenza Android
  • L'applicazione Ionic / Cordova non riceve notifica push in background
  • Google Maps Android MapView v2: disabilitare lo zoom
  • Errore della libreria di core di Android
  • public class AudioRPActivity extends Activity implements OnClickListener { DatagramSocket socketS,socketR; DatagramPacket recvP,sendP; RecordAudio rt; PlayAudio pt; Button sr,stop,sp; TextView tv,tv1; File rf; boolean isRecording = false; boolean isPlaying = false; int frequency = 44100; int channelConfiguration = AudioFormat.CHANNEL_CONFIGURATION_MONO; int audioEncoding = AudioFormat.ENCODING_PCM_16BIT; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); tv = (TextView)findViewById(R.id.text1); tv1 = (TextView)findViewById(R.id.text2); sr = (Button)findViewById(R.id.sr); sp = (Button)findViewById(R.id.sp); stop = (Button)findViewById(R.id.stop); sr.setOnClickListener(this); sp.setOnClickListener(this); stop.setOnClickListener(this); stop.setEnabled(false); try { socketS=new DatagramSocket(); socketR=new DatagramSocket(6000); } catch(SocketException se) { tv.setText(se.toString()); finish(); } } public void onClick(View v) { if(v == sr) record(); else if(v == sp) play(); else if(v == stop) stopPlaying(); } public void play() { stop.setEnabled(true); sp.setEnabled(false); pt = new PlayAudio(); pt.execute(); } public void stopPlaying() { isRecording=false; isPlaying = false; stop.setEnabled(false); } public void record() { stop.setEnabled(true); sr.setEnabled(false); rt = new RecordAudio(); rt.execute(); } private class PlayAudio extends AsyncTask<Void,String,Void> { @Override protected Void doInBackground(Void... arg0) { isPlaying = true; int bufferSize = AudioTrack.getMinBufferSize(frequency, channelConfiguration, audioEncoding); byte[] audiodata = new byte[bufferSize]; try { AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,frequency,channelConfiguration, audioEncoding,4*bufferSize,AudioTrack.MODE_STREAM); audioTrack.setPlaybackRate(frequency); audioTrack.play(); while(isPlaying) { recvP=new DatagramPacket(audiodata,audiodata.length); socketR.receive(recvP); audioTrack.write(recvP.getData(), 0, recvP.getLength()); } audioTrack.stop(); audioTrack.release(); } catch(Throwable t) { Log.e("Audio Track","Playback Failed"); } return null; } protected void onProgressUpdate(String... progress) { tv1.setText(progress[0].toString()); } protected void onPostExecute(Void result) { sr.setEnabled(true); sp.setEnabled(true); } } private class RecordAudio extends AsyncTask<Void,String,Void> { @Override protected Void doInBackground(Void... arg0) { isRecording = true; try { int bufferSize = AudioTrack.getMinBufferSize(frequency, channelConfiguration, audioEncoding); AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,frequency,channelConfiguration ,audioEncoding,4*bufferSize); byte[] buffer = new byte[bufferSize]; audioRecord.startRecording(); int r=0; while(isRecording) { int brr = audioRecord.read(buffer,0,bufferSize); sendP=new DatagramPacket(buffer,brr,InetAddress.getByName("sender's/receiver's ip"),6000); socketS.send(sendP); publishProgress(String.valueOf(r)); r++; } audioRecord.stop(); audioRecord.release(); } catch(Throwable t) { Log.e("AudioRecord","Recording Failed...."); } return null; } protected void onProgressUpdate(String... progress) { tv.setText(progress[0].toString()); } protected void onPostExecute(Void result) { sr.setEnabled(true); sp.setEnabled(true); } } } 

  • la voce dell'elenco di visualizzazione ripetuta in android?
  • Mostra AlertDialog con ImageView senza alcun imbottitura
  • Risorse Android $ NotFoundException
  • Notifica Android - Visualizza il messaggio completo
  • Come posso distriggersre la modalità multifunction per un'attività in Android N +
  • Come configurare la barra d'azione Sherlock + il plugin della mappa?
  • One Solution collect form web for “Peer to Peer Audio Chiamata su Android: Le pause vocali e il ritardo (ritardo nella ricezione dei pacchetti) aumentano”

    Quando mandavo la voce sulla networking, ho avuto problemi se non fosse altro che 8000 per la frequenza. 44100 sembrava orribile. Questo potrebbe essere stato per la mia situazione.

    Un'altra difficoltà è che con UDP è difficile dire quali ordini arrivano i pacchetti. Ho visto un'implementazione che le riport nell'ordine giusto, ma non lo trovo adesso.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.