我目前正在使用 onPreviewCallback,因此我可以在预览时从相机捕获帧并通过 http 流式传输它们。
这行得通,但随后我发出一个开始录制的命令,而且似乎我不再有预览回调了。
那么,如何保持预览回调,以便我可以将帧从表面发送到我的服务器并在设备上录制视频?
我目前正在使用 onPreviewCallback,因此我可以在预览时从相机捕获帧并通过 http 流式传输它们。
这行得通,但随后我发出一个开始录制的命令,而且似乎我不再有预览回调了。
那么,如何保持预览回调,以便我可以将帧从表面发送到我的服务器并在设备上录制视频?
我很长一段时间都没有使用 Android 相机。然而,据我记忆
1) 录制时不会调用 onPreviewCallback
它在几个问题中提到:
未调用相机 onPreviewFrame 如何在录制视频时显示实时过滤的相机预览?
2)我看到它是在 SipDroid 和其他几个 Android SIP 客户端中处理的(这是 1-2 年前,所以这种方法可能已经过时了):
3)您可以使用 onPreviewFrame + start AudioRecorder 并自己编码(使用 ffmpeg 或类似的东西)到 mp4 文件。这样您就不需要启动 MediaRecorder 录制。
您可以在调用 media recorder.start() 后调用这些方法,如下所示:
camera.reconnect();
camera.setPreviewCallback();
surfaceview.getHolder().addCallback();
原因:
在我的应用程序中,我曾经遇到过和你一样的问题,我通过这个解决了它。希望它能解决你的问题!
一旦我让相机和 MediaRecorder 开始和停止录制而不会崩溃(这并不容易),我仍然遇到像你描述的那样的问题,预览回调将停止被调用。
我最终找到的修复是在 mediaRecorder.start() 之后添加对 setPreviewCallback 的调用,在 mediaRecorder.stop() 之后添加另一个调用。不确定这是否正确,但它适用于正在测试的 Razr MI。