标签: avcapturesession

AVCaptureMovieFileOutput - 没有活动/启用的连接

我正在尝试使用AVFoundation在我的iPhone应用程序中录制视频.但每当我单击"录制"按钮时,应用程序都会崩溃

- [AVCaptureMovieFileOutput startRecordingToOutputFileURL:recordingDelegate:] - 没有活动/启用的连接.

我知道同样的问题,但是它的答案都没有帮助我.我的问题是相同的代码完全适用于另一个应用程序,当我尝试在这个应用程序中使用完全相同的代码 - 崩溃.但仍然照片捕捉工作正常.

在这里添加我的代码 - 请帮助我,提前致谢

  -(void)viewDidLoad
  {
 [super viewDidLoad];
 self.captureSession = [[AVCaptureSession alloc] init];

   AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDevice *audioDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio];

  self.videoInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:nil];
  self.audioInput = [[AVCaptureDeviceInput alloc] initWithDevice:audioDevice error:nil];

  self.stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
  NSDictionary *stillImageOutputSettings = [[NSDictionary alloc] initWithObjectsAndKeys:
                                          AVVideoCodecJPEG, AVVideoCodecKey, nil];
  [self.stillImageOutput setOutputSettings:stillImageOutputSettings];

  self.movieOutput = [[AVCaptureMovieFileOutput alloc] init];

  [self.captureSession addInput:self.videoInput];
  [self.captureSession addOutput:self.stillImageOutput];




   previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:self.captureSession];
   UIView *aView = self.view;
   previewLayer.frame = CGRectMake(70, 190, 270, …
Run Code Online (Sandbox Code Playgroud)

video objective-c avfoundation ios avcapturesession

14
推荐指数
3
解决办法
9931
查看次数

iOS AVCaptureSession - 如何获取/设置每秒记录的帧数?

我是AVCaptureSession的新手,希望更好地了解如何使用它.因此,我将视频流捕获为分离的CIImages并将其转换为UIImages.现在我希望能够获得每秒帧数的捕获量,并且最好能够设置它.

知道怎么做吗?

frame-rate ios avcapturesession

13
推荐指数
3
解决办法
1万
查看次数

同时使用vibrate和AVCaptureSession

我正在尝试在录制视频的同时振动手机,但我发现它AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);并不能很好地发挥作用AVCaptureSession.有没有其他方法可以振动手机,还是我在录制视频时失去了振动功能?

iphone cocoa-touch avcapturesession

13
推荐指数
1
解决办法
1509
查看次数

在AVCaptureVideoPreviewLayer中精确裁剪捕获的图像

我有一个使用AV基金会的照片应用程序.我使用AVCaptureVideoPreviewLayer设置了一个预览图层,它占据了屏幕的上半部分.因此,当用户试图拍摄他们的照片时,他们只能看到屏幕的上半部分看到的内容.

这很好用,但是当用户实际拍摄照片并尝试将照片设置为图层的内容时,图像会失真.我做了研究并意识到我需要裁剪图像.

我想做的就是裁剪完整捕获的图像,这样剩下的就是用户最初在屏幕上半部分看到的内容.

我已经能够完成这个,但我通过输入手动CGRect值来做到这一点,但它看起来仍然不完美.必须有一种更简单的方法来做到这一点.

在过去的两天里,关于裁剪图像,我已经完成了关于堆栈溢出的每个帖子,但没有任何工作.

必须有一种方法可以以编程方式裁剪捕获的图像,以便最终图像与预览图层中最初看到的完全相同.

这是我的viewDidLoad实现:

- (void)viewDidLoad
{
    [super viewDidLoad];

    AVCaptureSession *session =[[AVCaptureSession alloc]init];
    [session setSessionPreset:AVCaptureSessionPresetPhoto];

    AVCaptureDevice *inputDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    NSError *error = [[NSError alloc]init];
    AVCaptureDeviceInput *deviceInput = [AVCaptureDeviceInput deviceInputWithDevice:inputDevice error:&error];

    if([session canAddInput:deviceInput])
        [session addInput:deviceInput];

    CALayer *rootLayer = [[self view]layer];
    [rootLayer setMasksToBounds:YES];

    _previewLayer = [[AVCaptureVideoPreviewLayer alloc]initWithSession:session];
    [_previewLayer setFrame:CGRectMake(0, 0, rootLayer.bounds.size.width, rootLayer.bounds.size.height/2)];
    [_previewLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];

    [rootLayer insertSublayer:_previewLayer atIndex:0];

    _stillImageOutput = [[AVCaptureStillImageOutput alloc] init];
    [session addOutput:_stillImageOutput];

    [session startRunning];
    }
Run Code Online (Sandbox Code Playgroud)

以下是用户按下按钮捕获照片时运行的代码:

