80,337
社区成员
发帖
与我相关
我的任务
分享
public class VideoActivity extends Activity implements SurfaceHolder.Callback {
private Button start;// 开始录制按钮
private Button stop;// 停止录制按钮
private MediaRecorder mediarecorder;// 录制视频的类
private SurfaceView surfaceview;// 显示视频的控件
private SurfaceHolder surfaceHolder;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏
// getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
// WindowManager.LayoutParams.FLAG_FULLSCREEN);// 设置全屏
//// 设置横屏显示
// setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//// 选择支持半透明模式,在有surfaceview的activity中使用。
// getWindow().setFormat(PixelFormat.TRANSLUCENT);
setContentView(R.layout.video);
init();
}
private void init() {
start = (Button) this.findViewById(R.id.start);
stop = (Button) this.findViewById(R.id.stop);
start.setOnClickListener(new TestVideoListener());
stop.setOnClickListener(new TestVideoListener());
surfaceview = (SurfaceView) this.findViewById(R.id.surfaceview);
SurfaceHolder holder = surfaceview.getHolder();// 取得holder
holder.addCallback(this); // holder加入回调接口
// setType必须设置,要不出错.
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
Camera camera;
class TestVideoListener implements OnClickListener {
@Override
public void onClick(View v) {
if (v == start) {
mediarecorder = new MediaRecorder();// 创建mediarecorder对象
// 设置录制视频源为Camera(相机)
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
if (camera != null) {
// camera.setDisplayOrientation(90);//摄像图旋转90度
camera.unlock();
mediarecorder.setCamera(camera);
}
mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediarecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediarecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
mediarecorder.setPreviewDisplay(surfaceHolder.getSurface());
// mediarecorder.setOrientationHint(90);//视频旋转90度,没有用
System.out.println("手机默认地址:" + Environment.getExternalStorageDirectory());
// 设置视频文件输出的路径
mediarecorder.setOutputFile(Environment.getExternalStorageDirectory() + "/" + "test.mp4");
try {
// 准备录制
mediarecorder.prepare();
// 开始录制
mediarecorder.start();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (v == stop) {
if (mediarecorder != null) {
// 停止录制
mediarecorder.stop();
// 释放资源
mediarecorder.release();
mediarecorder = null;
}
}
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// 将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder
surfaceHolder = holder;
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
// 将holder,这个holder为开始在oncreat里面取得的holder,将它赋给surfaceHolder
surfaceHolder = holder;
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// surfaceDestroyed的时候同时对象设置为null
surfaceview = null;
surfaceHolder = null;
mediarecorder = null;
}
}
昨天我也试了好长时间,也没找到办法,设置的一些参数只是对显示起作用,对应生成的视频不起作用,所以我觉得还是在输出格式或录制到生成文件的那个步骤需要设置,但是没有找到地方。
昨天我也试了好长时间,也没找到办法,设置的一些参数只是对显示起作用,对应生成的视频不起作用,所以我觉得还是在输出格式或录制到生成文件的那个步骤需要设置,但是没有找到地方。
判断状态然后转换?纯属个人想法,错了勿怪哈。
判断状态然后转换?纯属个人想法,错了勿怪哈。
[quote=引用 4 楼 dcxy0 的回复:] http://blog.csdn.net/licui1000/article/details/7591080 看下这个呢。camera.setDisplayOrientation(90);//摄像图旋转90度 camera.unlock(); mediarecorder.setCamera(camera); } // 设置录制视频源为Camera(相机) mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediarecorder.setOrientationHint(90);//视频旋转90度
http://blog.csdn.net/licui1000/article/details/7591080 看下这个呢。camera.setDisplayOrientation(90);//摄像图旋转90度 camera.unlock(); mediarecorder.setCamera(camera); } // 设置录制视频源为Camera(相机) mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediarecorder.setOrientationHint(90);//视频旋转90度
camera.setDisplayOrientation(90);//摄像图旋转90度
camera.unlock();
mediarecorder.setCamera(camera);
}
// 设置录制视频源为Camera(相机)
mediarecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediarecorder.setOrientationHint(90);//视频旋转90度
不用去camera.setDisplayOrientation(90),应该直接可以在拍摄时去判断是横向还是纵向的吧