基本上,我希望能够在少于3g的时间内发送几秒钟延迟的“实时”馈送。如果它的质量很低也没关系。如果有必要,我甚至可以使用4位灰度(虽然128-256色会更好)。如果有必要,我愿意在大于1fps的情况下将分辨率降低到160x120。在这种最粗糙的设置下完全未压缩意味着过饱和的低带宽连接。
我是否应该简单地将快照视为图像?有没有人熟悉Bitmapfactory关于最低质量JPEG的功能?
我应该查看PNG还是GIF?我的理解是,可靠的字段最适合使用这些。我不确定除了天空的一大部分之外,我还能不能很好地依赖于实心场,因为我希望能控制一架发回“视频”的无人机。有几秒钟延迟的人造视频是很好的,甚至是更好的,因为我预计服务器连接经常丢失和恢复。
我在"3g“上得到了128k的信号,但我不能完全依靠它。我可以做任何必要的解码服务器端-这应该不是一个问题。
所以我问你,Stack,你想从你的智能手机上通过互联网观看,而不能依赖于良好的连接。你是如何处理它的?
发布于 2012-05-21 09:53:44
我认为最简单的方法是抓取预览图像并发送这些图像。
这是我找到的一段很好的代码,用来抓取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);https://stackoverflow.com/questions/9296373
复制相似问题