安卓 preview 的 callback机制问题

请问一下我在安卓camera的回调中获得视频数据,然后通过安卓的MediaCodec 编码为h.264数据,之后经过一些不耗时的处理,都在第一个线程中做的。

        Camera.PreviewCallback() { 
        @Override 
        public void onPreviewFrame(byte[] data, Camera camera) {
            /*我在这里进行的编码操作,以及其他操作*/
        }

请问一下如果我的编码工作比较耗时间,camera会等待我转码完成之后(等待callback执行完) 再给我发采集到的图像数据,还是有什么缓存机制,onPreviewFrame()是从缓存(如队列)中拿到的数据???
请有经验的朋友指教,多谢!!

阅读 3.9k
1 个回答

首先视频数据的获取是有帧数的,取决于你是要30帧,还是60帧
理论上30帧视频的话,没隔33ms会触发一次callback
如果callback 33ms之内没有执行完成,会先等callback执行完,然后再等下一个callback信号过来
但这样就产生了丢帧的情况
建议不要再previewcallback里面执行耗时操作,多个buffer子线程操作,或者AsyncTask来做

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题