2017-07-20 8 views
0

私はcom.android.hardware.Cameraパッケージでビデオを撮ろうとしています。Android - ビデオ撮影エラー-212

MediaRecorderが起動しないようです。 Intent Serviceでビデオを撮りたいです(画面の出力をプレビューせずに)。 ここに私の意図のメイン機能があります。すべての必要な権限がマニフェストに設定されている

E/MediaRecorder: start failed: -22 
W/System.err: java.lang.RuntimeException: start failed. 
W/System.err:  at android.media.MediaRecorder.start(Native Method) 
W/System.err:  at com.example.nathan.def_calc.VideoRecorder.onCreate(VideoRecorder.java:61) 
W/System.err:  at android.app.ActivityThread.handleCreateService(ActivityThread.java:3192) 
W/System.err:  at android.app.ActivityThread.-wrap5(ActivityThread.java) 
W/System.err:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1568) 
W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
W/System.err:  at android.os.Looper.loop(Looper.java:154) 
W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:6121) 
W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889) 
W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779) 

:私は意図を起動したときに

private  MediaRecorder mMediaRecorder; 
private  Camera   cam = null; 
public static boolean  isRecording = false; 
public static boolean  isRunning = false; 

public void onCreate() { 
    cam = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT); 
    try { 
     cam.unlock(); 
     mMediaRecorder.setCamera(cam); 
     cam.lock(); 
    } catch (Exception e){ 
     e.fillInStackTrace(); 
    } 
    isRunning = true; 
    // Step 2: Set sources 
    mMediaRecorder = new MediaRecorder(); 
    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); 
    // Step 4: Set output file 
    String fileName = "/sdcard/" + RandomNameGenerator.setSecureFilename(".video"); 
    mMediaRecorder.setOutputFile(fileName); 
    // Step 6: Prepare configured MediaRecorder 
    try { 
     mMediaRecorder.prepare(); 
    } catch (IllegalStateException e) { 
     Log.d("DEBUG", "IllegalStateException preparing MediaRecorder: " + e.getMessage()); 
    } catch (IOException e) { 
     Log.d("DEBUG", "IOException preparing MediaRecorder: " + e.getMessage()); 
    } 
    isRecording = true; 
    Log.d("SERVICE VIDEO", "IS RECORDING"); 
    try { 
     mMediaRecorder.start(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

public void onDestroy(){ 
    isRecording = false; 
    if (mMediaRecorder != null) { 
     mMediaRecorder.reset(); // clear recorder configuration 
     mMediaRecorder.release(); // release the recorder object 
     mMediaRecorder = null; 
     isRunning = false; 
    } 
} 

そして、ここでは、ログです。 どこかの種類のバッファを宣言する必要がありますか?私は、ビデオバッファをどのように作成するかについて、APIのドキュメントは見つかりませんでした。 誰かが解決策を持っていますか?

答えて

0

私はこの問題を解決しました。明白な問題は、ビデオ用のバッファがないことでした。私は、Cameraオブジェクトのバッファに対応するSurfaceが必要であることを発見しました。 onCreate()に追加:

sf.release(); 
sft.release(); 

sft = new SurfaceTexture(0); 
sf = new Surface(sft); 
mMediaRecorder.setPreviewDisplay(sf); 

onDestroy()機能では、トリックをしました。

関連する問題