5

基本上我希望能够在小于 3g 的情况下发送几秒钟延迟的“实时”提要。如果它的质量非常低,那也没关系。如有必要,我什至可以使用 4 位灰度(尽管最好使用 128-256 色)。如有必要,我愿意以 > 1fps 的速度低至 160x120。在这种最糟糕的设置下完全未压缩意味着过饱和的低带宽连接。

我应该考虑简单地将快照作为图像吗?是否有人熟悉 Bitmapfactory 在可能的最低质量 JPEG 方面的功能?

我应该研究 PNG 还是 GIF?我的理解是,固体领域最适合这些。我不确定我能否在很大程度上依赖于除了大部分天空之外的固体场,因为我希望能够控制一架发回“视频”的无人机。具有几秒钟延迟的人造视频很好,甚至更可取,因为我预计会经常丢失和重新获得服务器连接。

我在“3g”上获得了 128k 的信号,信号不错,但我不能完全依赖它。我可以做任何必要的解码服务器端 - 这不应该是一个问题。

所以我问你,Stack,你想通过互联网从智能手机上看,不能依赖良好的连接。你如何处理它?

4

1 回答 1

1

我认为最简单的方法是抓取预览图像并发送它们。

这是我发现的一段很好的代码,用于将预览图像作为 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);
于 2012-05-21T01:53:43.663 回答