- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我需要能够让 AVCaptureVideoDataOutput
和 AVCaptureMovieFileOutput
同时工作。以下代码有效,但是视频录制无效。 didFinishRecordingToOutputFileAtURL
委托(delegate)在调用 startRecordingToOutputFileURL
之后直接调用。现在,如果我从中删除 AVCaptureVideoDataOutput
AVCaptureSession
通过简单地注释掉以下行:
[captureSession addOutput:captureDataOutput];
视频录制有效,但随后未调用 SampleBufferDelegate(我需要)。
我怎样才能让 AVCaptureVideoDataOutput
和 AVCaptureMovieFileOutput
同时工作。
- (void)initCapture {
AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput deviceInputWithDevice:[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo] error:NULL];
captureDataOutput = [[AVCaptureVideoDataOutput alloc] init];
[captureDataOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
m_captureFileOutput = [[AVCaptureMovieFileOutput alloc] init];
NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey;
NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA];
NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key];
[captureDataOutput setVideoSettings:videoSettings];
captureSession = [[AVCaptureSession alloc] init];
[captureSession addInput:captureInput];
[captureSession addOutput:m_captureFileOutput];
[captureSession addOutput:captureDataOutput];
[captureSession beginConfiguration];
[captureSession setSessionPreset:AVCaptureSessionPresetLow];
[captureSession commitConfiguration];
[self performSelector:@selector(startRecording) withObject:nil afterDelay:10.0];
[self performSelector:@selector(stopRecording) withObject:nil afterDelay:15.0];
[captureSession startRunning];
}
- (void) startRecording
{
[m_captureFileOutput startRecordingToOutputFileURL:[self tempFileURL] recordingDelegate:self];
}
- (void) stopRecording
{
if([m_captureFileOutput isRecording])
[m_captureFileOutput stopRecording];
}
- (NSURL *) tempFileURL
{
NSString *outputPath = [[NSString alloc] initWithFormat:@"%@%@", NSTemporaryDirectory(), @"camera.mov"];
NSURL *outputURL = [[NSURL alloc] initFileURLWithPath:outputPath];
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:outputPath]) {
[[NSFileManager defaultManager] removeItemAtPath:outputPath error:nil];
[outputPath release];
return [outputURL autorelease];
}
- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didStartRecordingToOutputFileAtURL:(NSURL *)fileURL fromConnections:(NSArray *)connections
{
NSLog(@"start record video");
}
- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error
{
NSLog(@"end record");
}
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
// do stuff with sampleBuffer
}
我应该补充一下我收到的错误:
Error Domain=NSOSStatusErrorDomain Code=-12780 "The operation couldn’t be completed. (OSStatus error -12780.)" UserInfo=0x23fcd0 {AVErrorRecordingSuccessfullyFinishedKey=false}
来自
- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error
干杯
最佳答案
我联系了 Apple 支持的工程师,他告诉我不支持同时使用 AVCaptureVideoDataOutput
+ AVCaptureMovieFileOutput
。不知道以后会不会支持,但是他用了“暂时不支持”这个词。
我鼓励您像我一样 (bugreport.apple.com) 就此填写错误报告/功能请求,因为它们衡量人们想要某样东西的难易程度,我们也许可以在不久的将来看到这一点。
关于iphone - 同时 AVCaptureVideoDataOutput 和 AVCaptureMovieFileOutput,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3968879/
我正在使用 AVCaptureMovieFileOutput 录制视频。然而,我只想保留最后 2 分钟的视频,而不是在整个录制时间内保留捕获的视频。本质上,我想创建一个视频的尾随缓冲区。 我尝试通过将
我使用以下代码来捕获视频并将其保存到我的应用程序的文档文件夹中: AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput
我正在尝试在我的应用程序中实现自定义视频录制和图像捕获。我已经设置了 AVCaptureSession 和所有必要的输入/输出来捕获音频、视频和静态图像。但是,我录制完视频后,输出文件不存在。由于输出
我目前能够将视频录制到 AVCaptureMovieFileOutput 实例,但我找不到任何可以学习的资源,这些资源显示了如何像 snapchat/facebook/instagram 那样播放视频
我想在一系列流畅、可变长度的剪辑中录制视频/音频。也就是说,vid1.mp4 后跟 vid2.mp4 应该无缝连接在一起,或者几乎是无缝连接。 我目前的问题是我似乎无法在不出错的情况下立即切换文件。
我正在开发一个 osx 捕获应用程序,我可以使用 AVFoundation 提供的文件格式 UTIs 来分配文件输出格式,如 .mov、.mp4、 .m4v 等 我可以创建自定义文件格式 UTIs 来
正如标题所述,我希望在用户使用 AVFoundation 录制视频时显示当前的录制长度。我对 AVAudioRecorder 做了类似的事情,我创建了一个计时器来设置标签的文本,如下所示: recor
我能够组装一个最小的屏幕录制 Swift 演示,用于调试另一件事,但有些东西告诉我 - AVFoundation 从未调用我的委托(delegate)进行录制。事实上,他们都不是。 代码非常简单: c
当我的应用程序启动时,我试图使用 AVCaptureMovieFileOutput 将设备相机录制到视频文件中。令我非常沮丧的是,我无法让它工作: 我可以使用 AVCaptureVideoPrevie
当应用程序在视频录制和拍照之间切换时,我想防止延迟:通过仅使用 AVCaptureMovieFileOutput 并在捕获图像时从中获取快照。 就像 SnapChat 一样。 这有可能吗?我还没有找到
我试图阻止 AVCaptureSession 在没有足够的磁盘空间时添加 AVCaptureMovieFileOutput。我在 viewDidload 中使用以下代码进行测试: let sessio
我对 captureStillImageAsynchronouslyFromConnection 有一个奇怪的问题。如果我在镜像视频时使用 jpegStillImageNSDataRepresenta
我尝试了几种不同的方法,但它们对我没有帮助。我想更改 AVFoundation 中的视频方向。我怎样才能做到? override func viewDidLoad() { super.
我尝试使用以下代码从 iphone 相机保存视频文件: class Camera { ... private func loadDeviceInput() { let devices = AV
我正在尝试使用 AVFoundation 在我的 iPhone 应用程序中录制视频。但是每当我单击“录制”按钮时,应用程序就会崩溃并显示此消息 -[AVCaptureMovieFileOutput s
我需要将屏幕视频从 Mac 实时发送到多播组,例如“239.1.1.110:46110”。 我知道 AVCaptureMovieFileOutput 有一个方法“startRecordingToOut
我已经创建了一个电影文件,并且能够将其本地保存到设备上。不过,我想利用 icloud 文档并将其保存到 icloud 并公开共享。如何使用 swift 做到这一点? 我找到了这个用于保存一般文件的链接
目前我正在尝试使用 AVCaptureMovieFileOutput 录制视频并将其保存到照片库。然而,一旦照片库的 URL 传递到 startRecording 函数,它就会声称“在此服务器上找不到
我正在创建一个使用 AVFoundation 的相机应用程序。 当我用我的 AVCaptureStillImageOutput 对象拍照时,它会发出与默认相机相同的“快门”噪音,而无需我告诉 AVCa
用例:我想捕捉来自相机的输入,在捕捉的帧(和声音)之上绘制并将结果保存为 .mov 文件。 我看到我可以使用 AVCaptureSession 捕获相机的输入。 我可以使用 AVCaptureMovi
我是一名优秀的程序员,十分优秀!