您好,我正在捕捉屏幕并制作成视频。它在模拟器中运行良好。当我在设备中运行它时。应用程序崩溃。下面我把我的代码和错误
- (void)stopRecording
{
[self.displayLink invalidate];
startTimestamp = 0.0;
dispatch_async(queue, ^
{
//if (deferImageprocess) {
if (self.writer.status != AVAssetWriterStatusCompleted && self.writer.status != AVAssetWriterStatusUnknown) {
[self.writerInput markAsFinished];
}
if ([self.writer respondsToSelector:@selector(finishWritingWithCompletionHandler:)]) {
[self.writer finishWritingWithCompletionHandler:^
{
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library writeVideoAtPathToSavedPhotosAlbum:[NSURL fileURLWithPath:self.pathStr]
completionBlock:^(NSURL *assetURL, NSError *error){
if (!error)
{
NSLog(@"Saved Successfully");
[self finishBackgroundTask];
[self.delegate recordingFinished:[NSString stringWithFormat:@"%@", self.pathStr]];
}
}];
}];
}
else {
[self.writer finishWriting];
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
[library writeVideoAtPathToSavedPhotosAlbum:[NSURL fileURLWithPath:self.pathStr]
completionBlock:^(NSURL *assetURL, NSError *error){
}];
[self finishBackgroundTask];
[self restartRecordingIfNeeded];
}
});
}
**This above to Wirte the video file in Document as well as gallery**
- (void)captureFrame:(CADisplayLink *)displayLink
{
dispatch_async(queue, ^
{
if (self.writerInput.readyForMoreMediaData) {
CVReturn status = kCVReturnSuccess;
CVPixelBufferRef buffer = NULL;
CFTypeRef backingData;
#if APPSTORE_SAFE || TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE
__block UIImage *screenshot = nil;
dispatch_sync(dispatch_get_main_queue(), ^{
screenshot = [self screenshot];
});
CGImageRef image = [[self screenshot] CGImage];
CGDataProviderRef dataProvider = CGImageGetDataProvider(image);
CFDataRef data = CGDataProviderCopyData(dataProvider);
backingData = CFDataCreateMutableCopy(kCFAllocatorDefault, CFDataGetLength(data), data);
CFRelease(data);
const UInt8 *bytePtr = CFDataGetBytePtr(backingData);
status = CVPixelBufferCreateWithBytes(kCFAllocatorDefault,
CGImageGetWidth(image),
CGImageGetHeight(image),
kCVPixelFormatType_32BGRA,
(void *)bytePtr,
CGImageGetBytesPerRow(image),
NULL,
NULL,
NULL,
&buffer);
NSLog(@"%d", status);
NSParameterAssert(status == kCVReturnSuccess && buffer);
#else
CFTypeRef surface = [UIWindow createScreenIOSurface];
backingData = surface;
NSDictionary *pixelBufferAttributes = @{(NSString *)kCVPixelBufferPixelFormatTypeKey : @(kCVPixelFormatType_32BGRA)};
status = CVPixelBufferCreateWithIOSurface(NULL, surface, (__bridge CFDictionaryRef)(pixelBufferAttributes), &buffer);
NSLog(@"%d", status);
NSParameterAssert(status == kCVReturnSuccess && buffer);
#endif
if (buffer) {
CFAbsoluteTime currentTime = CFAbsoluteTimeGetCurrent();
CFTimeInterval elapsedTime = currentTime - firstFrameTime;
CMTime presentTime = CMTimeMake(elapsedTime * TIME_SCALE, TIME_SCALE);
if(![self.writerInputPixelBufferAdaptor appendPixelBuffer:buffer withPresentationTime:presentTime]) {
[self stopRecording];
NSLog(@"Failed");
}
CVPixelBufferRelease(buffer);
}
CFRelease(backingData);
}
});
if (startTimestamp == 0.0) {
startTimestamp = displayLink.timestamp;
}
NSTimeInterval dalta = displayLink.timestamp - startTimestamp;
if (self.autosaveDuration > 0 && dalta > self.autosaveDuration) {
startTimestamp = 0.0;
[self rotateFile];
}
}
在上面捕捉帧。
现在我在停止录制时遇到了这个错误。
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '*** -[AVAssetWriterInput markAsFinished] Cannot call method when status is 2'.
我不知道这里有什么问题。请告诉我任何建议
最佳答案
这个错误是因为
当状态为 2 时将 writer 标记为已完成。
尝试重用您的 AVAssetWriter 实例。请记得在需要开始录制时始终创建一个新实例。
线程问题,请创建您的队列,因为 sdk 提供的默认队列是并发的,它们以并发方式而不是串行方式工作。
关于ios - 在文档中写入视频时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19809416/
我正在用Ruby编写一个简单的程序来检查域列表是否被占用。基本上它循环遍历列表,并使用以下函数进行检查。require'rubygems'require'whois'defcheck_domain(domain)c=Whois::Client.newc.query("google.com").available?end程序不断出错(即使我在google.com中进行硬编码),并打印以下消息。鉴于该程序非常简单,我已经没有什么想法了-有什么建议吗?/Library/Ruby/Gems/1.8/gems/whois-2.0.2/lib/whois/server/adapters/base.
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
好的,所以我的目标是轻松地将一些数据保存到磁盘以备后用。您如何简单地写入然后读取一个对象?所以如果我有一个简单的类classCattr_accessor:a,:bdefinitialize(a,b)@a,@b=a,bendend所以如果我从中非常快地制作一个objobj=C.new("foo","bar")#justgaveitsomerandomvalues然后我可以把它变成一个kindaidstring=obj.to_s#whichreturns""我终于可以将此字符串打印到文件或其他内容中。我的问题是,我该如何再次将这个id变回一个对象?我知道我可以自己挑选信息并制作一个接受该信
我正在尝试编写一个将文件上传到AWS并公开该文件的Ruby脚本。我做了以下事情:s3=Aws::S3::Resource.new(credentials:Aws::Credentials.new(KEY,SECRET),region:'us-west-2')obj=s3.bucket('stg-db').object('key')obj.upload_file(filename)这似乎工作正常,除了该文件不是公开可用的,而且我无法获得它的公共(public)URL。但是当我登录到S3时,我可以正常查看我的文件。为了使其公开可用,我将最后一行更改为obj.upload_file(file
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
matlab打开matlab,用最简单的imread方法读取一个图像clcclearimg_h=imread('hua.jpg');返回一个数组(矩阵),往往是a*b*cunit8类型解释一下这个三维数组的意思,行数、数和层数,unit8:指数据类型,无符号八位整形,可理解为0~2^8的数三个层数分别代表RGB三个通道图像rgb最常用的是24-位实现方法,即RGB每个通道有256色阶(2^8)。基于这样的24-位RGB模型的色彩空间可以表现256×256×256≈1670万色当imshow传入了一个二维数组,它将以灰度方式绘制;可以把图像拆分为rgb三层,可以以灰度的方式观察它figure(1
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
我正在使用Postgres.app在OSX(10.8.3)上。我已经修改了我的PATH,以便应用程序的bin文件夹位于所有其他文件夹之前。Rammy:~phrogz$whichpg_config/Applications/Postgres.app/Contents/MacOS/bin/pg_config我已经安装了rvm并且可以毫无错误地安装pggem,但是当我需要它时我得到一个错误:Rammy:~phrogz$gem-v1.8.25Rammy:~phrogz$geminstallpgFetching:pg-0.15.1.gem(100%)Buildingnativeextension
动漫制作技巧是很多新人想了解的问题,今天小编就来解答与大家分享一下动漫制作流程,为了帮助有兴趣的同学理解,大多数人会选择动漫培训机构,那么今天小编就带大家来看看动漫制作要掌握哪些技巧?一、动漫作品首先完成草图设计和原型制作。设计草图要有目的、有对象、有步骤、要形象、要简单、符合实际。设计图要一致性,以保证制作的顺利进行。二、原型制作是根据设计图纸和制作材料,可以是手绘也可以是3d软件创建。在此步骤中,要注意的问题是色彩和平面布局。三、动漫制作制作完成后,加工成型。完成不同的表现形式后,就要对设计稿进行加工处理,使加工的难易度降低,并得到一些基本准确的概念,以便于后续的大样、准确的尺寸制定。四、