我知道这个问题之前已被问过很多次了.一年多前我曾找过它,但没有找到任何东西,所以如果有任何新的想法/方法或黑客,再次发布这个问题.
我希望能够在Android设备中捕获来自两个摄像头(正面和背面)的视频.
我现在唯一想到的是每隔0.1秒如何在正面和背面之间切换,但是我从来没有能够编码.请给我任何人的帮助.
另一个想法是 - 视频通常以每秒15或30帧的速度捕获.假设它是每秒30帧.如果有一种方法可以将这些帧交替到正面和背面,那么我们可以在前面每秒15帧,在后面视频每秒15帧.这可能吗?如果是,那怎么样?请建议.音频怎么了?也许我们可以将音频限制为只有一个视频录制(正面或背面).
我有两个不同的代码库有同样的问题.
第一个是直接从developer.android.com复制的代码: http ://developer.android.com/guide/topics/media/camera.html#custom-camera
第二个是这段代码:
http://android-er.blogspot.com.au/2011/10/simple-exercise-of-video-capture-using.html
两者都可以正常使用后置摄像头,但是一旦我尝试使用前置摄像头,我就会收到错误信息.
这发生在以下设备上:
Nexus S 4.1.2
Galaxy Nexus 4.1.2
Nexus 7 4.2.1(它只有前置摄像头)
我已经尝试了看起来像2.2时代的Camera Params,有些人声称需要一些三星和HTC设备,尽管有多篇不同的文章引用了不同的字符串键:
c = Camera.open(frontFacingCameraID); // attempt to get a Camera instance
Camera.Parameters params = c.getParameters();
params.set("cam-mode", 1);
params.set("cam_mode", 1);
params.set("camera-id", 1);
c.setParameters(params);
Run Code Online (Sandbox Code Playgroud)
这些都不起作用,请注意我正在检测Nexus 7上正确的前置摄像头ID:0.但是所有设备的结果都是一样的.
我尝试使用低质量的配置文件,我尝试过多种方式手动设置视频分辨率,编码器,输出格式,比特率,帧速率和视频大小,但没有一个有效.
让我觉得大多数代码没有错的事情是普通相机工作正常.所以我的猜测是它与设置媒体记录器的prepareVideoRecorder()/ prepareMediaRecorder()方法有关.
也许Media Recorder手动编码已知可在前置摄像头上工作的设置?
我不得不说,Android Camera和MediaRecorder API很糟糕.与iOS相比,它有点混乱,更不用说一些可怕的外观参数不兼容性问题和分散的设备环境中的不同分辨率.
假设我可以在我的JB设备上运行,有没有人从经验中知道这些问题是否已通过API 15 ICS解决了?
如果它太难以支持,我会考虑不支持API 10 Gingerbread.
是否有启动摄像头的Intent,可以选择在Android上捕获图片和视频?
我已经使用MediaStore.ACTION_VIDEO_CAPTURE和MediaStore.ACTION_IMAGE_CAPTURE来捕获音频或视频,但我找不到可以在两者之间切换的Intent,就像在这个示例app中一样:

