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.

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 …

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.

  • Reproducción de vídeo de Android Things en Raspberry Pi
  • Peer-to-Peer de vídeo de iOS a Android?
  • Android cámara2 api galaxia s7
  • Edición de metadatos de un archivo de vídeo en Android
  • Marco de vídeo de captura de android
  • Intención de Android para reproducir vídeo?
  • Reproducción de vídeos HTML5 en el navegador - ¿Qué funciona para la mayoría de los dispositivos Android?
  • Se ha producido un error al cargar vídeo en html5 phonegap
  • Android: cómo reproducir video mp4 desde la URL?
  • MediaMuxer no puede hacer MP4 que son streamable
  • Android: streaming de video por servidor HTTPS local: certificado SSL rechazado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.