我正在制作视频录制应用程序,我想在其中显示预览,当用户点击录制按钮时,它开始录制,当用户点击停止按钮时,它停止录制.
我在我的表面上进行了视频预览,但是当我按下开始按钮时,它会出现错误“MEDIA.RECORDER.START(Native MEthod)”.
这是我的代码请帮帮我们.
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); surfaceView = (SurfaceView) findViewById(R.id.surface_camera); surfaceHolder = surfaceView.getHolder(); surfaceHolder.addCallback(this); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); Button start =(Button)findViewById(R.id.start); Button stop =(Button)findViewById(R.id.stop); stop.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub camera.stopPreview(); stopRecording(); } }); start.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub startRecording(); } }); } @Override public void surfaceCreated(SurfaceHolder holder) { camera = Camera.open(); if (camera != null){ Camera.Parameters params = camera.getParameters(); camera.setParameters(params); } else { Toast.makeText(getApplicationContext(),"Camera not available!",Toast.LENGTH_LONG).show(); finish(); } } @Override public void surfaceChanged(SurfaceHolder holder,int format,int width,int height) { if (previewRunning){ camera.stopPreview(); } Camera.Parameters p = camera.getParameters(); List<Camera.Size> sizes = p.getSupportedPreviewSizes(); Camera.Size cs = sizes.get(0); p.setPreviewSize(cs.width,cs.height); camera.setParameters(p); try { camera.setPreviewDisplay(holder); camera.startPreview(); previewRunning = true; } catch (IOException e) { Log.e(TAG,e.getMessage()); e.printStackTrace(); } } private MediaRecorder mediaRecorder; private final int maxDurationInMs = 20000; private final long maxFileSizeInBytes = 500000; private final int videoFramesPerSecond = 20; public boolean startRecording(){ try { camera.unlock(); mediaRecorder = new MediaRecorder(); mediaRecorder.setCamera(camera); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); mediaRecorder.setMaxDuration(maxDurationInMs); File tempFile = new File(getCacheDir(),"test.mp4"); mediaRecorder.setOutputFile(tempFile.getPath()); mediaRecorder.setVideoFrameRate(videoFramesPerSecond); mediaRecorder.setVideoSize(surfaceView.getWidth(),surfaceView.getHeight()); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface()); mediaRecorder.setMaxFileSize(maxFileSizeInBytes); mediaRecorder.prepare(); mediaRecorder.start(); return true; } catch (IllegalStateException e) { Log.e(TAG,e.getMessage()); e.printStackTrace(); return false; } catch (IOException e) { Log.e(TAG,e.getMessage()); e.printStackTrace(); return false; } } public void stopRecording(){ mediaRecorder.stop(); camera.lock(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { camera.stopPreview(); previewRunning = false; camera.release(); }
}
记录是
08-31 02:20:11.781: E/MediaRecorder(14519): start Failed: -19 08-31 02:20:11.781: D/AndroidRuntime(14519): Shutting down VM 08-31 02:20:11.781: W/dalvikvm(14519): threadid=1: thread exiting with uncaught exception (group=0x416c9700) 08-31 02:20:11.781: E/AndroidRuntime(14519): FATAL EXCEPTION: main 08-31 02:20:11.781: E/AndroidRuntime(14519): java.lang.RuntimeException: start Failed. 08-31 02:20:11.781: E/AndroidRuntime(14519): at android.media.MediaRecorder.start(Native Method) 08-31 02:20:11.781: E/AndroidRuntime(14519): at com.example.cameratest.MainActivity.startRecording(MainActivity.java:135) 08-31 02:20:11.781: E/AndroidRuntime(14519): at com.example.cameratest.MainActivity$2.onClick(MainActivity.java:61) 08-31 02:20:11.781: E/AndroidRuntime(14519): at android.view.View.performClick(View.java:4240) 08-31 02:20:11.781: E/AndroidRuntime(14519): at android.view.View$PerformClick.run(View.java:17721) 08-31 02:20:11.781: E/AndroidRuntime(14519): at android.os.Handler.handleCallback(Handler.java:730) 08-31 02:20:11.781: E/AndroidRuntime(14519): at android.os.Handler.dispatchMessage(Handler.java:92) 08-31 02:20:11.781: E/AndroidRuntime(14519): at android.os.Looper.loop(Looper.java:137) 08-31 02:20:11.781: E/AndroidRuntime(14519): at android.app.ActivityThread.main(ActivityThread.java:5103) 08-31 02:20:11.781: E/AndroidRuntime(14519): at java.lang.reflect.Method.invokeNative(Native Method) 08-31 02:20:11.781: E/AndroidRuntime(14519): at java.lang.reflect.Method.invoke(Method.java:525) 08-31 02:20:11.781: E/AndroidRuntime(14519): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 08-31 02:20:11.781: E/AndroidRuntime(14519): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 08-31 02:20:11.781: E/AndroidRuntime(14519): at dalvik.system.NativeStart.main(Native Method)