@Override public InputStream streaming(Properties parms) { VideoFrame targetFrame = null; for (int i = 0; i < maxVideoNumber; i++) { if (videoFrames[i].acquire()) { targetFrame = videoFrames[i]; break; } } // return 503 internal error if (targetFrame == null) { Log.d(TAG, "No free videoFrame found!"); return null; } // compress yuv to jpeg int picWidth = cameraView_.Width(); int picHeight = cameraView_.Height(); YuvImage newImage = new YuvImage(preFrame, ImageFormat.NV21, picWidth, picHeight, null); targetFrame.reset(); boolean ret; inProcessing = true; try { ret = newImage.compressToJpeg(new Rect(0, 0, picWidth, picHeight), mQuality, targetFrame); } catch (Exception ex) { ret = false; } inProcessing = false; // compress success, return ok if (ret == true) { parms.setProperty("mime", "image/jpeg"); InputStream ins = targetFrame.getInputStream(); return ins; } // send 503 error targetFrame.release(); return null; }