안드로이드 개발 질문/답변
(글 수 45,052)
package geeks.VideoRecord;
import java.io.File; import java.io.IOException;
import android.app.Activity;
import android.hardware.Camera;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.MediaController;
import android.widget.VideoView;
import android.hardware.Camera;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.MediaController;
import android.widget.VideoView;
public class VideoRecord extends Activity implements SurfaceHolder.Callback {
/** Called when the activity is first created. */
private MediaRecorder recorder = null;
private static final String OUTPUT_FILE = "/sdcard/videooutput.mp4";
private static final String TAG = "RecordVideo";
private VideoView videoView = null;
private Button startButton = null;
private Camera mCamera;
private SurfaceView preView;
/** Called when the activity is first created. */
private MediaRecorder recorder = null;
private static final String OUTPUT_FILE = "/sdcard/videooutput.mp4";
private static final String TAG = "RecordVideo";
private VideoView videoView = null;
private Button startButton = null;
private Camera mCamera;
private SurfaceView preView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.videorecorder);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.videorecorder);
startButton = (Button) findViewById(R.id.record);
final Button stopButton = (Button) findViewById(R.id.stop);
final Button playButton = (Button) findViewById(R.id.play);
final Button stopPlayButton = (Button) findViewById(R.id.play_stop);
// final SurfaceView surface = new SurfaceView(getApplicationContext());
final Button stopButton = (Button) findViewById(R.id.stop);
final Button playButton = (Button) findViewById(R.id.play);
final Button stopPlayButton = (Button) findViewById(R.id.play_stop);
// final SurfaceView surface = new SurfaceView(getApplicationContext());
preView = (SurfaceView) findViewById(R.id.preview);
videoView = (VideoView) this.findViewById(R.id.videoView);
videoView = (VideoView) this.findViewById(R.id.videoView);
// final SurfaceHolder surfaceHolder = surface.getHolder();
// surfaceHolder.addCallback(this);
// surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
final SurfaceHolder preViewHolder = preView.getHolder();
preViewHolder.addCallback(this);
preViewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// final SurfaceHolder holder = videoView.getHolder();
// holder.addCallback(this);
// holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// FrameLayout frame = (FrameLayout) findViewById(R.id.frame);
// frame.addView(surface);
// surfaceHolder.addCallback(this);
// surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
final SurfaceHolder preViewHolder = preView.getHolder();
preViewHolder.addCallback(this);
preViewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// final SurfaceHolder holder = videoView.getHolder();
// holder.addCallback(this);
// holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
// FrameLayout frame = (FrameLayout) findViewById(R.id.frame);
// frame.addView(surface);
startButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
// startRecording(surfaceHolder);
startRecording(preViewHolder);
stopButton.setVisibility(v.VISIBLE);
startButton.setVisibility(v.GONE);
public void onClick(View v) {
// TODO Auto-generated method stub
try {
// startRecording(surfaceHolder);
startRecording(preViewHolder);
stopButton.setVisibility(v.VISIBLE);
startButton.setVisibility(v.GONE);
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e(TAG, e.toString());
e.printStackTrace();
}
}
});
// TODO Auto-generated catch block
Log.e(TAG, e.toString());
e.printStackTrace();
}
}
});
stopButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
stopRecording();
public void onClick(View v) {
// TODO Auto-generated method stub
try {
stopRecording();
} catch (Exception e) {
// TODO Auto-generated catch block
Log.e(TAG, e.toString());
e.printStackTrace();
}
stopButton.setVisibility(v.GONE);
startButton.setVisibility(v.VISIBLE);
preView.setVisibility(v.GONE);
// TODO Auto-generated catch block
Log.e(TAG, e.toString());
e.printStackTrace();
}
stopButton.setVisibility(v.GONE);
startButton.setVisibility(v.VISIBLE);
preView.setVisibility(v.GONE);
}
});
});
playButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
playVideo();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
stopPlayButton.setVisibility(v.VISIBLE);
videoView.setVisibility(v.VISIBLE);
playButton.setVisibility(v.GONE);
public void onClick(View v) {
// TODO Auto-generated method stub
try {
playVideo();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
stopPlayButton.setVisibility(v.VISIBLE);
videoView.setVisibility(v.VISIBLE);
playButton.setVisibility(v.GONE);
}
});
});
stopPlayButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
stopVideo();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
public void onClick(View v) {
// TODO Auto-generated method stub
try {
stopVideo();
} catch (Exception e) {
Log.e(TAG, e.toString());
}
playButton.setVisibility(v.VISIBLE);
stopPlayButton.setVisibility(v.GONE);
videoView.setVisibility(v.GONE);
preView.setVisibility(v.VISIBLE);
}
});
stopPlayButton.setVisibility(v.GONE);
videoView.setVisibility(v.GONE);
preView.setVisibility(v.VISIBLE);
}
});
}
protected void stopVideo() {
// TODO Auto-generated method stub
videoView.stopPlayback();
}
// TODO Auto-generated method stub
videoView.stopPlayback();
}
protected void playVideo() {
// TODO Auto-generated method stub
MediaController mc = new MediaController(this);
videoView.setMediaController(mc);
videoView.setVideoPath(OUTPUT_FILE);
videoView.start();
// TODO Auto-generated method stub
MediaController mc = new MediaController(this);
videoView.setMediaController(mc);
videoView.setVideoPath(OUTPUT_FILE);
videoView.start();
}
protected void stopRecording() throws Exception {
// TODO Auto-generated method stub
if (recorder != null) {
// TODO Auto-generated method stub
if (recorder != null) {
recorder.stop();
recorder.reset();
recorder.release();
}
recorder.reset();
recorder.release();
}
}
/**
* 녹화를 시작한다.
*
* @param holder
* 카메라
* @throws Exception
*/
protected void startRecording(SurfaceHolder holder) throws Exception {
// TODO Auto-generated method stub
if (recorder != null) {
recorder.stop();
recorder.release();
}
* 녹화를 시작한다.
*
* @param holder
* 카메라
* @throws Exception
*/
protected void startRecording(SurfaceHolder holder) throws Exception {
// TODO Auto-generated method stub
if (recorder != null) {
recorder.stop();
recorder.release();
}
File outFile = new File(OUTPUT_FILE);
if (outFile.exists()) {
outFile.delete();
}
recorder = new MediaRecorder();
recorder.reset();
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoSize(300, 200);
recorder.setVideoFrameRate(15);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setMaxDuration(20000);// 우선 20초
// recorder.setPreviewDisplay(holder.getSurface());
recorder.setOutputFile(OUTPUT_FILE);
outFile.delete();
}
recorder = new MediaRecorder();
recorder.reset();
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoSize(300, 200);
recorder.setVideoFrameRate(15);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setMaxDuration(20000);// 우선 20초
// recorder.setPreviewDisplay(holder.getSurface());
recorder.setOutputFile(OUTPUT_FILE);
try {
recorder.prepare();
recorder.start();
} catch (Exception e) {
// TODO: handle exception
Log.e(TAG, e.toString());
e.printStackTrace();
}
}
recorder.prepare();
recorder.start();
} catch (Exception e) {
// TODO: handle exception
Log.e(TAG, e.toString());
e.printStackTrace();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (recorder != null) {
recorder.release();
}
protected void onDestroy() {
super.onDestroy();
if (recorder != null) {
recorder.release();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
Log.d(TAG, "Enter surfaceChanged ---------------------------");
Camera.Parameters parameters = mCamera.getParameters();
mCamera.setParameters(parameters);
mCamera.startPreview();
}
mCamera.setParameters(parameters);
mCamera.startPreview();
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera = Camera.open();
// startButton.setEnabled(true);
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera = Camera.open();
// startButton.setEnabled(true);
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException exception) {
mCamera.release();
mCamera = null;
// TODO: add more exception handling logic here
}
mCamera.setPreviewDisplay(holder);
} catch (IOException exception) {
mCamera.release();
mCamera = null;
// TODO: add more exception handling logic here
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera.stopPreview();
mCamera.release();
mCamera = null;
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
recoder.prepare에서 예외처리가 되네요
기본 화면에서 프리뷰는 잘 뜨고 있는데
왜 녹화가 되지 않는지를 모르겟네요 ㅠ