1

ウェブカメラからキャプチャしたフレームを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アップデートを試しましたが、イメージを非常に大きな遅延で更新することはめったにありません。これらの受信した画像をリアルタイムのストリームとしてアプリケーションに表示させるにはどうすればよいですか?

+0

わかりませんが、データグラムソケットで受信したパケットはシリアル化されていないと思います。あなたはその事件を考えましたか? –

+0

シリアル化されていない場合でも、複数回受け取られることになっています。私は非常にまれにUIの更新を取得します。 –

+0

'onPostExecute'関数をオーバーロードして、ソケットから受け取った単一のイメージを返します。 'doInBackground()'の 'publishProgress()'への私の呼び出しを削除しました。 そして、最後のステップはAsyncTaskを拡張したクラスオブジェクトを再初期化し、 'onPostExecute()'でそれを実行することでした。 誰もが同じ問題に直面しているのを助けてくれることを願っています。 –

答えて

0

AsyncTaskオブジェクトは1回しか実行できないため、ストリームを受信できませんでした。しかし私はmehtodに従うことによってそれを達成しました。

私はonPostExecute()をオーバーロードして、ソケットから受信した単一のイメージを返します。 publishProgress()への電話番号をdoInBackground()に削除しました。最後に、AsyncTaskを拡張したクラスオブジェクトを再初期化し、onPostExecute()で実行します。つまり、新しいオブジェクトを作成し、asyncobject.execute().get()onPostExecute()に作成します。それが他の誰かが同じ問題に直面していることを願っています。