2012-02-15 14 views
5

Básicamente quiero poder enviar unos pocos segundos de alimentación "en vivo" diferida en menos de 3g. Está bien si es de muy baja calidad. Incluso podría ir con escala de grises de 4 bits si fuera necesario (aunque serían preferibles 128-256 colores). Estaría dispuesto a ir tan bajo como 160x120 a> 1 fps si es necesario. Completamente descomprimido en esta configuración tan común significa una conexión de ancho de banda demasiado saturado.Android: deseo grabar un video adicional de baja calidad posible y enviarlo en paquetes discretos. ¿Es posible? ¿Cómo lo abordarías?

¿Debo analizar simplemente las imágenes instantáneas? ¿Alguien está familiarizado con las capacidades de Bitmapfactory con respecto a los archivos JPEG de menor calidad posible?

¿Debo buscar PNG o GIF? Mi entendimiento es que los campos sólidos funcionan mejor con estos. No estoy seguro de poder depender mucho de campos sólidos que no sean una buena parte del cielo, ya que estoy buscando tener control sobre un dron que devuelve "video". El video falso con un retraso de varios segundos es bueno e incluso preferible, ya que espero perder y recuperar la conexión del servidor a menudo.

Me sale como 128k en "3g" con una señal decente, pero no puedo exactamente depender de eso. Puedo hacer cualquier parte necesaria del decodificador del servidor, eso no debería ser un problema.

Así que le pregunto, Pila, que desea ver desde su teléfono inteligente a través de Internet y no puede depender de una buena conexión. ¿Cómo te acercas?

+0

Querrá usar archivos JPEG, la fábrica de mapas de bits debería manejar esto con bastante facilidad, obtener el mapa de bits y simplemente cambiar el tamaño de muestra hasta que alcance una resolución lo suficientemente baja. – stealthcopter

+0

Debe usar archivos JPEG y echar un vistazo a MJPEG – Azlam

Respuesta

1

Creo que el enfoque más simple será capturar las imágenes de vista previa y enviarlas.

Aquí hay una buena pieza de código que encontré para obtener la imagen de vista previa como JPEG. Es agradable y rápido, y debe adaptarse a tus necesidades. También lo estaba usando para cargar, así que buscaba un tamaño de archivo muy pequeño.

Al imprimir imágenes de 1920x1080, el tamaño del archivo estaba entre 150-300 KB.

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) { 
       } 
      } 
     }); 

Así es como me acaba de establecer el tamaño de vista previa para el ajuste máximo, pero se puede establecer a una más baja para acelerar las cosas.

Cuestiones relacionadas