Attualmente sto cercando di trasmettere l'audio del microfono dal vivo da un dispositivo Android a un programma Java. Ho iniziato con l'invio dell'audio in tempo reale tra due dispositivi Android per confermare che il mio metodo era corretto. L'audio potrebbe essere ascoltato perfettamente con quasi nessun ritardo sul dispositivo ricevente. Successivamente invio lo stesso flusso audio a un piccolo programma Java e ho verificato che i dati siano stati inviati anche qui correttamente. Ora quello che voglio fare è codificare questi dati e in qualche modo riprodurli sul server che esegue il programma Java. Preferisco giocare su un browser web usando HTML5 o JavaScript, ma sono aperto a metodi alternativi come VLC.Stream live audio Android al server
ecco il codice per l'applicazione Android che invia l'audio live microfono
public class MainActivity extends Activity {
private Button startButton,stopButton;
public byte[] buffer;
public static DatagramSocket socket;
AudioRecord recorder;
private int sampleRate = 44100;
private int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
private int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
int minBufSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
private boolean status = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startButton = (Button) findViewById (R.id.start_button);
stopButton = (Button) findViewById (R.id.stop_button);
startButton.setOnClickListener(startListener);
stopButton.setOnClickListener(stopListener);
minBufSize += 2048;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
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{
DatagramSocket socket = new DatagramSocket();
Log.d("VS", "Socket Created");
byte[] buffer = new byte[minBufSize];
Log.d("VS","Buffer created of size " + minBufSize);
Log.d("VS", "Address retrieved");
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,sampleRate,channelConfig,audioFormat,minBufSize);
Log.d("VS", "Recorder initialized");
recorder.startRecording();
InetAddress IPAddress = InetAddress.getByName("192.168.1.5");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
while (status == true)
{
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 50005);
socket.send(sendPacket);
}
} catch(UnknownHostException e) {
Log.e("VS", "UnknownHostException");
} catch (IOException e) {
Log.e("VS", "IOException");
e.printStackTrace();
}
}
});
streamThread.start();
}
}
Ed ecco il codice per la lettura programma Java nei dati ..
class Server
{
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new DatagramSocket(50005);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData().toString());
System.out.println("RECEIVED: " + sentence);
}
}
}
So che Dovrei codificare l'audio sul lato app prima di inviarlo al programma Java, ma non sono sicuro di come procedere con la codifica durante l'utilizzo di AudioRecorder. Preferirei non utilizzare NDK perché non ho esperienza con esso e non ho davvero tempo per imparare come usarlo .... ancora :)
Che cosa hai utilizzato per l'audio in streaming? Lo voglio solo per un modo. – Atieh
Mi interessa scrivere un'app per Android che trasmetta l'audio del microfono dal vivo da un dispositivo Android a un'applicazione desktop. Potresti fornire alcuni suggerimenti utili su alcune risorse correlate ai contenuti che hai postato? Sarebbe immensamente utile! Grazie! :) – wayway
Come hai fatto audio dal vivo tra due dispositivi Android? – pkBhati