MediaRecorder – setOrientationHint () excepción / error
He estado tratando de solucionar este problema con la MediaRecorder
vídeo MediaRecorder
y fuera de semanas. No puedo obtener la línea setOrientationHint(90)
para trabajar en un físico Samsung Galaxy S1 con Android 2.3.3
( SDK 10
). Esto debería funcionar bien en cualquier cosa por encima de SDK 9
.
Cuando llamo setOrientationHint(90)
obtengo una excepción: setParameters(video-param-rotation-angle-degrees=90) failed
. Detalles detallados del error a continuación.
- Grabación de video en un buffer circular en Android
- Barra de búsqueda personalizada para un archivo de vídeo en streaming en android
- Detección de números y texto posible con opencv android mientras captura de video?
- Cómo agregar reproducción de vídeo y recursos a la aplicación Android
- Cómo manejar la orientación del vídeo desde dispositivos móviles
Como resultado, estoy obligado a comprobar SDK y sólo llamar a setOrientationHint()
si SDK> 10. Es decir, este código funciona bien en todas las demás versiones de SDK por encima de 10 que he probado. He probado en Samsung Galaxy Nexus con 4.2.2
y funciona bien.
Aquí está mi código: (cortado para mostrar el orden de las llamadas a MediaRecorder
)
mCamera = getCameraInstance(); mCamera.setPreviewDisplay(holder); mMediaRecorder = new MediaRecorder(); mMediaRecorder.setOrientationHint(90); // Step 1: Unlock and set camera to MediaRecorder mCamera.unlock(); mMediaRecorder.setCamera(mCamera); // Step 2: Set sources mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // Step 3: recording setup mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mMediaRecorder.setVideoSize(720,480); mMediaRecorder.setVideoFrameRate(15); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); // Step 4: Set output file currentOutputFileName = DIRECTORY_PATH + "zzzz"+ iCount +".mp4"; mFile = new File(currentOutputFileName); mMediaRecorder.setOutputFile(mFile.getAbsolutePath()); // Step 4.1: Set recording length mMediaRecorder.setMaxDuration(10000); // Step 5: Set the preview output mMediaRecorder.setPreviewDisplay(cameraView.getHolder().getSurface()); // Step 6: Prepare configured MediaRecorder mMediaRecorder.prepare();
¿Alguien ha tenido este problema? No puedo encontrar a nadie está experimentando esto y no puedo creer thats el caso. ¿Es posible que su apenas un australiano Samsung Galaxy S1 corriendo 2.3.3 problema?
He visto referencias a personas que tienen problemas donde esa línea se ejecuta, pero con el video real no gira, pero en realidad reciben una Excepción – la línea no se ejecuta en absoluto. He comprobado y revisado el orden de comando y parece bien. Creo que lo más importante es que el setOrientationHint()
produce antes de que mediaRecorder.prepare()
Aquí está el error:
AuthorDriver::setParameter() unrecognized key "video-param-rotation-angle-degrees" setParameter(video-param-rotation-angle-degrees = 90) failed with result -5 Ln 1047 handleSetParameters("video-param-rotation-angle-degrees=90") error Command (12) failed setParameters(video-param-rotation-angle-degrees=90) failed: -2147483648 Shutting down VM threadid=1: thread exiting with uncaught exception (group=0x40015578) FATAL EXCEPTION: main java.lang.RuntimeException: setParameter failed. at android.media.MediaRecorder.setParameter(Native Method) at android.media.MediaRecorder.setOrientationHint(MediaRecorder.java:341) at com.on3x.emergency.Recorder.prepareVideoRecorder(Recorder.java:196) at com.on3x.emergency.Recorder.startRecording(Recorder.java:90) at com.on3x.emergency.GUI.RecordActivity$1.onClick(RecordActivity.java:86) at android.view.View.performClick(View.java:2538) at android.view.View$PerformClick.run(View.java:9152) at android.os.Handler.handleCallback(Handler.java:587) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:123) at android.app.ActivityThread.main(ActivityThread.java:3687) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) at dalvik.system.NativeStart.main(Native Method) Force finishing activity com.on3x.emergency/.GUI.RecordActivity Dumpstate > /data/log/dumpstate_app_error
Si alguien puede dar cualquier ayuda sería muy apreciado. Por ahora he tenido que decirle a nuestro cliente que no es algo que pueda arreglar en este momento y Video tendrá que ser de lado.
¿Hay otra manera de girar videos? Básicamente, mi aplicación graba videos y los sube al servidor. Por el momento este teléfono 2.3.3 no puede rotar el video para que su subida lateral
Aclamaciones
Editar: Este es el código que ahora tengo en su lugar. Según lo sugerido por Ashish Gupta, AuthorDriver no contiene el parámetro apropiado en el Samsung Galaxy S1 (modelo australiano) con la versión 2.3.3
if (android.os.Build.VERSION.SDK_INT>=9) { // attempt to rotate the video 90 degrees. try { mMediaRecorder.setOrientationHint(90); Utils.logLine("orientation rotated 90", this, Utils.LOG_TYPE_DEBUG); } catch (Exception e) { Utils.logLine("error trying setOrientationHint"+ e.getMessage(), this, Utils.LOG_TYPE_ERROR, e); e.printStackTrace(); } } else { Utils.logLine("orientation set skipped ", this, Utils.LOG_TYPE_DEBUG); }
Nota: Utils.logLine es simplemente una función de utilidad que tengo para imprimir instrucciones de depuración y error para registrar. Espero que eso pueda ayudar a alguien más …
- Cómo transmitir vídeo desde Internet a través de nanoHTTPd a VideoView
- Cómo vivir la transmisión desde Android
- ExoPlayer - reproduce 10 archivos uno tras otro
- Android MediaStore insertVideo
- ¿Cómo usar la decodificación acelerada por hardware en Android?
- cordova android - cómo jugar videofile que se encuentra dentro del proyecto en sí
- Cómo reproducir vídeo mp4 con intención de mi aplicación Android? ¿Esto es posible?
- Aplicación de la aplicación demo de Android app?
Mirando los registros que ha conectado, parece que Samsung Galaxy S1 con Android 2.3.3
no es compatible con setOrientationHint
. Este es el código de AuthorDriver.cpp
PVMFStatus AuthorDriver::setParameter( const String8& key, const String8& value) { if (key == "max-duration") { int64_t max_duration_ms; if (safe_strtoi64(value.string(), &max_duration_ms)) { return setMaxDurationOrFileSize( max_duration_ms, true /* limit_is_duration */); } } else if (key == "max-filesize") { int64_t max_filesize_bytes; if (safe_strtoi64(value.string(), &max_filesize_bytes)) { return setMaxDurationOrFileSize( max_filesize_bytes, false /* limit is filesize */); } } else if (key == "audio-param-sampling-rate") { int64_t sampling_rate; if (safe_strtoi64(value.string(), &sampling_rate)) { return setParamAudioSamplingRate(sampling_rate); } } else if (key == "audio-param-number-of-channels") { int64_t number_of_channels; if (safe_strtoi64(value.string(), &number_of_channels)) { return setParamAudioNumberOfChannels(number_of_channels); } } else if (key == "audio-param-encoding-bitrate") { int64_t audio_bitrate; if (safe_strtoi64(value.string(), &audio_bitrate)) { return setParamAudioEncodingBitrate(audio_bitrate); } } else if (key == "video-param-encoding-bitrate") { int64_t video_bitrate; if (safe_strtoi64(value.string(), &video_bitrate)) { return setParamVideoEncodingBitrate(video_bitrate); } } // Return error if the key wasnt found LOGE("AuthorDriver::setParameter() unrecognized key \"%s\"", key.string()); return PVMFErrArgument; }
La clave de video-param-rotation-angle-degrees
no es compatible con Samsung Galaxy S1 aith Android 2.3.3
Usted puede comparar los registros entre Nexus 4.2.2 y S1 2.3.3 y ver si usted ve cualquier diferencia notable.
- Vista de lista con elementos de vista personalizados con superposiciones parciales (Android)
- Utilizando la navegación de lista y las pestañas con ActionBarSherlock?