在我的相机应用程序中,当用户点击屏幕时,我使用以下代码触发自动对焦:
mCamera.autoFocus(null);
Run Code Online (Sandbox Code Playgroud)
我还允许用户在选项屏幕中设置相机闪光模式.问题在于,当触发自动对焦时,相机闪光灯有时会在某些手机上触发,用户会抱怨这一点.在大多数这些手机上,可以通过将闪光模式设置为来避免这种情况Parameters.FLASH_MODE_OFF.我已经在Galaxy S2上验证了这一点,但在某些手机(例如Nexus 4)上,它仍然会发生(根据用户报告).
触发自动对焦时,如何可靠地防止相机闪光灯开启?可能吗?
我正在使用MediaRecorder通过Android的Camera API录制视频.我遇到了一个非常奇怪的问题.
private void startRecordingVideo() {
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
File file = getAlbumDir();
recorder.setOutputFile(file.getAbsolutePath());
recorder.setMaxDuration(50000);
recorder.setMaxFileSize(5000000);
recorder.setPreviewDisplay(CameraBridgeViewBase.surfaceHolder.getSurface());
try {
recorder.prepare();
recorder.start();
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
现在这给了我MediaRecorder:启动失败:-19错误.我检查了这个和这个链接说要删除,mediaRecorder.setVideoSize(sView.getWidth(), sView.getHeight());但我没有使用setVideoSize(sView.getWidth(), sView.getHeight()).通过尝试和错误,我发现如果我删除编码器recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);, recorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);应用程序不会崩溃,但会给出新的异常:
03-23 16:50:06.213 28226-28226/com.scenera.android.surveillance E/MediaRecorder: audio source is set, but audio encoder is not set
Run Code Online (Sandbox Code Playgroud)
我不明白我在做错了什么.任何帮助都会得到满足.提前致谢.
我使用Google官方示例使用Camera API 2来处理视频录制.但问题是我无法全屏显示,因为我将屏幕方向仅限于肖像.这是我编辑的xml和官方的xml.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<AutoFitTextureView
android:id="@+id/texture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<Button
android:id="@+id/video"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/label_record" />
<ImageView
android:id="@+id/info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|right"
android:contentDescription="Description"
android:padding="20dp"
android:src="@drawable/ic_more" />
</FrameLayout>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
我认为这里是通过纵横比设置视频屏幕大小,TextureView但我无法全屏显示.任何帮助是极大的赞赏.
mVideoSize = chooseVideoSize(map.getOutputSizes(MediaRecorder.class));
mPreviewSize = chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class), width, height, mVideoSize);
int orientation = getResources().getConfiguration().orientation;
if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
mTextureView.setAspectRatio(mPreviewSize.getWidth(), mPreviewSize.getHeight());
} else {
mTextureView.setAspectRatio(mPreviewSize.getHeight(), mPreviewSize.getWidth());
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下 html 代码。我可以在桌面上获取视频流,但在 android webView 应用程序中却看到灰色的播放按钮。我通过 https 连接提供此服务。请指导我,因为我对这两个代码片段都是新手。
超文本标记语言
<div id="video-container">
<video id="camera-stream" width="500" autoplay></video>
</div>
Run Code Online (Sandbox Code Playgroud)
脚本.js
window.onload = function() {
navigator.getUserMedia = (navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia);
if (navigator.getUserMedia) {
navigator.getUserMedia({ video: true },
function(localMediaStream) {
var vid = document.getElementById('camera-stream');
vid.srcObject = localMediaStream;
},
function(err) {
console.log('The following error occurred when trying to use getUserMedia: ' + err);
}
);
} else { alert('Sorry, your browser does not support getUserMedia'); }
}
Run Code Online (Sandbox Code Playgroud)
此屏幕截图取自我的桌面 Chrome 浏览器。
这是从我的手机 webView …
我在Android中使用Camera API 2并尝试应用自动对焦功能.自动对焦与后置摄像头正常工作,但前置摄像头无法正常工作.
(我使用的是Android 5.1和6.0设备)
详情:
这是启动自动对焦的触发器:
mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_TRIGGER, CameraMetadata.CONTROL_AF_TRIGGER_START);
Run Code Online (Sandbox Code Playgroud)
这是CameraCaptureSession.CaptureCallback
Integer afState = result.get(CaptureResult.CONTROL_AF_STATE);
Run Code Online (Sandbox Code Playgroud)
如果我使用前置摄像头,afState的值总是0(非活动).但是使用后置摄像头,该值从2(CONTROL_AF_STATE_PASSIVE_FOCUSED - 尝试聚焦)变为4(焦点成功时CONTROL_AF_STATE_FOCUSED_LOCKED)或5(焦点失败时CONTROL_AF_STATE_NOT_FOCUSED_LOCKED).
你们有没有想过为什么我不能在前置摄像头上使用自动对焦?
我正在尝试创建一个应用程序,它采取前面的图像,然后返回图像上的单个活动意图,我的前置摄像头代码与下面相同,工作完全正常我甚至调用完成来破坏表面和内部onSurfaceDestroy()我调用initBackCam( )下面给出的方法再次正常工作直到onSurfaceChanged()在onSurfaceChanged()里面我调用pCamera.takePicture(null,mPictureCallback,mPictureCallback)抛出异常takePicture失败
注意:这个代码工作正常直到kitkat在棒棒糖和棉花糖中失败
我尝试在前后摄像头之间延迟,我试图把后置摄像头的代码放在不同的活动中仍然会抛出相同的错误,我已经发布了相机并在拍照之前调用了startPreview()但仍然会抛出同样的错误
我使用了以下权限
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.front" android:required="false" />
<uses-feature android:name="android.hardware.camera.back" android:required="false" />
Run Code Online (Sandbox Code Playgroud)
请帮忙!!!!
public static Bitmap bitmap;
public SurfaceHolder pSurfaceHolder;
private Camera pCamera;
private boolean pPreviewRunning = false;
private RelativeLayout pCameraPreview;
private BackCameraService backCam;
private void initBackCamera() {
pCameraPreview = (RelativeLayout) findViewById(R.id.preview_back_camera);
backCam = new BackCameraService(getBaseContext(), pCamera);
pCameraPreview.addView(backCam);
}
public class BackCameraService extends SurfaceView implements SurfaceHolder.Callback {
public Camera pCamera;
private Context pContext;
Camera.PictureCallback mBackPictureCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] …Run Code Online (Sandbox Code Playgroud)