请问一下我在安卓camera的回调中获得视频数据,然后通过安卓的MediaCodec 编码为h.264数据,之后经过一些不耗时的处理,都在第一个线程中做的。
Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
/*我在这里进行的编码操作,以及其他操作*/
}
请问一下如果我的编码工作比较耗时间,camera会等待我转码完成之后(等待callback执行完) 再给我发采集到的图像数据,还是有什么缓存机制,onPreviewFrame()是从缓存(如队列)中拿到的数据???
请有经验的朋友指教,多谢!!
首先视频数据的获取是有帧数的,取决于你是要30帧,还是60帧
理论上30帧视频的话,没隔33ms会触发一次callback
如果callback 33ms之内没有执行完成,会先等callback执行完,然后再等下一个callback信号过来
但这样就产生了丢帧的情况
建议不要再previewcallback里面执行耗时操作,多个buffer子线程操作,或者AsyncTask来做