Tag: avfoundation

ios无尽的video录制

我试图开发一个iPhone应用程序,将使用相机只logging最后几分钟/秒。 例如,你录制一些电影5分钟点击“保存”,只有最后30秒将被保存。 我不想实际logging五分钟,然后砍掉最后30秒(这不会为我工作)。 这个想法被称为“循环logging” 。 这导致无尽的录像,但你只记得最后一部分。 Precorder应用程序做我想做的事情。 (我想在其他上下文中使用此function)我认为这应该很容易用循环缓冲区模拟。 我开始了AVFoundation项目。 如果我能以某种方式将video数据redirect到一个循环缓冲区(我将实现),这将是非常棒的。 我只find关于如何将其写入文件的信息。 我知道我可以把video切成段落并保存,但保存并重新启动摄像机录制另一部分需要时间,并有可能在电影中丢失一些重要的时刻。 任何线索如何从相机redirect数据将不胜感激。

如何从CMSampleBufferRef获取字节,通过networking发送

我正在使用AVFoundation框架捕获video。借助Apple文档http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/03_MediaCapture.html%23//apple_ref/doc/ UID / TP40010188-CH5-SW2 现在我做了以下的事情 1.创buildvideoCaptureDevice 2.创buildAVCaptureDeviceInput并设置videoCaptureDevice 3.创buildAVCaptureVideoDataOutput并实现Delegate 4.创buildAVCaptureSession – 将input设置为AVCaptureDeviceInput并将输出设置为AVCaptureVideoDataOutput 5.在AVCaptureVideoDataOutput委托方法 -(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 我得到了CMSamplebuffer和转换成UIImage并testing打印UIImageview使用 [self.imageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES]; 每一件事情都做得很好…….. 我的问题是,我需要通过UDP套接字发送video帧。即使以下一个是不好的主意,我试过,UIImage NSData和通过UDP口袋发送。 BUt在video处理中得到如此的延迟。因为UIImage对NSDate的问题最重要 所以请给我解决scheme对于我的问题 1)任何方式来将CMSampleBUffer或CVImageBuffer转换为NSData? 2)像audio队列服务和video队列存储UIImage和做UIImage NSDate和发送? 如果骑在错误的algorithm后面,请在写入方向上引导我 提前致谢

我怎样才能从iPhone相机快速处理图像?

我正在写一个iPhone应用程序,它将做一些实时的相机image processing。 我使用AVFoundation文档中提供的示例作为出发点:设置捕获会话,从样本缓冲区数据制作UIImage,然后通过-setNeedsDisplay (在主线程中调用)绘制图像。 这是有效的,但速度相当慢(每帧50毫秒,在-drawRect:调用之间测量,对于192 x 144预设),而且我在App Store上看到的应用程序比这更快。 大约一半的时间都花在-setNeedsDisplay 。 我怎样才能加快这个image processing?

什么技术是最好的生活streamiPhone摄像机数据到电脑?

我想将video从iPhone相机传输到在Mac上运行的应用程序。 认为像video聊天,但只有一种方式,从设备到接收器应用程序(而不是video聊天)。 我迄今为止的基本了解: 你可以使用AVFoundation来获取“实时”摄像机数据而不保存到文件,但它是未压缩的数据,因此我必须自己处理压缩。 没有内置的AVCaptureOutput支持发送到networking位置,我不得不自己工作了一下。 我是对的上述还是我已经偏离? Apple Tech Q&A 1702提供了一些有关将各个帧保存为图像的信息 – 这是最好的方法吗? 只需节省30fps,然后像ffmpeg压缩'EM? 关于直播到iPhone的讨论有很多讨论,但发送现场video的人的信息要less得多。 我希望有一些广泛的笔触让我指出正确的方向。

模拟AVLayerVideoGravityResizeAspectFill:裁剪和中心video模仿预览,而不会失去清晰度

