- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我试图更好地理解 AVFoundation 框架以及各种 Core xxxx 框架,因此我决定尝试一个简单的视频捕获,看看是否可以将图像输出到 UI。我查看了 rosyWriter 代码和文档,但没有答案。所以:
我有标准的捕获 session 代码来添加输入和输出。以下内容与问题相关:
//moving the buffer processing off the main queue
dispatch_queue_t bufferProcessingQueue=dispatch_queue_create("theBufferQueue", NULL);
[self.theOutput setSampleBufferDelegate:self queue:bufferProcessingQueue];
dispatch_release(bufferProcessingQueue);
然后是代表:
-(void) captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer
fromConnection:(AVCaptureConnection *)connection
{
CVPixelBufferRef pb = CMSampleBufferGetImageBuffer(sampleBuffer);
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pb];
CGImageRef ref = [self.theContext createCGImage:ciImage fromRect:ciImage.extent];
dispatch_async(dispatch_get_main_queue(), ^{
self.testBufferImage.image= [UIImage imageWithCGImage:ref scale:1.0 orientation:UIImageOrientationRight];
});
}
问题:
1- 我猜,正如我上面所做的那样,我们应该始终将委托(delegate)设置为像我上面所做的那样在单独的队列上运行,而不是在主队列上运行。正确吗?
2- 结合起来,在委托(delegate)方法中,任何处理 UI 的调用都必须像我一样放回主队列。正确吗?
3- 当我运行此代码时,大约 5 到 10 秒后,我收到“收到内存警告”错误并且应用程序关闭。什么可能导致这种情况?
最佳答案
1) 一般来说是的,你应该。您可以在主队列上运行它,但这可能会导致 UI 响应问题等。
2) 正确。
3) 您正在创建一系列 CGImageRef。你在哪里释放它们?
出于性能原因,如果您需要对视频的渲染进行精细控制,您可能应该使用 OpenGL。否则,您可以使用 AVCaptureVideoPreviewLayer 轻松获得预览。
关于ios - 使用 captureOutput :captureOutput didOutputSampleBuffer:sampleBuffer fromConnection:connection 捕获视频并显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12641974/
iOS 4.3 测试版 1 我不知道发生了什么,但不知何故,新 Beta 中缺少 sampleBuffer 的 MetaDictionary。任何人都可以批准吗? 我总是得到这样的 MetaDicti
我想从 AVCaptureSession 的实时馈送中提取帧,我正在使用 Apple 的 AVCam 作为测试用例。这是 AVCam 的链接: https://developer.apple.com/
我正在为 iOS 4+ 编写一个视频捕捉应用程序。它在 ios 5+ 的设备上工作正常,但在 ios 4+ 中,在录制停止后不会调用委托(delegate) didFinishRecordingToO
我使用 AVCaptureSessionPhoto 允许用户拍摄高分辨率照片。拍照后,我使用 captureOutput:didOutputSampleBuffer:fromConnection: 方
我需要在我的 captureOutput:didOutputSampleBuffer:fromConnection: 方法中有选择地(可靠地)关闭 sampleBuffers 的处理。如您所知,它是从
我试图更好地理解 AVFoundation 框架以及各种 Core xxxx 框架,因此我决定尝试一个简单的视频捕获,看看是否可以将图像输出到 UI。我查看了 rosyWriter 代码和文档,但没有
我正在使用 AVCaptureVideoDataOutput 的 captureOutput:didOutputSampleBuffer:fromConnection: 委托(delegate)方法。
我是一名优秀的程序员,十分优秀!