2013-04-23 12 views
9

Cześć Eksperci wideo z Androidem :)W jaki sposób mogę przechwytywać wideo niskiej rozdzielczości na Androida w niezawodny sposób na wielu urządzeniach?

Pracuję nad aplikacją dla systemu Android, która pozwala użytkownikowi przechwytywać wideo i przesyłać je na zdalny serwer (jest bardziej zaangażowany, ale reszta aplikacji nie jest ważna). Ze względu na wymagania dotyczące przesyłania ważne jest, aby film wideo miał rozsądny rozmiar, a nie bardzo wysoką rozdzielczość. Załóżmy, że maks. 680 x 480 lub 10 MB/minutę. To nie jest problem na urządzeniach Apple.

Miałem coś, co można opisać jedynie jako kompletny koszmar, próbujący bezbłędnie przechwytywać wideo z dość niską przepływnością na różnych urządzeniach z Androidem.

Jak rozumiem istnieją dwa sposoby przechwytywania wideo na Androida:

1) za pomocą mediów Recorder/kamera API

2) za pomocą zamiar otworzyć aplikację kamery Video Capture

Opcja 1) zapewnia największą elastyczność i pozwala łatwo zmienić rozdzielczość przechwytywania. Jednak interfejs API aparatu z Androidem NIE jest niezawodny na wielu urządzeniach i mam bardzo dobre informacje (w tym od osoby, która kontaktowała się z Google w tym temacie), że jeśli przechwycisz wideo za pomocą tego interfejsu API, nastąpi awaria na dobre 50% urządzenia tam. Jest powód, dla którego Zoom Camera FX używa intencji do przechwytywania wideo. Zoom Camera (inna aplikacja) wydaje się używać Media Recorder, ale ma wiele złych opinii dotyczących awarii wideo lub nie działa.

Opcja 2) działa dobrze na wielu urządzeniach, ponieważ korzysta z wbudowanej aplikacji na urządzeniu. Problem polega na tym, że nie masz żadnej kontroli rozdzielczości, jest wskazówka dotycząca jakości, ale aplikacja aparatu zwykle zignoruje to. Mój Samsung Galaxy S3 domyślnie nagrywa wideo z prędkością około 2 Mb/s. To jest zbyt wysoka rozdzielczość. Wbudowana aplikacja może oczywiście zmienić rozdzielczość, ale zależy to od działania użytkownika, którego trudno kontrolować.

Rozumiem, że mogę użyć biblioteki takiej jak ffmpeg do zmiany rozdzielczości wideo po przechwyceniu. Jednak wymaga to ode mnie skompilowania biblioteki dla Androida, a także, że zostałem poinformowany, że aby legalnie używać dekodowania/kodowania kodeków na urządzeniu, musisz uiścić opłaty licencyjne w wysokości około 1 $ za kopię aplikacji. Ponieważ ta aplikacja będzie dostępna za darmo, nie będzie to możliwe.

I tu właśnie jestem. Szukałem odpowiedzi długo i wysoko, ale nie mogę się dowiedzieć, jak skutecznie przechwytywać wideo w niskiej rozdzielczości za pomocą Androida.

Każda pomoc bardzo ceniona!

Matthew

+0

Czy znalazłeś sposób na obejście problemów? Próbuję opcji 2 i utknąłem szukając odpowiedzi ... – Salmaan

Odpowiedz

1

Jeśli kierujesz API 18 i więcej, można użyj razem Camera i MediaCodec, aby nagrywać z dowolnym rozmiarem i przepływnością. Zobacz na przykład aktywność "Pokaż + przechwytywanie kamery" w Grafika.

Możesz sprawdzić platform version dashboard, aby oszacować wielkość rynku docelowego na danym poziomie interfejsu API.

2

można dokładnie określić, że w klasie MediaRecorder poprzez ustawienie rozmiaru ramki (width x height), metodę obsługi setVideoSize(int width, int height), tym mniejszy rozmiar ramki mniejszy film, odnosi się to do wszystkich telefonów z systemem Android, nie trzeba będzie zmienić rozmiar ramki na urządzenie lub możesz kodować szybkość transmisji, kontroluje to jakość kompresji każdej klatki. Użyj niższej szybkości transmisji bitów, co powoduje wyższą kompresję, co z kolei prowadzi do niższej jakości i niższego rozmiaru pliku wideo. Przyjrzyj się klasie MediaRecorder.

Powiązane problemy