- 41
- 0
(void)captureOutput:(AVCaptureOutput )captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection )connection
调用这个代理方法 偶尔会崩溃 bugly显示如下
8 AVFoundation -[AVCaptureVideoDataOutput _handleRemoteQueueOperation:] + 344
9 AVFoundation ___47-[AVCaptureVideoDataOutput _updateRemoteQueue:]_block_invoke + 100
10 CoreMedia ___FigRemoteOperationReceiverCreateMessageReceiver_block_invoke + 272
11 CoreMedia ___FigRemoteQueueReceiverSetHandler_block_invoke.2 + 224
12 libdispatch.dylib __dispatch_client_callout + 16### 问题描述
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
pragma mark 相机相关
-
(AVCaptureSession *)captureSession {
if (!_captureSession) {//创建会话层 _captureSession = [[AVCaptureSession alloc] init]; [_captureSession setSessionPreset:AVCaptureSessionPreset1920x1080];}
return _captureSession;
}
-
(AVCaptureDeviceInput *)captureInput {
if (!_captureInput) {_captureInput = [AVCaptureDeviceInput deviceInputWithDevice:self.captureDevice error:nil];}
return _captureInput;
}
-
(AVCaptureStillImageOutput *)captureOutput {
if (!_captureOutput) {//创建、配置输出 _captureOutput = [[AVCaptureStillImageOutput alloc] init]; NSDictionary *outputSettings = [[NSDictionary alloc] initWithObjectsAndKeys:AVVideoCodecJPEG,AVVideoCodecKey,nil]; [_captureOutput setOutputSettings:outputSettings];}
return _captureOutput;
}
-
(AVCaptureVideoDataOutput *)captureDataOutput {
if (!_captureDataOutput) {_captureDataOutput = [[AVCaptureVideoDataOutput alloc] init]; _captureDataOutput.alwaysDiscardsLateVideoFrames = YES; dispatch_queue_t queue = dispatch_queue_create("cameraQueue", NULL); [_captureDataOutput setSampleBufferDelegate:self queue:queue]; NSString* formatKey = (NSString*)kCVPixelBufferPixelFormatTypeKey; NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:formatKey]; [_captureDataOutput setVideoSettings:videoSettings];}
return _captureDataOutput;
}
-
(AVCaptureVideoPreviewLayer *)capturePreviewLayer {
if (!_capturePreviewLayer) {_capturePreviewLayer = [AVCaptureVideoPreviewLayer layerWithSession: self.captureSession]; _capturePreviewLayer.frame = CGRectMake(0,0, ScreenW, ScreenH); _capturePreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;}
return _capturePreviewLayer;
}
-
(AVCaptureDevice *)captureDevice {
if (!_captureDevice) {NSArray *deviceArr = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; for (AVCaptureDevice *device in deviceArr) { if (device.position == AVCaptureDevicePositionBack){ _captureDevice = device; _captureInput = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil]; } }}
return _captureDevice;
}
//输入设备
if ([self.captureSession canAddInput:self.captureInput]) {
[self.captureSession addInput:self.captureInput];
}
//输出设备
if ([self.captureSession canAddOutput:self.captureDataOutput]) {
[self.captureSession addOutput:self.captureDataOutput];
}
//输出设备
if ([self.captureSession canAddOutput:self.captureOutput]) {
[self.captureSession addOutput:self.captureOutput];
}
//添加预览层
[self.view.layer addSublayer:self.capturePreviewLayer];
[self.view.layer addSublayer:self.detectLayer];
self.view.layer.masksToBounds = YES;
[self.view addSubview:self.squareView];
- 共 0 条
- 全部回答
-
子不语怪兽 普通会员 1楼
这个函数在Objective-C中用于从远程队列中获取视频数据输出。然而,如果这个函数在运行时崩溃,可能有几种原因:
-
AVCaptureVideoDataOutput类的实现可能存在问题。你需要确保你的代码已经正确地实现了这个类,包括初始化方法和相应的错误处理。 -
AVCaptureVideoDataOutput的队列可能有问题。你可能需要检查队列的大小是否超过了可用的缓冲区大小。你可以使用-setQueueName:方法来改变队列的名字,然后使用-setMaximumSize:方法来限制队列的最大大小。 -
AVCaptureVideoDataOutput的配置可能存在问题。你可能需要检查配置的正确性,包括设置的输出质量、缓冲区大小、队列的名称等。 -
在调用
-updateRemoteQueue:]函数时,可能有一些资源(如网络连接、文件系统等)正在使用。在这种情况下,你需要确保这些资源都在使用期间。 -
如果你的代码是使用 C++ 编写的,那么可能需要检查代码中是否存在内存泄漏或其他问题。
如果你无法确定问题的原因,你可以尝试在一个新的环境中重现这个问题,然后逐个排查每个可能的问题。如果你仍然无法解决问题,那么可能需要寻求专业的帮助。
-
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
