1
我想通過UDP套接字將從網絡攝像頭捕獲的幀發送到我的android應用程序,並將它們顯示爲實時流。我能夠在Android應用程序中接收圖像,但我只能顯示單張圖像。不是流。 我所做的是以下。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
如果我反覆按下連接按鈕,我得到的圖像爲流。我已經嘗試過進行更新,但它很少更新圖像,延遲很大。如何將這些接收到的圖像作爲實時流在應用程序上顯示?
我不確定,但我認爲在數據報套接字中收到的數據包沒有被序列化。你有沒有考慮過這種情況? –
即使他們沒有序列化,他們應該被收到不止一次。我很少得到UI的更新。 –
我覆蓋'onPostExecute'函數以返回從套接字接收到的單個圖像。在'doInBackground()'中刪除了對'publishProgress()'的調用。 最後一步是重新初始化擴展AsyncTask的類對象並在'onPostExecute()'中執行它。 希望它可以幫助其他任何面臨同樣問題的人。 –