首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AVCaptureOutput didOutputSampleBuffer停止被呼叫

AVCaptureOutput didOutputSampleBuffer停止被呼叫
EN

Stack Overflow用户
提问于 2015-06-15 16:51:23
回答 2查看 2.9K关注 0票数 5

我对委托方法didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection of AVCaptureOutput有一个问题。

当我将sampleBuffer添加到CFArray时,它将在一两秒钟内停止调用。如果删除CFArray代码,委托方法将继续被调用,因此我不知道为什么CFArray代码会导致它停止。我很感谢你的帮助。

代码语言:javascript
复制
@property CFMutableArrayRef sampleBufferArray;

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
    NSLog(@"Called");

    if (!self.sampleBufferArray)
    {
        self.sampleBufferArray = CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);
        CFArrayAppendValue(self.sampleBufferArray, sampleBuffer);
    }
    else
    {
        CFArrayAppendValue(self.sampleBufferArray, sampleBuffer);
    }
}

控制台输出:

代码语言:javascript
复制
// Session start
2015-06-15 13:06:07.264 App[22467:5897858] Called
2015-06-15 13:06:07.286 App[22467:5897858] Called
2015-06-15 13:06:07.289 App[22467:5897858] Called
2015-06-15 13:06:07.315 App[22467:5897895] Called
2015-06-15 13:06:07.366 App[22467:5897895] Called
2015-06-15 13:06:07.384 App[22467:5897895] Called
2015-06-15 13:06:07.411 App[22467:5897895] Called
2015-06-15 13:06:07.449 App[22467:5897858] Called
2015-06-15 13:06:07.480 App[22467:5897858] Called
2015-06-15 13:06:07.513 App[22467:5897895] Called
2015-06-15 13:06:07.546 App[22467:5897895] Called
2015-06-15 13:06:07.579 App[22467:5897895] Called
2015-06-15 13:06:07.614 App[22467:5897895] Called
// No more calls after this point
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-18 15:29:34

您的问题实际上是在Docs中引用的,特别是;

如果应用程序通过将提供的CMSampleBufferRef对象保留太长时间而导致样本丢失,但它需要长时间访问示例数据,请考虑将数据复制到新缓冲区中,然后释放示例缓冲区(如果以前保留的话),以便可以重用其引用的内存。

本质上,您需要保持回调操作尽可能简单,如果需要对在回调中传递给您的框架执行进一步的处理,则需要将其复制到新的缓冲区并在后台执行处理。此外,请记住,必须显式保留和释放对象。

另一个考虑因素是记忆压力。帧包含了大量的数据,过多的数据会导致应用程序崩溃。

票数 13
EN

Stack Overflow用户

发布于 2019-10-09 16:46:11

我在Xamarin(C#) iOS开发中遇到了类似的问题。使用以下代码发布CMSampleBuffer (如果在Xamarin中):

代码语言:javascript
复制
GC.Collect();
GC.WaitForPendingFinalizers();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30850676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档