Je veux envoyer des images, capturées à partir d'une webcam, à mon application Android via UDP Sockets, et les afficher de sorte qu'il apparaisse en direct. Je suis en mesure de recevoir des images sur l'application Android, mais je ne peux afficher qu'une seule image. Pas un flux. Ce que j'ai fait suit.UDP Image en streaming Android
public class getImage extends AsyncTask<String, Bitmap, Bitmap> {
protected void onProgressUpdate(Bitmap... values) {
Log.i("onProgressUpdate", "done");
imageDisplay.setImageBitmap(values[0]); //imageDisplay is an ImageView on UI
imageDisplay.invalidate();
}//end of onProgressUpdate
protected Bitmap doInBackground(String... params) {
//receive an image over socket
publishProgress(bitmapimage); //update on UI
return bitmapimage;
}//end of getImage
public void ConnectionButton(View v) {
Connect = (Button) findViewById(R.id.Connect);
//while(true) {
try {
clientsocket = new DatagramSocket(9999);
} catch (IOException e) {
Log.i("Connection", "exception while creating socket");
}
try {
getImage obj = new getImage();
receivedImage = obj.execute("9999").get(); //receive image and over stream
//obj.onProgressUpdate(receivedImage);
}
catch(Exception e){
e.printStackTrace();
}
//}//endof while
}//end of ConnectionButton
Si j'appuie sur, le bouton Connecter à plusieurs reprises, j'obtiens des images sous forme de flux. J'ai essayé la mise à jour onProgress, mais il met à jour les images rarement avec un retard assez important. Comment puis-je faire afficher ces images reçues sur l'application en tant que flux en temps réel.
Je ne suis pas sûr mais je pense que les paquets reçus dans les sockets de datagramme ne sont pas sérialisés. Avez-vous considéré ce cas? –
Même si elles ne sont pas sérialisées, elles sont censées être reçues plus d'une fois. Je reçois très rarement des mises à jour sur l'interface utilisateur. –
Je remplace la fonction 'onPostExecute' pour retourner une seule image reçue du socket. Retiré mon appel à 'publishProgress()' dans 'doInBackground()'. Et, la dernière étape était de réinitialiser l'objet de classe qui étendait AsyncTask et l'exécutait dans 'onPostExecute()'. J'espère que ça aide, quelqu'un d'autre confronté au même problème. –