谢谢!
当我调用mCamera = Camera.open()它返回null时,可能是什么导致了这个?我的设备是Nexus 7.
我已经在我的权限中设置了权限AndroidManifest.xml:
<uses-permission android:name="android.permission.CAMERA" />
Run Code Online (Sandbox Code Playgroud) 如何检查设备是否有摄像头(手电筒).我在谈论Android操作系统的设备?
我已经看到了一些解决方案,这些解决方案讨论了如何打开和关闭LED,但如果设备甚至没有LED,会发生什么.
打开我正在使用的相机 camera.open()
我一直在尝试camera2 API.我已下载代码
https://developer.android.com/samples/Camera2Video/index.html了解它的工作原理.它工作正常,直到我停止录制.当我停止录制时,它会运行以下代码.
private void stopRecordingVideo() {
// UI
mIsRecordingVideo = false;
mBtn_Video.setText(R.string.record);
// Stop recording
try {
mMediaRecorder.stop();
mMediaRecorder.reset();
}
catch (Exception e) {
e.printStackTrace();
}
Activity activity = getActivity();
if (null != activity) {
System.out.println("file " + getVideoFile(activity));
Toast.makeText(activity, "Video saved: " + getVideoFile(activity),
Toast.LENGTH_SHORT).show();
}
startPreview();
Run Code Online (Sandbox Code Playgroud)
在mMediaRecorder.stop(); 它抛出以下错误
01-12 16:24:23.115 2161-2200/com.cameratwoapi E/Surface? queueBuffer: error queuing buffer to SurfaceTexture, -19
01-12 16:24:23.135 2161-2200/com.cameratwoapi E/EGL_emulation? tid 2200: swapBuffers(285): error 0x3003 (EGL_BAD_ALLOC)
01-12 16:24:23.197 2161-2200/com.cameratwoapi E/CameraDeviceGLThread-0? Received exception on …Run Code Online (Sandbox Code Playgroud) 我已经尝试了一切,但我仍然无法解决这个问题.
我正在应用程序中实现相机功能,一切正常,除了自动对焦.当我调用autoFocus()时,它会抛出异常,我无法理解为什么.我在Desire HD上运行代码.
码:
@Override
protected void onStart() {
super.onStart();
//grab seurface view and callback
cameraView = (CameraSurfaceView) findViewById(R.id.cameraView);
try{
camera = Camera.open();
cameraView.setCamera(camera);
//release previous autofocus and assign new one
camera.cancelAutoFocus();
camera.autoFocus(new Camera.AutoFocusCallback() {
public void onAutoFocus(boolean success, Camera camera) {
// TODO Auto-generated method stub
}});
}
catch (Exception e) {
//had an issue accessing the camera prompt user
//TODO create user prompt
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
01-11 16:09:38.456: W/System.err(26546): java.lang.RuntimeException: autoFocus failed
01-11 16:09:38.456: W/System.err(26546): at android.hardware.Camera.native_autoFocus(Native …Run Code Online (Sandbox Code Playgroud) 是否有任何方法可以在Android(非root手机)中静音相机快门声音?
拍照时我使用此代码静音我的音频声音:
AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
int streamType = AudioManager.STREAM_SYSTEM;
mgr.setStreamSolo(streamType, true);
mgr.setRingerMode(AudioManager.RINGER_MODE_SILENT);
mgr.setStreamMute(streamType, true);
Run Code Online (Sandbox Code Playgroud)
我把声音静音,手机静音.
mCamera.takePicture(null, null, photoCallback);
Run Code Online (Sandbox Code Playgroud)
然后拍照
它正在努力HTC HERO, HTC Desire, Motorola ME860, MotoA953.但是,当我测试Samsung Tab p1000和Sony Experia R800i,它不工作.还有其他工作吗?
我正在使用Sencha Touch和Phonegap来显示用相机拍摄的照片.通过cordova2.7.0在iphone上拍照时,图像以正确的方向绘制.但是使用三星s3,图片将倾斜-90°(仅适用于肖像图像).
navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 25,
destinationType: destinationType.FILE_URI,
targetWidth: 120,
targeHeight: 120,
correctOrientation: true,
sourceType: source });
Run Code Online (Sandbox Code Playgroud)
我用上面的代码拍照.肖像图像以正确的方向从相机显示器拍摄,问题仅发生在从图库中拍摄的肖像图像.有什么方法可以解决这个问题吗?
我正在尝试使用Camera2 API获取QR码扫描功能的预览框架.在旧的Camera API中,它很简单:
android.hardware.Camera mCamera;
...
mCamera.setPreviewCallback(new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
// will be invoked for every preview frame in addition to displaying them on the screen
}
});
Run Code Online (Sandbox Code Playgroud)
不过,我不能找到一种方法来实现,使用新 Camera2 API.我想收到多个我可以处理的帧 - 最好的是接收旧API中的字节数组.任何想法如何做到这一点?
android android-hardware android-camera android-5.0-lollipop