웹캠에서 캡처 한 프레임을 UDP 소켓을 통해 안드로이드 응용 프로그램으로 보내고 실시간 스트림으로 표시되도록 표시하고 싶습니다. Android 앱에서 이미지를 수신 할 수 있지만 이미지 하나만 표시 할 수 있습니다. 스트림이 아닙니다. 내가 한 것은 다음과 같습니다.UDP 이미지 스트리밍 안드로이드
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()에서 실행하는 것입니다. 도움이되기를 바랍니다. 다른 누구도 동일한 문제에 직면하고 있습니다. –