Tag: avcapturesession

最有效/实时的方式来从iOS摄像头提供像素值在Swift中

这里有一些关于类似问题的讨论。 像这样 ,但是他们看起来很过时,所以我想我会在这里问。 我想从swift 2.0的摄像头获取接近实时的RGB像素值,甚至更好的全图像RGB直方图。 我希望这是尽可能快和最新(理想情况下~30 fps或更高) 我可以从AVCaptureVideoPreviewLayer直接得到这个,或者我需要捕获每帧(asynchronous,我假设,如果过程需要大量的时间),然后从jpeg / png渲染提取像素值? 一些示例代码,取自jquave,但为swift 2.0进行了修改 import UIKit import AVFoundation class ViewController: UIViewController { let captureSession = AVCaptureSession() var previewLayer : AVCaptureVideoPreviewLayer? var captureDevice : AVCaptureDevice? override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. captureSession.sessionPreset = AVCaptureSessionPresetHigh let devices […]

处理AVCaptureVideoDataOutput有关方向的图像数据的build议方法是什么?

我正在编写一个应用程序,对从AVCaptureSession中的AVCaptureVideoDataOutput获取的图像数据执行一些实时处理。 我目前能够开始会话,添加input和输出,然后检索图像数据,将其转换为UIImage并将其显示在屏幕上。 我遇到的主要问题是图像的方向是尴尬的。 这是旋转和镜像,它也看起来倾斜。 我已经做了一些研究,我发现了一些相关的 问题 ,我已经尝试了已经build议的代码,但它不能解决旋转问题。 我认为这些问题是假定UIImage是从其他地方传来的(也许是一个更高级的API,自动为图像添加更多的信息,例如方向),或者是因为我是从video输出源中获得的? 我并不是真的在寻找解决这个问题的代码(尽pipe注释的例子会有帮助),而是以这种方式获得的图像的生命周期的一个很好的解释。 推荐的处理方法是什么?这样可以在屏幕上以对手机方向有意义的方式显示? CGImageRef的方向是什么? 等等 我有一个以前的问题 ,有我用来设置AVCaptureSession的代码。

与AVCaptureSession怪异的错误

我使用下面的代码来设置一个AVCaptureSession,录制一个video文件,然后播放:有时候,这个工作很好,有时我会播放黑屏。 据我所知,这是完全随机的。 当错误发生时,如果我试图在quicktime打开文件,我得到一个“文件无法打开,格式不被识别”的消息。 这使我相信它是一个录音问题,而不是一个回放问题。 另外,如果注释掉增加了麦克风input的代码部分,就不会发生错误(但是我的video文件当然没有audio轨道)…所以也许audioinput会随机地破坏文件原因? – (void)viewDidLoad { [super viewDidLoad]; …. captureSession = [[AVCaptureSession alloc] init]; [captureSession setSessionPreset:AVCaptureSessionPresetHigh]; NSArray *devices = [AVCaptureDevice devices]; AVCaptureDevice *frontCamera; AVCaptureDevice *mic = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio]; for (AVCaptureDevice *device in devices) { NSLog(@"Device name: %@", [device localizedName]); if ([device hasMediaType:AVMediaTypeVideo]) { if ([device position] == AVCaptureDevicePositionFront) { NSLog(@"Device position : front"); […]

如何在AVCaptureSession上设置audio采样率?

我使用AVCaptureSession使用AVCaptureVideoDataOutput和AVCaptureAudioDataOutput将video和audiologging到采样缓冲区中。 iPhone(4和4S)的默认audio采样率为44100Hz。 我想将此设置为48000Hz,但AVCaptureSession似乎没有任何audio采样率的设置。 我试图使用AVAudioSession来改变硬件采样率(使用setPreferredHardwareSampleRate),但是虽然它报告硬件采样率被改变(在激活会话之后),但这并不影响我在AVCaptureAudioDataOutput采样代理中获得的实际采样率。 是否有任何方法来设置AVCaptureSession本身的audio采样率?

Swift AVCaptureSessionclosures打开button错误:当前不支持多个audio/videoAVCaptureInputs

我有一个工作条码扫描器的代码。 当我点击openCamerabutton时,第一次都是好的。 当我点击closeCamerabutton,好,但如果我再次点击openCamerabutton给出一个致命的错误。 代码和错误如下。 事实上,是否可以用一个button切换摄像机视图? // Barcode Camera Properties let captureSession = AVCaptureSession() var captureDevice:AVCaptureDevice? var captureLayer:AVCaptureVideoPreviewLayer? override func viewDidLoad() { super.viewDidLoad() self.cameraView.alpha = 0 } @IBAction func closeCamera(sender: AnyObject) { self.captureLayer!.hidden = true self.captureSession.stopRunning() } @IBAction func openCamera(sender: AnyObject) { self.cameraView.alpha = 1 self.cameraView.animate() setupCaptureSession() } //MARK: Session Startup private func setupCaptureSession(){ self.captureDevice = […]

AVCaptureOutput didOutputSampleBuffer停止调用

我有一个与didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection方法didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection的问题。 当我将sampleBuffer添加到CFArray中时,它会在一两秒钟内停止调用。 如果我删除CFArray代码,委托方法继续调用,所以我不知道为什么CFArray代码导致它停止。 我会很感激任何帮助。 @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); } } 控制台输出: // 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] […]

AVCaptureSession条码扫描

我目前正在使用AVCaptureSession和AVCaptureMetadataOutput 。 它完美的工作,但我只是想知道如何指示扫描和分析元数据对象只在AVCaptureVideoPreviewLayer的特定区域?

为什么我的audioAVCaptureConnection不能用于最高分辨率格式?

我正在使用AVAssetWriter和AVAssetWriterInput来loggingaudio和video文件的iOS项目。 当video分辨率限制在720×1280时,一切似乎都正常。 我现在正试图利用AVCaptureDeviceFormats获得更高分辨率的iOS设备。 使用设备上可用的任何AVCaptureDeviceFormats,video继续正常工作。 但是,audio不起作用。 我已经跟踪到了我的audioAVCaptureConnection的active属性 ,这是最高分辨率格式的NO ,当我login时看起来像这样: <AVCaptureConnection: 0x16f62130 [type:soun][enabled:1][active:0]> 另外,当audio连接不活动时,我的didOutputSampleBuffer委托callback不会与audio数据一起被调用。 我的问题: 为什么audioAVCaptureConnection对低分辨率格式有效,但对最高分辨率格式不适用? video分辨率设置为最高时是否可以录制audio? 如果是这样,怎么样? 例: iPhone6背面摄像头的最高分辨率AVCaptureFormat: 720×1280,30 FPS(audio连接有效) 720×1280,240 FPS(audio连接有效) 1080×1920,30 FPS(audio连接活动) 1080×1920,60 FPS(audio连接活动) 1936×2592,30 FPS (audio连接无效) 2448×3264,30 FPS (audio连接无效) iPhone6前置摄像头的最高分辨率AVCaptureFormat: 720×1280,60 FPS(audio连接有效) 960×1280,60 FPS (audio连接无效) 以下是我用来设置活动格式的代码: if ([self.camera lockForConfiguration:nil]) { self.camera.activeFormat = format; [self.camera unlockForConfiguration]; }

获取AvCaptureVideoDataOutput可用的实际NSStringVideoCVPixelFormatTypes

我正试图find一个AVFoundation输出接受的格式: self.theOutput=[[AVCaptureVideoDataOutput alloc]init]; if ([self.theSession canAddOutput:self.theOutput]) [self.theSession addOutput:self.theOutput]; 然后,我在之后插入一个断点: po [self.theOutput availableVideoCVPixelFormatTypes] 我得到这个: (NSArray *) $5 = 0x2087ad00 <__NSArrayM 0x2087ad00>( 875704438, 875704422, 1111970369 ) 我如何获得这些格式types的string值? 谢谢

AVCaptureSession和AVCaptureMovieFileOutput帧时间戳

我正在用AVCaptureSession和AVCaptureMovieFileOutput录制电影。 我也在录制加速度数据,并尝试将加速度数据与videoalignment。 我试图找出一种方法来获得开始video文件的时间。 我正在做以下事情: currentDate = [NSDate date]; [output startRecordingToOutputFileURL:fileUrl recordingDelegate:self]; 但是,根据我的testing,在开始调用startRecordingToOutputFileURL之前,video录制开始0.12秒。 我假设这是因为各种video缓冲区已经充满了数据被添加到文件。 反正有没有得到video的第一帧的实际NSDate?