2012-02-15 6 views
5

Zasadniczo chcę być w stanie wysłać kilka sekund opóźnienia "na żywo" na mniej niż 3g. Jest ok, jeśli jest bardzo niska jakość. Mógłbym nawet przejść z 4-bitową skalą szarości, jeśli to konieczne (chociaż najlepiej byłoby 128-256 kolorów). Byłbym gotów zejść tak nisko jak 160x120 przy> 1 fps, jeśli to konieczne. Całkowicie nieskompresowane w tym najgłupszym ustawieniu oznacza nadmierne nasycenie połączenia o niskiej przepustowości.Android: Chcę nagrać kanał wideo o niskiej jakości i wysłać go w osobnych pakietach. Czy to możliwe? Jak podejdziesz do tego?

Czy powinienem zaglądać w zwykłe migawki jako obrazy? Czy ktokolwiek zna możliwości Bitmapfactory w odniesieniu do plików JPEG o najniższej jakości?

Czy powinienem zaglądać do plików PNG lub GIF? Rozumiem, że solidne pola najlepiej z nimi współpracują. Nie jestem pewien, czy mogę polegać na solidnych polach innych niż dobry fragment nieba, ponieważ chcę mieć kontrolę nad dronem, który odsyła "wideo". Sztuczne wideo z kilkuminutowym opóźnieniem jest dobre, a nawet lepsze, ponieważ często oczekuję utraty i odzyskania połączenia z serwerem.

uzyskać jak 128k się na „3G” z przyzwoitym sygnału, ale nie mogę dokładnie zależy od tego. Mogę wykonać dowolną niezbędną stronę serwera dekodującego - to nie powinno być problemu.

Więc pytam cię, Stos, chcesz zobaczyć ze smartfonu za pośrednictwem Internetu i nie może zależeć od dobrego połączenia. Jak do niego podchodzisz?

+0

Będziesz chcąc skorzystać JPEG, fabryka bitmap powinna obsługiwać to dość łatwo dostać bitmapę i wystarczy zmienić wielkość próby w dół, aż dojdziesz dość niskiej rozdzielczości. – stealthcopter

+0

Powinieneś użyć plików JPEG i spojrzeć na MJPEG – Azlam

Odpowiedz

1

Myślę, że najprostszym podejściem będzie chwytanie obrazów podglądu i wysyłanie ich.

Oto ładny fragment kodu, który znalazłem do pobrania obrazu podglądu jako JPEG. Jest to ładne i szybkie i powinno pasować do twoich potrzeb. Używałem go również do przesyłania, więc byłem po bardzo małym rozmiarze pliku.

Podczas wyprowadzania 1920x1080 obrazów rozmiar pliku był gdzieś pomiędzy 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) { 
       } 
      } 
     }); 

Oto jak ja po prostu ustawić rozmiar podglądu w maksymalnym ustawieniu, ale można ją ustawić na niższą, aby przyspieszyć.

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); 
Powiązane problemy