- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 MediaRecorder
录制视频并从 onPreviewFrame
回调方法获取原始帧(字节数组)
似乎没那么容易,mb这甚至不可能,我不知道...
但我找到了一些答案(对于类似的问题),人们说你应该在调用 MediaRecorder.start()
后重新连接相机实例(Camera.reconnect()
)并再次设置预览回调
我尝试过类似的方法,但它不起作用(记录有效但从未调用 onPreviewFrame
)
我还尝试在 MediaRecorder.start()
之后调用相机的 stopPreview
和 startPreview
方法,但似乎我们不应该这样做,否则当我在此类操作应用停止响应(它变得卡住)之后尝试停止录制(MediaRecorder.stop()
)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sample_main);
mPreview = findViewById(R.id.surface_view);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
testVideoRecording();
}
}, 1000);
}
@Override
public void onPreviewFrame(byte[] bytes, Camera camera) {
Log.i(TAG, "onPreviewFrame");
}
private void testVideoRecording() {
mCamera = Camera.open();
Camera.Parameters parameters = mCamera.getParameters();
List<Camera.Size> mSupportedPreviewSizes = parameters.getSupportedPreviewSizes();
List<Camera.Size> mSupportedVideoSizes = parameters.getSupportedVideoSizes();
Camera.Size optimalSize = CameraHelper.getOptimalVideoSize(mSupportedVideoSizes,
mSupportedPreviewSizes, mPreview.getWidth(), mPreview.getHeight());
CamcorderProfile profile = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
profile.videoFrameWidth = optimalSize.width;
profile.videoFrameHeight = optimalSize.height;
parameters.setPreviewSize(profile.videoFrameWidth, profile.videoFrameHeight);
mCamera.setParameters(parameters);
try {
mCamera.setPreviewTexture(mPreview.getSurfaceTexture());
} catch (IOException e) {
e.printStackTrace();
}
mCamera.setPreviewCallback(this);
mMediaRecorder = new MediaRecorder();
// Step 1: Unlock and set camera to MediaRecorder
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
// Step 2: Set sources
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
// Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
mMediaRecorder.setProfile(profile);
// Step 4: Set output file
mOutputFile = new File(Environment.getExternalStorageDirectory()
+ File.separator + "test.mp4");
if (mOutputFile.exists()) mOutputFile.delete();
mMediaRecorder.setOutputFile(mOutputFile.getPath());
// Step 5: Prepare configured MediaRecorder
try {
mMediaRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
mMediaRecorder.start();
// Step 6: try to set preview frame callback
//mCamera.stopPreview();
try {
mCamera.reconnect();
} catch (IOException e) {
e.printStackTrace();
}
/*try {
mCamera.setPreviewTexture(mPreview.getSurfaceTexture());
} catch (IOException e) {
e.printStackTrace();
}*/
mCamera.setPreviewCallback(this);
//mCamera.startPreview();
}
所以我想知道是否可以同时使用 MediaRecorder 和预览帧回调。如果是,那么如何正确地做到这一点?
最佳答案
(根据以下亚历克斯的评论编辑)
是的,一般来说是可以的。相机 API 可能很棘手,需要精确度和持久性。
首先,从您知道有效的示例代码开始。比如官方的原始API抓视频教程是:https://developer.android.com/guide/topics/media/camera#capture-video .太好了,现在您的设备上已经有了示例代码,您已经完成了大部分工作。如果您无法在您的设备上使用它,请至少尝试使用其他品牌的设备。
接下来,让您自己的应用程序代码与示例的线程和 API 调用相匹配。当您遇到错误或卡住时,请查看日志以了解发生了什么。这通常是一些微不足道的事情,比如 list 中缺少权限。
最后,日志,日志,日志。在这个问题中,如果您将日志中的错误与您的代码一起发布,您可能会找到具有特定答案的特定问题。
祝你好运!
关于android - 录像同时回调onPreviewFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52314822/
我已经实现了 this官方 Google Camera2 示例对我的应用程序进行了细微更改,以便在自定义相机中拍照。我还需要提供视频录制选项,但找不到示例 - 可能是因为 Camera2 API 相对
我在 google play 中发布了我的应用。 此 Activity 通过前置摄像头录制视频,如果不可用,则使用后置摄像头 在崩溃部分我收到了这个输出: java.lang.RuntimeExcep
前言 哈喽,大家好,我是海怪。 最近项目遇到一个要在网页上录音的需求,在一波搜索后,发现了 react-media-recorder[1] 这个库。今天就跟大家一起研究一下这个库的源码吧,从 0
我是一名优秀的程序员,十分优秀!