xia*_*woo 8 android android-camera mediacodec
我正在尝试通过Camera的PreviewCall返回(onPreviewFrame)使用MediaCodec对每秒30帧的视频进行编码.我编码的视频总是播放得非常快(这是不可取的).所以,我试图通过设置一个int frameCount变量来检查进入我相机预览的帧数,以记住它的计数.我期待的是每秒30帧,因为我将相机的预览设置为30 fps预览(如下所示).我回来的结果是不一样的.我调用onPreviewFrame回调10秒钟,我得到的帧数量只有大约100帧.这很糟糕,因为我期待300帧.我的相机参数设置正确吗?这是Android的Camera预览回拨的限制吗?如果这是对Android相机预览回调的限制,那么还有其他相机回调能够以每秒30帧的速度返回相机的图像数据(nv21,yuv,yv12)吗?
感谢您阅读并花时间去帮忙.我将不胜感激任何评论和意见.
以下是使用Camera的onPreviewFrame编码视频的示例:
http://www.youtube.com/watch?v=I1Eg2bvrHLM&feature=youtu.be
Camera.Parameters parameters = mCamera.getParameters();
parameters.setPreviewFormat(ImageFormat.NV21);
parameters.setPictureSize(previewWidth,previewHeight);
parameters.setPreviewSize(previewWidth, previewHeight);
// parameters.setPreviewFpsRange(30000,30000);
parameters.setPreviewFrameRate(30);
mCamera.setParameters(parameters);
mCamera.setPreviewCallback(previewCallback);
mCamera.setPreviewDisplay(holder);
Run Code Online (Sandbox Code Playgroud)
Ale*_*ohn 16
不,Android相机不能保证稳定的帧速率,特别是在30 FPS时.例如,它可以选择在低光照条件下更长时间曝光.
但是,我们应用程序开发人员可以通过某些方式使事情变得更糟.
首先,通过使用setPreviewCallback()而不是setPreviewCallbackWithBuffer().这可能会对垃圾收集器造成不必要的压力.
其次,如果onPreviewFrame()到达主(UI)线程,则会导致任何UI动作直接延迟相机帧到达.要保持onPreviewFrame()单独的线程,您应该open()将相机放在辅助Looper线程上.在这里,我详细解释了如何实现这一点:最好使用HandlerThread而不是其他类似的类.
第三,检查处理时间是否小于20ms.
| 归档时间: |
|
| 查看次数: |
7387 次 |
| 最近记录: |