6

Chciałbym dać użytkownikom opcję ustawiania różnych rozdzielczości.setVideoSize() ulega awarii w wysokiej rozdzielczości

Próbowałem to rozwiązanie

camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_720P); 
.... 
.... 
mCamera.unlock(); 
recorder.setCamera(mCamera); 
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
recorder.setProfile(camcorderProfile); 

To działało idealnie: ładne jakości i wszystko ...

Kiedy ustawić go

camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_480P); 

z rzutowej na, film wyszedł z zielonkawymi i dziwnymi kolorami.

Czytam online i ludzie mówili, że to dlatego, że QUALITY_480P prawdopodobnie nie jest obsługiwany przez mój telefon. Ok, to sprawia, że ​​zmysły.

Dlatego zacząłem pracować na inne rozwiązanie, więc próbowałem ....

recorder.setVideoSize(640, 480); 

To było wspaniałe,

ale film wyglądał bardzo brzydkie.

Następnie sprawdziłem listę obsługiwanych filmów.

List<Size> GetSupportedVideosResolutions = params.getSupportedVideoSizes(); 

Rozdzielczość: 1280x720 znajduje się na liście, więc

Próbowałem ustawić:

recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
recorder.setVideoSize(1280,720); 
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 

To dało mi błąd RuntimeException.

Pytanie jest

Dlaczego nie może to niech mi ustawić wyższej rozdzielczości, które są dostępne w telefonie?

Każda pomoc będzie bardzo mile widziane,

Dziękuję.

Edit: dodano dziennik błędów

04-18 17:40:07.391: E/AndroidRuntime(30191): java.lang.RuntimeException: start failed. 
04-18 17:40:07.391: E/AndroidRuntime(30191): at android.media.MediaRecorder.start(Native Method) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at test.com.VideoActivity.prepare_StartRecorder(VideoActivity.java:1009) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at test.com.VideoActivity.Recorder_Start_Stop(VideoActivity.java:1102) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at test.com.VideoActivity$6.onClick(VideoActivity.java:246) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at android.view.View.performClick(View.java:4489) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at android.widget.CompoundButton.performClick(CompoundButton.java:104) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at android.view.View$PerformClick.run(View.java:18803) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at android.os.Handler.handleCallback(Handler.java:730) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at android.os.Looper.loop(Looper.java:137) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at android.app.ActivityThread.main(ActivityThread.java:5493) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at java.lang.reflect.Method.invokeNative(Native Method) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at java.lang.reflect.Method.invoke(Method.java:525) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1209) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1025) 
04-18 17:40:07.391: E/AndroidRuntime(30191): at dalvik.system.NativeStart.main(Native Method) 
+0

Ponieważ 720p to 1280 x 720, to, czego się spodziewałeś, różni się od ostatniego bloku kodu, w porównaniu z pierwszym blokiem kodu, który powiedziałeś, że działał poprawnie? IOW, jeśli chcesz mieć wyjście 1280x720, masz już działający kod dla tego. Poza tym nie możemy ci pomóc z wyjątkiem, chyba że umieścisz ślad stosu i wskażesz, które linie w tym stosie odpowiadają temu, jakie linie w twoim kodzie w pytaniu. – CommonsWare

+0

Dziękuję za komentarz. Chciałbym dać użytkownikom opcję wyboru różnych rozdzielczości. 720P było twardym kodem. 720P może nie być obsługiwane na innym urządzeniu. Wspomniałem również, że wystąpił problem z 480P z włączonym flashowaniem. Mógłbym wypróbować 1920x1080 i ten sam błąd. – Iam1414

+0

Jakie urządzenie testujesz? –

Odpowiedz

3

Pomyślałem, co było problemem. To może pomóc komuś innemu. skończyło się z:

camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_720P); 
recorder.setVideoSize(1280, 720); //NEEDED or it will crash 

Kod:

camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_720P); 
.... 
.... 
mCamera.unlock(); 
recorder.setCamera(mCamera); 
recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
recorder.setProfile(camcorderProfile); 
recorder.setVideoSize(1280 720); //NEEDED or it will crash 
.... 
... 

// lub

CamcorderProfile.get(CamcorderProfile.QUALITY_1080P); 
recorder.setProfile(camcorderProfile); 
recorder.setVideoSize(1920, 1080); //NEEDED or it will crash 
0

ROZWIĄZANIE: odpowiedź Iam1414 jest prawidłowa.

Byłem w tym cały dzień i tak absurdalnie jak szwy, jego technika działa.

Próbowałem nagrywać w rozdzielczości 4k (3840 x 2160), byłem przekonany, że urządzenie też ma taką możliwość, ale ograniczyło mnie do 1080 i spowodowało awarię na czymkolwiek wyższym. Rozwiązanie to zostało wymienione jako Iam1414.

-Set profilu
-Set rozmiar wideo

profile = CamcorderProfile.get(CamcorderProfile.QUALITY_2160P); 
recorder.setProfile(profile); 
recorder.setVideoSize(3820, 2160); //NEEDED or it will crash 

Niestety ustawienie blokuje mi profil w co kodowania H264 i nie pozwolił mi ustawić mój koder do mojego H265 kodera po. Miejmy nadzieję, że istnieje również obejście tego problemu.

Iam1414, Dziękuję. Chciałbym zagłosować na ciebie, gdybym miał powtórzyć :)

Edytuj: To jest bardzo dziwny błąd. Szwy, tak jakbym nie musiał już używać obejścia. Mogę nagrywać w 2160p po prostu używając dopasowanego profilu. Zbadam dalej, jeśli nadal będzie to problemem.

Powiązane problemy