【发布时间】:2018-03-16 02:52:26
【问题描述】:
我想通过 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 更新,但它很少更新图像,延迟很大。如何使这些接收到的图像在应用程序上显示为实时流。
【问题讨论】:
-
我不确定,但我认为在数据报套接字中接收到的数据包没有序列化。你考虑过那个案例吗?
-
即使它们没有被序列化,它们也应该被多次接收。我很少更新 UI。
-
我覆盖了
onPostExecute函数以返回从套接字接收的单个图像。在doInBackground()中删除了我对publishProgress()的呼叫。最后一步是重新初始化扩展 AsyncTask 的类对象并在onPostExecute()中执行它。希望对遇到同样问题的其他人有所帮助。
标签: android sockets android-asynctask live-streaming async-onprogressupdate