安卓:我想录制一个超低质量的视频源,并以离散的数据包发送.有可能吗?你会如何处理它



基本上,我希望能够在不到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);

最新更新