-(IBAction)stillImageCapture {
    AVCaptureConnection *videoConnection = nil;
    for (AVCaptureConnection *connection in …
Run Code Online (Sandbox Code Playgroud)

objective-c avfoundation calayer ios avcapturesession

13
推荐指数
2
解决办法
5269
查看次数

`[AVCaptureSession canAddOutput:output]`间歇性地返回NO.我能找出原因吗?

我使用canAddOutput:,以确定是否我可以添加AVCaptureMovieFileOutput到一个AVCaptureSession和我发现,canAddOutput:有时没有返回,且多为返回YES.有没有办法找出NO被归还的原因?或者一种消除导致NO返回的情况的方法?或者我能做的其他任何事情都会阻止用户看到间歇性故障?

进一步说明:这种情况大约在30次通话中发生一次.由于我的应用程序尚未启动,因此仅在一台设备上进行了测试:运行7.1.2的iPhone 5

objective-c ios avcapturesession avcapturemoviefileoutput

13
推荐指数
1
解决办法
4900
查看次数

使用maxRecordedFileSize限制AVCaptureSession记录时间

我一直在为iOS 8编写一个相机应用程序,它使用AVFoundation来设置和处理录制和保存(而不是ImagePickerController).我正在尝试保存使用AVCaptureMovieFileOutput类的maxRecordedFileSize属性,以允许用户填充手机上的所有可用空间(减去250MB缓冲区留给苹果的东西).

- (unsigned long long) availableFreespaceInMb {
unsigned long long freeSpace;
NSError *error = nil;
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSDictionary *dictionary = [[NSFileManager defaultManager] attributesOfFileSystemForPath:[paths lastObject] error: &error];

if (dictionary) {
    NSNumber *fileSystemFreeSizeInBytes = [dictionary objectForKey: NSFileSystemFreeSize];
    freeSpace = [fileSystemFreeSizeInBytes unsignedLongLongValue];

} else {
    NSLog(@"Error getting free space");
    //Handle error
}

//convert to MB
freeSpace = (freeSpace/1024ll)/1024ll;
freeSpace -= _recordSpaceBufferInMb; // 250 MB
NSLog(@"Remaining space in MB: %llu", freeSpace);
NSLog(@"    Diff Since Last: %llu", (_prevRemSpaceMb - freeSpace)); …
Run Code Online (Sandbox Code Playgroud)

objective-c avfoundation ios avcapturesession avcapturemoviefileoutput

13
推荐指数
1
解决办法
958
查看次数

AVCaptureSession可以使用自定义分辨率

我正在使用AVCaptureSession捕捉和录制视频.

我需要以4:3的比例录制视频,并且分辨率很高.

有没有办法在使用时捕获时指定自定义分辨率AVCaptureSession

我试图使用本地预设,但问题是,我需要在4以捕获:3的比例,而且几乎所有的预置为16:9.而4:3的分辨率非常低.

我不能用任何其他方式将预设更改为自定义预设,如果我需要以更好的分辨率捕获4:3视频,该怎么办?有任何想法吗?

avfoundation ios avcapturesession

13
推荐指数
1
解决办法
2543
查看次数

如何在AVCapture设备输入上禁用相机麦克风

我将麦克风设置在上,AVCaptureSession并且需要麦克风开关。我应该如何进行呢?我真的需要captureSession?.removeInput(microphone)还是有简便的方法?

let microphone = AVCaptureDevice.defaultDevice(withMediaType: AVMediaTypeAudio)

        do {
            let micInput = try AVCaptureDeviceInput(device: microphone)
            if captureSession.canAddInput(micInput) {
                captureSession.addInput(micInput)
            }
        } catch {
            print("Error setting device audio input: \(error)")
            return false
        }
Run Code Online (Sandbox Code Playgroud)

ios avcapturesession avcapturedevice swift

13
推荐指数
1
解决办法
428
查看次数

iOS:相机方向

我想使用AVCaptureSession使用相机拍摄图像.

它工作正常,我启动相机,我可以得到输出.但是,当我旋转设备时,我在视频方向上遇到了一些问题.

首先,我想支持横向左右方向,也可能是后期的纵向模式.

我执行:

- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation{ 
return UIInterfaceOrientationIsLandscapse(interfaceOrientation);
}
Run Code Online (Sandbox Code Playgroud)

当我旋转设备时,它会将应用程序从横向左侧旋转到横向右侧,反之亦然,但是当我在横向左侧时,我只能正确地看到相机.当应用程序处于横向右侧时,视频将旋转180度.

非常感谢你.

更新:

我已经尝试过Spectravideo328的答案,但是当我尝试旋转设备和应用程序崩溃时出现错误.这是错误:

[AVCaptureVideoPreviewLayer connection]: unrecognized selector sent to instance 0xf678210

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AVCaptureVideoPreviewLayer connection]: unrecognized selector sent to instance 0xf678210'
Run Code Online (Sandbox Code Playgroud)

此行中发生错误:

AVCaptureConnection *previewLayerConnection=self.previewLayer.connection;
Run Code Online (Sandbox Code Playgroud)

我把它放在了shouldAutorotateToInterfaceOrientation方法里面.你知道这个错误的原因是什么吗?

谢谢

iphone camera objective-c rotation avcapturesession

12
推荐指数
1
解决办法
2万
查看次数

使用AVCaptureSession切换前/后摄像头

我正在关注这个问题的唯一答案 -

用avcapturesession切换相机

但是cameraWithPosition似乎不起作用.已过时?

//Get new input
    AVCaptureDevice *newCamera = nil;
    if(((AVCaptureDeviceInput*)currentCameraInput).device.position == AVCaptureDevicePositionBack)
    {
        newCamera = [self cameraWithPosition:AVCaptureDevicePositionFront];
    }
    else
    {
        newCamera = [self cameraWithPosition:AVCaptureDevicePositionBack];
    }
Run Code Online (Sandbox Code Playgroud)

objective-c avfoundation ios avcapturesession

12
推荐指数
3
解决办法
1万
查看次数