Android:我想录制一个额外的低质量视频,并以离散数据包的形式发送.可能吗?你会怎么做?

Ada*_*dam 5 compression video android bandwidth bitmapfactory

基本上我希望能够在不到3g的时间内发送几秒延迟的"实时"馈送.如果质量很差,那就没关系.如果需要,我甚至可以使用4位灰度(尽管128-256种颜色更可取).如果有必要,我愿意以> 1fps的速度低至160x120.在这种最笨重的设置中完全未压缩意味着过度饱和的低带宽连接.

我应该简单地将快照视为图像吗?是否有人熟悉Bitmapfactory的功能,以获得最低质量的JPEG?

我应该查看PNG或GIF吗?我的理解是,固体领域最适合这些.我不确定我是否可以依赖固体场而不是天空的很大一部分,因为我希望控制一架发送回"视频"的无人机.具有几秒延迟的虚拟视频很好,甚至更好,因为我预计会丢失并重新获得服务器连接.

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

所以我问你,Stack,你想通过互联网从你的智能手机上看到,并且不能依赖于良好的连接.你怎么接近它?

Sco*_*ott 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) {
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

以下是我将预览尺寸设置为最大设置的方法,但您可以将其设置为较小的尺寸以加快速度。

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);
Run Code Online (Sandbox Code Playgroud)