package com.example.administrator.videotest;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.hardware.Camera;
import android.media.MediaRecorder;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.widget.VideoView;
import java.io.File;
import java.io.IOException;
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {
static Context ctx;
//String Path = "/sdcard/cameratest.mp4";
String Path = Environment.getExternalStorageDirectory() + "/txtbox/cameratest.mp4";
private MediaRecorder mRecoder = null;
private VideoView mVideoView = null;
private Camera mCamera;
private static final int RECORD_TIME = 10000; //5min 300000
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera = Camera.open(); //객체생성
mCamera.setDisplayOrientation(90);
mCamera.setPreviewDisplay(holder); //프리뷰 디스플레이 담당한 서피스 홀더 설정
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (mCamera != null) {
mCamera.startPreview();
}
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if (mCamera != null) {
mCamera.stopPreview(); //프리뷰 멈춤
mCamera = null; //카메라 객체 초기화
}
}
private void beginRecording(SurfaceHolder holder) {
//레코더 객체 초기화
if (mRecoder != null) {
mRecoder.stop();
mRecoder.release();
mRecoder = null;
}
//파일 생성, 초기화
File videofile = new File(Path);
if (videofile.exists()) {
videofile.delete();
}
if (mCamera != null) {
mCamera.stopPreview(); //프리뷰 멈춤
mCamera.release();
mCamera = null; //카메라 객체 초기화
}
try {
mRecoder = new MediaRecorder();
//video, audio 소스 결정
mRecoder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mRecoder.setAudioSource(MediaRecorder.AudioSource.MIC);
//mpeg4로 인코딩 시 음성 영상 모두 녹화.
mRecoder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
//mRecoder.setVideoSize(1280, 720);
mRecoder.setVideoFrameRate(25);
mRecoder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mRecoder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
//녹화시간
mRecoder.setMaxDuration(RECORD_TIME);
//프리뷰 보여 줄 surface 설정
mRecoder.setPreviewDisplay(holder.getSurface());
//녹화할 대상 파일 설정
mRecoder.setOutputFile(Path);
mRecoder.prepare();
mRecoder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//화면 고정
//SCREEN_ORIENTATION_LANDSCAPE 가로 / SCREEN_ORIENTATION_PORTRAIT 세로
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
mVideoView = (VideoView) findViewById(R.id.videoView); //레이아웃의 videoView멤버 변수에 매핑
final SurfaceHolder mHolder = mVideoView.getHolder(); //videoView로부터 인스턴스 얻어옴.
mHolder.addCallback(this); //표면 변화를 통지받을 콜백 객체 등록
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //버퍼 없이 화면 표시
beginRecording(mVideoView.getHolder());
}
}
버튼같은 것 없이 앱실행되자 마자 5분 촬영하고 저장해주고 싶은데, 여기까지는 아직 잘 모르겠구요ㅠ
onCreate되고 셋팅다 해준다음에 beginRecording함수로 녹화 시작하고 파일을 저장합니다.
확인 해 보면 파일 저장된 것 까지는 확인이 되는데 동영상 파일이 아무 내용도 없고, 0.00B로 뜨네요 .. 클릭하면 지원하지 않는 파일 형식이라고 뜨는데..
학생이라 인터넷 글 보면서 이것저것 짜집기 한 코드라 형편 없지만, 어디가 잘못된 건지 혹시 아시겠으면 도움 좀 주세요ㅠㅠ