【发布时间】:2015-02-24 01:55:15
【问题描述】:
我正在试验我的项目的视频录制,我正在使用它来访问它。我的测试设备也是 Nexus 5 版本 4.4 KitKat。
Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
takeVideoIntent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION,
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
takeVideoIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);
}
因此,它会将我引导至视频意图。然后当我按下返回按钮将应用程序返回到其主视图并再次启动视频录制时,我得到“相机错误:无法连接到相机”。
我必须打开设备上的内置相机应用程序并将其关闭,以便我可以在我的项目中打开它。
注意: 我的主视图是我的图像捕获的自定义视图,它有一个预览,从那里我有一个按钮来执行上面的视频捕获代码。所以,发生的事情有点像这样(按顺序):
在 MainView 按下按钮以获取视频意图
(视频结束/取消时)
返回主视图
(再次按下视频意图按钮)
“相机错误:无法连接到相机”。
这里是初始化我的相机的代码。
这是我的主要观点:
@Override
protected void onResume() {
super.onResume();
mCameraLoader.onResume();
}
@Override
protected void onPause() {
super.onPause();
mCameraLoader.onPause();
}
这些是 CameraLoader 类中的函数:
public void onResume() {
setUpCamera(mCurrentCameraId);
}
private Camera getCameraInstance(final int id) {
Camera c = null;
try {
c = mCameraHelper.openCamera(id);
} catch (Exception e) {
e.printStackTrace();
Log.e("ASDA", "" + e.getMessage());
}
return c;
}
private void setUpCamera(final int id) {
mCameraInstance = getCameraInstance(id);
Camera.Parameters parameters = mCameraInstance.getParameters();
if (parameters.getSupportedFocusModes().contains(
Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE)) {
parameters.setFocusMode(Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE);
}
List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes();
for (int i = previewSizes.size() - 1; i >= 0; i--) {
if ((previewSizes.get(i).height == DEF_HEIGHT)
&& (previewSizes.get(i).width == DEF_WIDTH)) {
mCameraSize = previewSizes.get(i);
parameters.setPreviewSize(mCameraSize.width, mCameraSize.height);
Log.e("preview_sizeness", "index: " + i + " width: " + previewSizes.get(i).width
+ " height: " + previewSizes.get(i).height);
break;
}
}
mCameraInstance.setParameters(parameters);
int orientation = mCameraHelper.getCameraDisplayOrientation(this.activity,
mCurrentCameraId);
CameraHelper.CameraInfo2 cameraInfo = new CameraHelper.CameraInfo2();
mCameraHelper.getCameraInfo(mCurrentCameraId, cameraInfo);
boolean flipHorizontal = cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT;
mGPUImage.setUpCamera(mCameraInstance, orientation, flipHorizontal, false);
Camera.Parameters paramss = this.mCameraInstance.getParameters();
paramss.setRotation(90);
this.mCameraInstance.setParameters(paramss);
}
public void onPause() {
releaseCamera();
}
private void releaseCamera() {
mCameraInstance.setPreviewCallback(null);
mCameraInstance.release();
mCameraInstance = null;
}
【问题讨论】:
标签: android video camera video-recording