2010-10-21 23 views
11

Czy Android MediaRecorder może przechwytywać wideo o rozdzielczości wyższej niż 320*240?Problem z Androidem MediaRecorder setVideoSize()

Kiedy użyłem MediaRecorder::setVideoSize() do ustawienia rozmiaru wideo, przechwycone wideo były w rozdzielczości 320*240. Co gorsze, im wyżej nie można uzyskać wyraźnego obrazu, były w jakiś sposób zielonkawe. (Enkoder stosowany jest h263, format jest mpeg4)

wersja Android stosowany jest tu 1.6

mógłbyś ktoś mi pomóc?

Odpowiedz

2

Najpierw będziesz chciał ustalić, co obsługuje twoja kamera. Wypróbuj:

  List<String> anti = params.getSupportedAntibanding(); 
    List<String> color = params.getSupportedColorEffects(); 
    List<String> focus = params.getSupportedFocusModes(); 
    List<String> flash = params.getSupportedFlashModes(); 
    List<Size> previewSize = params.getSupportedPreviewSizes(); 
    List<Size> sizes = params.getSupportedPictureSizes(); 
    List<Integer> frameRates = params.getSupportedPreviewFrameRates(); 
    List<Integer> pictureFormats = params.getSupportedPictureFormats(); 
    List<String> scene = params.getSupportedSceneModes(); 
    List<String> white = params.getSupportedWhiteBalance(); 

Dzięki temu dowiesz się wszystkich obsługiwanych parametrów aparatu. Drugi Upewnij się, że zainicjowałeś MediaRecorder prawidłowo zobacz dokumentację google dla porządku, w którym musisz ustawić MediaRecorder. Ponadto, jeśli ustawienia Camera.setPreviewSize i MediaRecorder.setVideoSize są różne, może to powodować dziwne zachowanie.

+0

Mam nadzieję, że oni go napisać (o VideoSize i PreviewSize) na ich dokumentacji API. – artsylar

+0

nie jest setVideoSize() tylko wywołuje setPreviewSize()? Oznacza to, że na końcu będą one miały tę samą wartość, o ile filmowanie jest jednym z obsługiwanych rozmiarów podglądu. – artsylar

+0

Co to są "parametry"? – Felix

7

Miałem problem podobny do opisanego tutaj. Okazało się, że musiałem trochę zmienić strukturę kodu, zanim mogłem dostosować rozmiar wideo.

Ważne jest, aby setVideoSize() został wywołany przed setVideoEncoder(). Nie mogę znaleźć tego w dokumentacji, ale rozwiązał on moje problemy z ustawianiem określonej rozdzielczości wideo. Należy również pamiętać, że funkcja setOutputFormat() powinna zostać wywołana przed funkcją setVideoSize().

Tak jak z drugiej strony, to samo dotyczy setVideoFrameRate(). Jeśli nie zostanie wywołana przed setVideoEncoder(), nie będzie to miało żadnego wpływu.

ten został przetestowany z Androidem 2.3.3

Oto przykładowy kod:

recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
recorder.setVideoSize(640,480); 
recorder.setVideoFrameRate(30); 
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);  
+2

Daje mi to błąd 'E/MediaRecorder: start nie powiódł się: -19'. –

+0

Ta odpowiedź zasługuje na więcej upvotes – Bhargav