6

Ich möchte den Benutzern eine Option zum Einstellen unterschiedlicher Auflösungen geben.setVideoSize() stürzt mit hohen Auflösungen ab

Ich habe diese Lösung versucht

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

Es funktionierte perfekt: schöne Qualität und alles ...

Als ich es

camcorderProfile = CamcorderProfile.get(CamcorderProfile.QUALITY_480P); 
gesetzt

mit FLASH auf, Das Video kam mit grünlichen und einigen anderen seltsamen Farben heraus.

Ich lese online und die Leute sagten, es ist, weil QUALITY_480P wahrscheinlich nicht auf meinem Telefon unterstützt wird. Ok, es macht Sinn.

Daher begann ich auf der anderen Lösung arbeiten, also habe ich versucht ....

recorder.setVideoSize(640, 480); 

Es ist großartig gearbeitet,

aber das Video sah sehr hässlich.

Als nächstes habe ich nach einer unterstützten Videoliste gesucht.

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

Auflösung: 1280x720 ist in der Liste, so

Ich habe versucht, die folgenden Einstellungen:

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

Es gab mir einen Runtime Fehler.

Die Frage ist

Warum kann es mir nicht, die höheren Bildschirmauflösungen, die auf dem Telefon verfügbar sind?

Jede Hilfe wäre sehr dankbar,

Danke.

Edit: hinzugefügt Fehlerprotokoll

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

Da 720p 1280x720 ist, was erwartetest du anders als deinen letzten Codeblock verglichen mit dem ersten Codeblock, den du gesagt hast, hat es gut funktioniert? IOW, wenn Sie 1280x720 ausgeben wollen, haben Sie bereits funktionierenden Code dafür. Darüber hinaus können wir Ihnen nicht mit einer Ausnahme behilflich sein, es sei denn, Sie buchen den Stack-Trace und geben an, welche Zeilen in diesem Stack-Trace mit welchen Zeilen in Ihrem Code in Ihrer Frage übereinstimmen. – CommonsWare

+0

Vielen Dank für den Kommentar. Ich möchte den Benutzern die Möglichkeit geben, unterschiedliche Auflösungen zu wählen. 720P war der harte Code. 720P wird möglicherweise nicht von einem anderen Gerät unterstützt. Außerdem erwähnte ich, dass bei 480P ein Problem mit Flash auftrat. Ich könnte 1920x1080 und den gleichen Fehler versuchen. – Iam1414

+0

Welches Gerät testen Sie? –

Antwort

3

Ich dachte, was das Problem war. Dies kann jemand anderem helfen. Ich landete mit:

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

Code:

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 
.... 
... 

// oder

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

LÖSUNG: Iam1414 Antwort ist richtig.

Ich war den ganzen Tag dabei und so lächerlich wie es scheint, funktioniert seine Technik.

Ich habe versucht, in 4k (3840 x 2160) aufzunehmen, war ich positiv, das Gerät hatte die Fähigkeit auch, aber es beschränkt mich auf 1080 und würde auf etwas höher abstürzen. Die Lösung wurde wie Iam1414 erwähnt.

-Set dem Profil
-Set die Videogröße

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

Leider das Profil einstellen mich sperrt in an H264 codiert, und nicht mir erlaubt, meine Encoder meiner H265 Encoder einstellen nach. Hoffentlich gibt es dafür auch einen Workaround.

Iam1414, Danke. Ich würde Sie wählen, wenn ich den Vertreter hatte :)

Edit: Dies ist ein sehr seltsamer Fehler. Nähte, als ob ich die Problemumgehung nicht mehr verwenden muss. Ich kann in 2160p einfach aufnehmen, indem ich das passende Profil verwende. Ich werde weiter untersuchen, ob es weiterhin ein Problem ist.