我希望通过UDP套接字将从摄像头捕捉到的帧发送到我的android应用程序,并将它们显示为实时流。我可以在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更新,但它很少用相当大的延迟更新图像。如何使接收到的图像以实时流的形式显示在应用程序上?
发布于 2018-01-10 07:04:20
AsyncTask
对象只能执行一次,因此我无法接收流。但我是通过跟踪我来实现的。
我重写了onPostExecute()
以返回从套接字接收到的单个图像。删除了我对publishProgress()
in doInBackground()
的调用。最后一步是重新初始化扩展AsyncTask的类对象,并在onPostExecute()
中执行它,即创建一个新对象,并在onPostExecute()
中对其进行asyncobject.execute().get()
。希望它能帮上忙,其他面临同样问题的人。
https://stackoverflow.com/questions/46569478
复制相似问题