Tag: avcapturesession

iOS自定义键盘 – 相机不工作

我想创build一个自定义的键盘,作为条形码扫描仪。 我已经完成了整个编码,但是输出结果并不如预期的那样:我被要求提供相机权限(第一次),但是相机并没有发送video给视图。 我想,出于安全的原因,使用键盘可能会有一些限制吗? 1.)打开火炬 -(void) turnFlashOn { AVCaptureDevice *flashLight = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; if([flashLight isTorchAvailable] && [flashLight isTorchModeSupported:AVCaptureTorchModeOn]) { BOOL success = [flashLight lockForConfiguration:nil]; if(success){ NSError *error; [flashLight setTorchMode:AVCaptureTorchModeOn]; [flashLight setTorchModeOnWithLevel:1.0 error:&error]; NSLog(@"Error: %@", error); [flashLight unlockForConfiguration]; NSLog(@"flash turned on -> OK"); } else { NSLog(@"flash turn on -> ERROR"); } } } 这给了我这个日志输出,但闪光灯没有任何反应: Error: (null) […]

IOS / iPhone的照片突发模式API

我试图在iPhone 5s上以最高分辨率(AVCaptureSessionPresetPhoto)捕捉多张照片。 我尝试使用下面的代码: dispatch_semaphore_t sync = dispatch_semaphore_create(0); while( [self isBurstModeEnabled] == YES ) { [stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error) { if (imageSampleBuffer != NULL) { NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer]; NSString *videoThumbPath = [NSString stringWithFormat:@"%@/img%d.png", burstFolderPath, index]; [imageData writeToFile:videoThumbPath atomically:YES]; if( 0 == index ) { [self NSLogPrint:[NSString stringWithFormat:@"Created photo at %@",videoThumbPath]]; } […]

允许在录制video(如ios)时播放音乐

首先我要讨论在snapchat中发生的情况。 在Snapchat中,当你开始录制video和歌曲在后台运行时, 它允许在录制video时继续播放该歌曲,并且在录制该video之后,您还可以在后台听到该歌曲。 我正在使用SCRecorder录制video并使用自定义布局捕获图像。 现在我想要做的就像上面的情景,但问题是每当我开始录制背景歌曲中的video停止播放。 SCRecorder使用AVCaptureSession录制video。 那么我该如何解决这个问题呢? 使用SCRecorder允许在video中录制背景音乐。 录制在video背景中播放的歌曲。

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

我有一个使用AV基础的照片应用程序。 我使用AVCaptureVideoPreviewLayer设置了一个预览图层,占用屏幕的上半部分。 所以当用户试图拍照时,他们只能看到屏幕的上半部分。 这样做效果很好,但是当用户真正拍摄照片时,我尝试将照片设置为图层内容,图像失真。 我做了研究,并意识到我需要裁剪图像。 我想要做的就是裁剪完整的图像,以便所有剩下的东西正是用户最初在屏幕上半部分看到的。 我已经能够做到这一点,但我通过input手动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, […]

如何在使用RTMPStreamPublisher发布video的同时在iPhone上存储video?

现在我正在使用RTMPStreamPublisher在RTMPStreamPublisher上发布video。 它正在上传成功,但任何人都可以告诉我如何可以在上传到服务器上的同时在iPhone上存储相同的video? 我正在使用https://github.com/slavavdovichenko/MediaLibDemos ,但没有太多的文档可用。 如果我只能存储发布的数据,那么我的工作就会成功。 这里是他们用来上传stream的方法,但我找不到在iPhone设备上存储相同video的方法: // ACTIONS -(void)doConnect { #if 0 // use ffmpeg rtmp NSString *url = [NSString stringWithFormat:@"%@/%@", hostTextField.text, streamTextField.text]; upstream = [[BroadcastStreamClient alloc] init:url resolution:RESOLUTION_LOW]; upstream.delegate = self; upstream.encoder = [MPMediaEncoder new]; [upstream start]; socket = [[RTMPClient alloc] init:host] btnConnect.title = @"Disconnect"; return; #endif #if 0 // use inside RTMPClient instance […]

我如何从UIImage中提取AVMetadataObject?

我想使用iOS 7的新的条形码扫描function与UIImage而不是从一个设备的相机实时捕捉。 我已经有一个AVCaptureDeviceInput检测工作正常。 我认为这样做的最好方法是创build一个AVCaptureInput的具体子类,它从UIImage向AVCaptureSession提供媒体数据。 但是,我无法find任何有关如何子类AVCaptureInput文档或示例,所以我很茫然。 另一种方法是从现有的AVCaptureDeviceInput覆盖媒体stream,但由于这些API是私有的,我想在App Store上发布我的应用程序,这并不理想。 最终,我可能会用ZXing或者ZBar这样的第三方条码库来完成这个工作,但是在这里不能使用苹果的内置function似乎是一种浪费。

如何在iOS 9中通过幻灯片和拆分视图使用AVCaptureSession?

我的团队正在开发一套用于条码扫描 , ID扫描和OCR的SDK。 我们使用设备的相机,特别是AVCaptureSession ,来获取我们进行处理的video帧。 我们正在探索新的iOS 9多任务function幻灯片和拆分视图。 苹果build议select以相机为中心的应用程序的这些function,使用整个屏幕快速预览和捕捉片刻是一个主要function( 参考 )。 这是在他们的示例应用程序AVCam中使用的方法。 但是,我们的客户可能有不属于这个类别的应用程序(例如手机银行应用程序),所以我们不能强迫他们退出,而是需要处理SDK中的新function。 我们正在探索什么是最好的方法,因为目前的文档并没有告诉我们该怎么做。 我们使用我们简单的Camera示例应用程序来分析用例。 示例应用程序在Github上可用,它是从iOS 9 Beta 5开发的。 从示例应用程序中,可以清楚地看到使用“幻灯片放映”时以及使用“分割视图”时发生了哪些系统事件。 当我们的应用程序是主要的,并使用幻灯片,我们得到了UIApplicationWillResignActiveNotification和AVCaptureSessionDidStopRunningNotification 当使用幻灯片播放,我们的应用程序是次要的,我们得到UIApplicationWillEnterForegroundNotification和AVCaptureSessionDidStopRunningNotification后立即 当使用拆分视图时,在每个分隔符拖动,我们的应用程序获取UIApplicationWillResignActiveNotification 。 但是,如果在分割视图中启动相机,则立即获取AVCaptureSessionDidStopRunningNotification 所以,凭经验来看,当使用“幻灯片”或“分割视图”时, AVCaptureSession会立即停止。 令人困惑的是我们的示例应用程序也支持的UIImagePickerControllerperformance出完全不同的行为。 当应用程序进入幻灯片放映/分割视图时, UIImagePickerController不会停止,而是完全正常运行。 通常可以在分割视图中拍照。 实际上,两个呈现UIImagePickerController应用程序可以并行工作,活动应用程序的UIImagePickerController处于活动状态。 (您可以通过运行我们的示例应用程序和联系人应用程序 – >新build联系人 – >添加照片来尝试) 考虑到这一切,我们的问题如下: 如果在使用“幻灯片”和“分割视图”时立即暂停AVCaptureSession ,是否需要监视AVCaptureSessionDidStopRunningNotification ,并向用户显示消息“Camera Paused”,以便他清楚地知道应用程序未执行扫描? 为什么UIImagePickerController行为与AVCaptureSession不同? 我们可以期待从苹果比AVCaptureSession未来testing版本行为更改为匹配UIImagePickerController ?

AVCaptureDevice相机变焦

我有一个简单的AVCaptureSession运行在我的应用程序中获取相机源并拍照。 我如何使用相机的UIGestureRecognizer实现“捏放大”function?

会话重启后,AVCapture会话缓慢启动

我有一个主视图控制器,并继续到第二个视图控制器,有一个avcapturesession。 我第一次从主视图控制器继续捕捉会话控制器,大约需要50ms(使用“工具”进行检查)。 然后,我从捕获会话中回到主视图控制器,然后从主控制器返回到avcapturesession控制器。 每次从主视图控制器切换到avcapturesession需要更长的时间,并且通过第5次或第6次迭代,轮stream花费大约10秒。 (相比第一次50ms)我已经粘贴下面的avcapture会话的相关代码。 任何人都可以解决这个问题 谢谢 这个类(NSObjecttypes)pipe理第二个视图控制器的捕获会话 那实际上实施了avcapturesession #import "CaptureSessionManager.h" @implementation CaptureSessionManager @synthesize captureSession; @synthesize previewLayer; #pragma mark Capture Session Configuration – (id)init { if ((self = [super init])) { [self setCaptureSession:[[AVCaptureSession alloc] init]]; } return self; } – (void)addVideoPreviewLayer { [self setPreviewLayer:[[[AVCaptureVideoPreviewLayer alloc] initWithSession:[self captureSession]] autorelease]]; [[self previewLayer] setVideoGravity:AVLayerVideoGravityResizeAspectFill]; } – (void)addVideoInput { […]

我可以使用AVCaptureSession将AACstream编码到内存吗?

我正在编写一个iOS应用程序,通过networking传输video和audio。 我正在使用AVCaptureSession抓取使用AVCaptureVideoDataOutput的原始video帧,并使用x264在软件中进行编码。 这很好。 我想为audio做同样的事情,只是我不需要太多的audio控制,所以我想用内置的硬件编码器来产生一个AACstream。 这意味着从audio工具箱层使用audio转换器 。 为了做到这一点,我把一个AVCaptudeAudioDataOutput的audio帧的处理程序: – (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { // get the audio samples into a common buffer _pcmBuffer CMBlockBufferRef blockBuffer = CMSampleBufferGetDataBuffer(sampleBuffer); CMBlockBufferGetDataPointer(blockBuffer, 0, NULL, &_pcmBufferSize, &_pcmBuffer); // use AudioConverter to UInt32 ouputPacketsCount = 1; AudioBufferList bufferList; bufferList.mNumberBuffers = 1; bufferList.mBuffers[0].mNumberChannels = 1; bufferList.mBuffers[0].mDataByteSize = sizeof(_aacBuffer); bufferList.mBuffers[0].mData = _aacBuffer; […]