基本上,我希望能够在不到3g的时间内发送几秒钟延迟的"实时"提要。如果质量很低也没关系。如果需要的话,我甚至可以选择4位灰度(不过最好是128-256色)。如果有必要的话,我愿意以>1fps的速度降到160x120。在这种最糟糕的设置下完全未压缩意味着低带宽连接过饱和。
我是否应该将快照视为图像?有人熟悉Bitmapfactory在可能的最低质量JPEG方面的功能吗?
我应该查看PNG还是GIF?我的理解是,坚实的田野最适合这些。我不确定我是否能在很大程度上依赖除大部分天空之外的固体场,因为我希望控制一架发送"视频"的无人机。延迟几秒的Faux视频很好,甚至更可取,因为我预计经常会失去和恢复服务器连接。
我在"3g"上获得了128k的信号,但我不能完全依赖它。我可以在服务器端进行任何必要的解码——这应该不是问题。
所以我问你,Stack,你想通过互联网从智能手机上看到,但不能依赖良好的连接。你是如何处理的?
我认为最简单的方法是获取预览图像并发送这些图像。
这是我发现的一段很好的代码,用于将预览图像捕获为JPEG。它又好又快,应该适合你的需要。我也用它来上传,所以我追求的是非常小的文件大小。
当输出1920x1080图像时,文件大小在150-300KB之间。
camera.setOneShotPreviewCallback(new PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
try {
Camera.Parameters parameters = camera.getParameters();
Size size = parameters.getPreviewSize();
YuvImage image = new YuvImage(data, parameters.getPreviewFormat(),
size.width, size.height, null);
File file = new File(getCacheDir().getPath() + "/out.jpg");
FileOutputStream filecon = new FileOutputStream(file);
image.compressToJpeg(
new Rect(0, 0, image.getWidth(), image.getHeight()), 90,
filecon);
} catch (FileNotFoundException e) {
}
}
});
以下是我如何将预览大小设置为最大设置,但您可以将其设置为较低的大小以加快速度。
Camera.Parameters parameters = camera.getParameters();
List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
imageWidth = previewSizes.get(0).width;
imageHeight = previewSizes.get(0).height;
parameters.setPreviewSize(imageWidth, imageHeight);
camera.setParameters(parameters);