ウェブカメラからキャプチャしたフレームをUDPソケット経由でAndroidアプリケーションに送信し、ライブストリームとして表示するようにしたい。 Androidアプリで画像を受信できますが、画像は1つしか表示できません。ストリームではありません。 私がやったことは次のとおりです。UDP画像ストリーミング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
[接続]ボタンを繰り返し押すと、画像がストリームとして取得されます。私はonProgressアップデートを試しましたが、イメージを非常に大きな遅延で更新することはめったにありません。これらの受信した画像をリアルタイムのストリームとしてアプリケーションに表示させるにはどうすればよいですか?
わかりませんが、データグラムソケットで受信したパケットはシリアル化されていないと思います。あなたはその事件を考えましたか? –
シリアル化されていない場合でも、複数回受け取られることになっています。私は非常にまれにUIの更新を取得します。 –
'onPostExecute'関数をオーバーロードして、ソケットから受け取った単一のイメージを返します。 'doInBackground()'の 'publishProgress()'への私の呼び出しを削除しました。 そして、最後のステップはAsyncTaskを拡張したクラスオブジェクトを再初期化し、 'onPostExecute()'でそれを実行することでした。 誰もが同じ問題に直面しているのを助けてくれることを願っています。 –