在Android中从相机的手机中获取帧

在Android中从相机的手机中获取帧,第1张

概述我想从相机的手机上获取相框.所以,我尝试捕获视频,我使用matlab查找此视频的每秒帧数,我每10秒获得250帧.但是当我使用时 public void onPreviewFrame(byte[] data, Camera camera) {} 在Android上,我每10秒只能获得70帧. 你知道为什么吗?我把我的代码放在下面: private Camera.PreviewCallback pr 我想从相机的手机上获取相框.所以,我尝试捕获视频,我使用matlab查找此视频的每秒帧数,我每10秒获得250帧.但是当我使用时

public voID onPrevIEwFrame(byte[] data,Camera camera) {}

在AndroID上,我每10秒只能获得70帧.
你知道为什么吗?我把我的代码放在下面:

private Camera.PrevIEwCallback prevIEwCallBack = new Camera.PrevIEwCallback() {    @OverrIDe    public voID onPrevIEwFrame(byte[] data,Camera camera) {        System.out.println("Get frame " + frameNumber);        if (data == null)            throw new NullPointerException();        Camera.Parameters p = camera.getParameters();        Camera.Size size = p.getPrevIEwSize();        if (frameNumber == 0) {            startTime = System.currentTimeMillis();        }        // Log.e("GetData","Get frame " + frameNumber);        frameNumber++;        camera.addCallbackBuffer(data);            }      }
解决方法 确实如此; AndroID视频录像机不使用 Camera.PreviewCallback,它可能比Java回调更快.原因是它可以将视频帧从相机发送到内核中的硬件编码器,而无需将像素放入用户空间.

但是,我已经在高级设备上可靠地实现了30 FPS,如Nexus 4或galaxy S3.秘诀是:使用Camera.setPreviewCallbackWithBuffer()避免垃圾回收,并使用HandlerThread将回调推出UI线程.

当然,预览回调本身应该尽可能彻底地进行优化.在您的示例中,对camera.getParameters()的调用很慢,可以避免.不应该进行分配(新).

总结

以上是内存溢出为你收集整理的在Android中从相机的手机中获取帧全部内容,希望文章能够帮你解决在Android中从相机的手机中获取帧所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1122234.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存