本人想通过-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection这个方法在摄像头进行预览视图的时候捕获实时的图片,保存到UImage中,然后对UImage做相应的处理。现在遇到的问题是本人在全局变量声明的全局变量UImage在这个函数获取的时候总是为空,后来发现是原因是是在毫秒级别的拍照操作(captureStillImageAsynchronouslyFromConnection),有可能快速拍照后速度给释放了,然后进行下一次的captureStillImageAsynchronouslyFromConnection。
本人现在有一个这样的设想,通过-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection这个方法获取图片,然后按照这样一个执行队列进行操作,捕获视频中的图片》保存到UImage》做其他函数处理》返回处理结果,然后loop这个过程。这个过程应该是线程处理的(本人用了队列)
本人在思考这个问题的时候遇到几个问题:
1.用队列本人认为应该是正确的,但是-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection方法在本人对UImage处理完成之前就进行了第二次调用(它可能应该是用消息的传递机制),导致本人上一次调用的图片被释放,本人想能否能限制captureOutput函数的调用方式
2.原因是caputreOutput的执行速度应该是毫秒级的,本人怎么样限制执行速度
总结:就是一个后台获取摄像头预览视频的实时截图问题,毕竟本人是第一次接触iOS,还是希望各位老司机提供思路和方法。假如能指出用哪个函数或类最好,感谢万分!
本人现在有一个这样的设想,通过-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection这个方法获取图片,然后按照这样一个执行队列进行操作,捕获视频中的图片》保存到UImage》做其他函数处理》返回处理结果,然后loop这个过程。这个过程应该是线程处理的(本人用了队列)
本人在思考这个问题的时候遇到几个问题:
1.用队列本人认为应该是正确的,但是-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection方法在本人对UImage处理完成之前就进行了第二次调用(它可能应该是用消息的传递机制),导致本人上一次调用的图片被释放,本人想能否能限制captureOutput函数的调用方式
2.原因是caputreOutput的执行速度应该是毫秒级的,本人怎么样限制执行速度
总结:就是一个后台获取摄像头预览视频的实时截图问题,毕竟本人是第一次接触iOS,还是希望各位老司机提供思路和方法。假如能指出用哪个函数或类最好,感谢万分!
解决方案
22
可以通过改变帧率来调节输出数据的快慢。