Record video


import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

import android.app.Activity;

import android.hardware.Camera;
import android.hardware.Camera.Size;

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.ImageButton;

public class prova extends Activity implements SurfaceHolder.Callback{

private SurfaceView mSurfaceView;
private SurfaceHolder mSurfaceHolder;
private Camera mCamera;
private boolean mPreviewRunning;

private static final String TAG = "RECORD";

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);

mSurfaceView = (SurfaceView)findViewById(R.id.camera_surface);
mSurfaceHolder = mSurfaceView.getHolder(); //recupero l'holder della surfaceview
mSurfaceHolder.addCallback(this); //faccio la bind alla nostra activity
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //tipo di surface, suggerito nei tutorial ufficiali

final ImageButton buttonPictureR = (ImageButton) findViewById(R.id.camera_surface_buttonR);
final ImageButton buttonPictureS = (ImageButton) findViewById(R.id.camera_surface_buttonS);
buttonPictureR.setOnClickListener(new OnClickListener(){
public void onClick(View v) {

startRecording();
buttonPictureR.setVisibility(4);
buttonPictureS.setVisibility(0);


}
});


buttonPictureS.setOnClickListener(new OnClickListener(){
public void onClick(View v) {

stopRecording();
buttonPictureR.setVisibility(0);
buttonPictureS.setVisibility(4);

}
});

}

public void surfaceCreated(SurfaceHolder holder) {

mCamera = Camera.open();

}

public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
if (mPreviewRunning)
mCamera.stopPreview();

//setto le preferenze
Camera.Parameters p = mCamera.getParameters(); //prendo le preferenze della camera

p.setPreviewSize(arg2, arg3);
//p.setPreviewFormat(PixelFormat.JPEG);
ArrayList list = (ArrayList) p.getSupportedPictureSizes(); //recuepro le risoluzioni supportate dalla camera
List list2 = p.getSupportedFocusModes(); //recuepro le risoluzioni supportate dalla camera
int picture_width = list.get(0).width;
int picture_height = list.get(0).height;
p.setFocusMode(list2.get(0));

p.setPictureSize(picture_width, picture_height);

// salvo le pref
mCamera.setParameters(p);
try {

System.out.println("sono fuori");

//lancio la preview
mCamera.setPreviewDisplay(arg0);
mCamera.startPreview();
mPreviewRunning = true;
} catch (IOException e) {
System.out.println("sono dentro");
//gestione errore
}

}

public void surfaceDestroyed(SurfaceHolder holder) {

mCamera.stopPreview();
mPreviewRunning = false;
mCamera.release();

}

private MediaRecorder mediaRecorder;
private final int MAX_TIME = 20000;

public boolean startRecording(){
try {

mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
mediaRecorder.setMaxDuration((int) MAX_TIME);
mediaRecorder.setVideoSize(320, 240);
mediaRecorder.setVideoFrameRate(20);
mediaRecorder.setOutputFile("/sdcard/recordvideooutput.3gp");

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();
mediaRecorder.release(); // Now the object cannot be reused
}
}


判断SD卡是否加载


if (android.os.Environment.getExternalStorageState() != android.os.Environment.MEDIA_MOUNTED)



public class VideoActivity extends Activity {

private SurfaceView preview;
private SurfaceHolder previewHolder;
private String locationName;
private String filepath;
private File video;

public void onCreate(Bundle videocawk) {
super.onCreate(videocawk);
setContentView(R.layout.video_layout);
setSurface();
locationName = getIntent().getStringExtra("locationName");
filepath = getFilePath(locationName);
try {
MediaRecorder r = getMediaRecorder(filepath, previewHolder
.getSurface());
setSurfaceCallback(preview,r);
setButtonListeners(r);
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private String getFilePath(String locName) {
String dir = Environment.getExternalStorageDirectory().getAbsolutePath();
String add = "/test/data/video/";
String name = locName + "--1";
String total = dir + add + name;
video = new File(total);
return total;
}

private void setSurface() {
preview = (SurfaceView) findViewById(R.id.preview);
previewHolder = preview.getHolder();
previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

private void setButtonListeners(final MediaRecorder r) {
Button start = (Button) findViewById(R.id.start_video);
Button end = (Button) findViewById(R.id.stop_video);

start.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
startRecording(r);

}
});

end.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
stopRecording(r);
setPassPrefs();
startActivity(setPassPrefs());
finish();

}
});

}

private void setSurfaceCallback(SurfaceView s, final MediaRecorder r)
{


SurfaceHolder.Callback surfaceCallback = new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {

try {
r.setPreviewDisplay(previewHolder.getSurface());
} catch (Throwable t) {
Log.e("PictureDemo-surfaceCallback",
"Exception in setPreviewDisplay()", t);
Toast.makeText(VideoActivity.this, t.getMessage(),
Toast.LENGTH_LONG).show();
}
}

public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {

}

public void surfaceDestroyed(SurfaceHolder holder) {
r.stop();
r.release();

}
};

previewHolder.addCallback(surfaceCallback);
}

private Intent setPassPrefs() {
AttachedImageAdapter adapter = new AttachedImageAdapter(locationName,
VideoActivity.this);
adapter.setVideoPath(filepath);
Intent i = new Intent(VideoActivity.this, EnterTag.class);
i.putExtras(getIntent());
return i;

}

private void startRecording(MediaRecorder r) {
r.start();
}

private void stopRecording(MediaRecorder r) {
r.stop();
}

private MediaRecorder getMediaRecorder(String filepath, Surface s)
throws IllegalStateException, IOException {
MediaRecorder m_recorder = new MediaRecorder();
m_recorder.setPreviewDisplay(s);
m_recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
m_recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
m_recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
m_recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
m_recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
m_recorder.setMaxDuration(20000); // length of video in MS
m_recorder.setVideoSize(320, 240);
m_recorder.setVideoFrameRate(15);
m_recorder.setOutputFile(video.getPath());
m_recorder.prepare();

return m_recorder;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值