我见过很多类似的问题,但没有人给出 100% 的答案:
- Camera.PreviewCallback 不保证所有设备上所需的帧速率
- MediaRecorder 可能会在某些设备上缓冲音频/视频(在写入文件/本地套接字之前)
- 本机 C/C++ API 不公开,每个人都强烈反对使用它。
Skype 是如何做到的?在 Android 上访问实时视频帧的正确方法是什么?
我见过很多类似的问题,但没有人给出 100% 的答案:
Skype 是如何做到的?在 Android 上访问实时视频帧的正确方法是什么?
在 3.0 之前的 Android 版本上,预览回调是唯一的选择;请确保使用效率更高的setPreviewCallbackWithBuffer方法。
在 Honeycomb 或更高版本上,您还可以通过setPreviewTexture使用 GPU 路径。这将使预览流直接进入 GPU 纹理,这更适合某些应用程序。
尝试使用内部 C/C++ API 不会获得任何巨大的性能提升,并且保证在未来的版本中会发生变化,所以我不建议使用它。
确保从支持的帧速率列表中将预览帧速率设置得尽可能高。
如果您需要高、稳定的帧速率,您还可以尝试在较新的设备上将录制提示设置为 true。
不幸的是,这些方法都不能保证提供稳定的输出帧速率,这在很大程度上取决于场景条件和设备自动曝光算法的细节。这是我们希望将来能改进的地方。
但是,如果上述两个选项之一不是 Skype 等人使用的,我会感到非常惊讶。