1
アプリ内で動画を記録するアンドロイドアプリを開発しています。 ビデオをよく記録し、ファイルに保存します。 startpreview関数が失敗し、記録中にプレビューが表示されません。Androidカメラの記録は良好ですが、startPreviewは失敗します。
これはコードです:
private void startVRec(){
//final View view = inflater.inflate(R.layout.fragment_conversation, container, false);
try {
vrec = new MediaRecorder();
mCamera = Camera.open();
params = mCamera.getParameters();
Camera.Size size=getOptimalPreviewSize(params.getSupportedPreviewSizes(), 240, 240);
params.setPreviewSize(size.height, size.width);
mCamera.setParameters(params);
vrec.setPreviewDisplay(surfaceHolder.getSurface());
mCamera.unlock();
vrec.setCamera(mCamera);
camera_layout.setVisibility(View.VISIBLE);
surfaceView.setVisibility(View.VISIBLE);
} catch (Exception e) {
}
}
私はインターネットでほとんどの例で見たように、startpreview機能がsurfaceChangedイベントで呼び出されます。
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
//Camera.Size previewSize=null;
try {
if (mCamera != null)
{
Camera.Size
size=getOptimalPreviewSize(params.getSupportedPreviewSizes(), 240, 240);
params.setPreviewSize(size.height, size.width);
mCamera.setParameters(params);
mCamera.startPreview();
}
} catch (Exception e) {
Toast.makeText(activity, "error "+ e.getMessage(), Toast.LENGTH_LONG).show();
}
}
そして、それはsurfaceCreatedイベント
に録音を開始public void surfaceCreated(SurfaceHolder holder){ if(mCamera!= null){
try {
vrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
vrec.setAudioSource(MediaRecorder.AudioSource.MIC);
vrec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
vrec.setVideoFrameRate(30);
vrec.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
vrec.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
vrec.setPreviewDisplay(surfaceHolder.getSurface());
vrec.setOutputFile(FileBackend.getConversationsImageDirectory() + System.currentTimeMillis() + ".mp4");
vrec.prepare();
vrec.start();
}
catch(IllegalStateException e2){
Toast.makeText(activity,"err cam stop ill :"+ e2.getMessage(),Toast.LENGTH_LONG).show();
}
catch (Exception e) {
Toast.makeText(activity,"err surface created :"+ e.getMessage(),Toast.LENGTH_LONG).show();
}
}
else {
Toast.makeText(activity, "Camera not available!", Toast.LENGTH_LONG).show();
}
}
のための私はのonCreateに活動の()イベントを、それをすでに使用しています。 – siavash