J'essaie actuellement de diffuser du son en direct depuis un appareil Android vers un programme Java. J'ai commencé par envoyer l'audio en direct entre deux appareils Android pour confirmer que ma méthode était correcte. L'audio peut être entendu parfaitement avec à peine n'importe quel délai sur l'appareil de réception. Ensuite, j'envoie le même flux audio à un petit programme Java et j'ai vérifié que les données étaient bien envoyées ici aussi. Maintenant, ce que je veux faire est de coder ces données et en quelque sorte le lire sur le serveur exécutant le programme Java. Je préfère le jouer dans un navigateur Web en utilisant HTML5 ou JavaScript, mais je suis ouvert à d'autres méthodes telles que VLC.Stream Live Android Audio vers le serveur
Voici le code de l'application Android qui envoie le signal audio du microphone en direct
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();
}
}
Et voici le code pour la lecture du programme Java dans les données ..
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);
}
}
}
Je sais que Je devrais encoder l'audio sur le côté de l'application avant de l'envoyer au programme Java, mais je ne suis pas sûr de savoir comment procéder pour encoder tout en utilisant AudioRecorder. Je préférerais ne pas utiliser NDK car je n'ai pas d'expérience avec ça et je n'ai pas vraiment le temps d'apprendre à l'utiliser .... encore :)
Qu'avez-vous utilisé flux audio? Je le veux pour un seul sens. – Atieh
Je suis intéressé par l'écriture d'une application Android qui diffuse l'audio du microphone en direct à partir d'un appareil Android vers une application de bureau. Pourriez-vous fournir quelques indications utiles sur certaines ressources liées au contenu que vous avez publié? Ce serait extrêmement utile! Je vous remercie! :) – wayway
Comment avez-vous fait vivre l'audio entre deux appareils Android? – pkBhati