基于这个SOpost ,下面的代码可以旋转,聚焦和剪切用户捕捉的video。 捕获会话使用AVCaptureSessionPresetHigh作为预设值,而预览层使用AVLayerVideoGravityResizeAspectFill作为video重力。 这个预览是非常尖锐的。 然而,导出的video并不那么清晰,表面上是因为从5S的后置摄像头的1920×1080分辨率到320×568(导出video的目标尺寸)的缩放会引起像素丢失的模糊现象? 假设没有办法从1920×1080缩放到320×568而没有模糊,问题就变成了:如何模仿预览图层的清晰度? 不知何故,苹果正在使用algorithm将1920x1080video转换成320×568的清晰预览帧。 有没有一种方法来模仿AVAssetWriter或AVAssetExportSession? func cropVideo() { // Set start time let startTime = NSDate().timeIntervalSince1970 // Create main composition & its tracks let mainComposition = AVMutableComposition() let compositionVideoTrack = mainComposition.addMutableTrackWithMediaType(AVMediaTypeVideo, preferredTrackID: CMPersistentTrackID(kCMPersistentTrackID_Invalid)) let compositionAudioTrack = mainComposition.addMutableTrackWithMediaType(AVMediaTypeAudio, preferredTrackID: CMPersistentTrackID(kCMPersistentTrackID_Invalid)) // Get source video & audio tracks let videoPath = getFilePath(curSlice!.getCaptureURL()) let videoURL […]

在iOS上导出video:了解和设置帧持续时间属性?

在本教程中,关于合并video,作者将导出video的帧持续时间设置为30 FPS。 1)不是将帧持续时间固定为30 FPS,帧持续时间不应该与video合并的帧持续时间相关联吗? 2)在导出video时,导出的video与源video不同,使用不同的FPS有什么优缺点? 这是以牺牲video质量为代价来加快出口时间的一种方式吗? 例如,如果教程中的源video是以24 FPS拍摄的呢? 我们需要在iOS上导出video,有时会合并多个video,有时会导出从相机设备捕获的单个video。

AVPlayerViewController不播放本地video

我在我的项目中添加了一个DemoVideo.mp4,并将其添加到复制资源文件。 但是,当我运行该应用程序,它不会播放我的video。 这是我的方法。 private func setUpAndPlayVideo() { guard let videoPath = Bundle.main.path(forResource: "DemoVideo.mp4", ofType: nil) else { return } let videoURL = NSURL(string: videoPath) let player = AVPlayer(url: videoURL! as URL) playerViewController = AVPlayerViewController() playerViewController.player = player playerViewController.view.frame = self.videoPlayerView.bounds self.videoPlayerView.addSubview(playerViewController.view) playerViewController.showsPlaybackControls = false playerViewController.player?.play() } 我在viewDidAppear方法中调用此方法,但它显示此。

从UITableViewCell上的多个AVPlayerItem中添加和删除观察者

我试图做一个表视图播放多个videoAVPlayer和AVPlayerItem ,我需要addObserver到每个AVPlayerItem所以我可以跟踪playbackLikelyToKeepUp属性 我试过和失败的是在设置AVPlayerItem之后添加观察者,并在UITableViewCell的deinit中删除它,但由于单元格永远不会被释放,但得到出列所以这将无法正常工作,我会得到这个错误 An instance 0x14eedebc0 of class AVPlayerItem was deallocated while key value observers were still registered with it. search后,我想出了这个 我不应该在UITableViewCell上添加或删除观察者,但我必须因为播放器项目是在单元格子类 处理观察者的最好方法是在'UITableViewDelegate'方法中 在willDisplayCell添加并在willDisplayCell移除 但即使这不起作用,因为AVPlayerItem需要时间来初始化 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! TableViewCell cell.setUpPLayer() return cell } override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath […]

如何在EXIF中logging制造商注释或用户注释?

我正在构build相机应用程序,并且想要在EXIF中logging用户select的设置。 大多数设置都有标准字段,但是其中一个没有,所以我想我会把它logging在制造商的注释字段中。 我试过了 let attachments = NSMutableDictionary(dictionary: CMCopyDictionaryOfAttachments(nil, buffer, kCMAttachmentMode_ShouldPropagate) as! NSDictionary) let exif = NSMutableDictionary(dictionary: attachments[kCGImagePropertyExifDictionary] as! NSDictionary) exif[kCGImagePropertyExifMakerNote] = "Blah blah" attachments[kCGImagePropertyExifDictionary] = exif 但是当我尝试 exiftool photo.JPG | grep -i maker 要么 exiftool photo.JPG | grep -i blah 我看不到这个音符。 我在EXIF中设置的所有其他属性都显示出来。 然后我试着把它设置为一个用户注释,正如在这个答案中所build议的那样: let comment = ["My custom setting": "blah"] exif[kCGImagePropertyExifUserComment] = comment 这也不pipe用。 我是否将制造者注释的格式设置为错误? […]

AVCaptureStillImageOutput永远不会调用完成处理程序

以下代码不起作用。 怎么了? AVCaptureDevice * videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; AVCaptureDeviceInput * videoInput = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:nil]; AVCaptureSession * captureSession = [[AVCaptureSession alloc] init]; captureSession.sessionPreset = AVCaptureSessionPresetMedium; if (![captureSession canAddInput:videoInput]) NSLog(@"Can't add input"); [captureSession addInput:videoInput]; self.stillImageOutput = [[AVCaptureStillImageOutput alloc] init]; [self.stillImageOutput setOutputSettings:@{AVVideoCodecKey:AVVideoCodecJPEG}]; if (![captureSession canAddOutput:videoInput]) NSLog(@"Can't add output"); [captureSession addOutput:self.stillImageOutput]; [self.stillImageOutput captureStillImageAsynchronouslyFromConnection:[self.stillImageOutput.connections lastObject] completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) […]