- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我已经使用 AVAssetWriter 从 uiimages 成功创建了视频。但是一旦作者开始编写视频,仪器中的内存分配就会突然增加。内存分配的峰值从 3-4 MB 变为 120MB,然后冷却下来。我为此使用了以下代码...
-(void)writeImageAsMovie:(NSArray *)array toPath:(NSString*)path size:(CGSize)size
{
NSMutableDictionary *attributes = [[NSMutableDictionary alloc]init];
[attributes setObject:[NSNumber numberWithUnsignedInt:kCVPixelFormatType_32ARGB] forKey:(NSString*)kCVPixelBufferPixelFormatTypeKey];
[attributes setObject:[NSNumber numberWithUnsignedInt:320] forKey:(NSString*)kCVPixelBufferWidthKey];
[attributes setObject:[NSNumber numberWithUnsignedInt:416] forKey:(NSString*)kCVPixelBufferHeightKey];
NSError *error = nil;
AVAssetWriter *videoWriter = [[AVAssetWriter alloc] initWithURL:
[NSURL fileURLWithPath:path] fileType:AVFileTypeQuickTimeMovie
error:&error];
NSParameterAssert(videoWriter);
NSDictionary *videoSettings = [NSDictionary dictionaryWithObjectsAndKeys:
AVVideoCodecH264, AVVideoCodecKey,
[NSNumber numberWithInt:size.width], AVVideoWidthKey,
[NSNumber numberWithInt:size.height], AVVideoHeightKey,
nil];
AVAssetWriterInput* writerInput = [[AVAssetWriterInput
assetWriterInputWithMediaType:AVMediaTypeVideo
outputSettings:videoSettings] retain];
adaptor = [AVAssetWriterInputPixelBufferAdaptor
assetWriterInputPixelBufferAdaptorWithAssetWriterInput:writerInput
sourcePixelBufferAttributes:attributes];
NSParameterAssert(writerInput);
NSParameterAssert([videoWriter canAddInput:writerInput]);
[videoWriter addInput:writerInput];
//Start a session:
[videoWriter startWriting];
[videoWriter startSessionAtSourceTime:kCMTimeZero];
CVPixelBufferRef buffer = NULL;
buffer = [self pixelBufferFromCGImage:[[array objectAtIndex:0] CGImage]];
[adaptor appendPixelBuffer:buffer withPresentationTime:kCMTimeZero];
//Write samples:
for (int i = 0;i<[array count]; i++)
{
if([writerInput isReadyForMoreMediaData])
{
NSLog(@"inside for loop %d",i);
CMTime frameTime = CMTimeMake(1, 20);
CMTime lastTime=CMTimeMake(i, 20); //i is from 0 to 19 of the loop above
CMTime presentTime=CMTimeAdd(lastTime, frameTime);
buffer = [self pixelBufferFromCGImage:[[array objectAtIndex:i] CGImage]];
[adaptor appendPixelBuffer:buffer withPresentationTime:presentTime];
if(buffer)
CVBufferRelease(buffer);
}
else
{
NSLog(@"error");
i--;
}
}
//Finish the session:
[writerInput markAsFinished];
[videoWriter finishWriting];
NSURL *pathURL = [NSURL fileURLWithPath:path];
AVURLAsset *url = [[AVURLAsset alloc] initWithURL:pathURL options:nil];
[clipsArray addObject:url];
[url release];
CVPixelBufferPoolRelease(adaptor.pixelBufferPool);
[videoWriter release];
[writerInput release];
[imageArray removeAllObjects];
}
任何人都可以帮助解决这个问题,因为我在过去 2 天遇到了问题......
提前致谢...
最佳答案
我认为问题是你在一个循环中运行它,没有给 RunLoop 任何改变来对自动释放的实例进行垃圾收集。
关于iphone - iPhone 中 AVAssetWriter 的内存管理问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4069544/
有人知道如何在 AVFoundation 中使用 AVAssetWriter 将未压缩的帧存储到 mov 中吗?对于 ProRes4444 内容,我实际上使用了以下片段: NSDictionary *
我在iOS上使用AVAssetWriter编码MP4视频。我目前正在使用AVAssetWriterInputPixelBufferAdaptor传递数据,但是在这方面我很灵活。 如何指定哪些输入框是关
我使用以下代码附加PixelBuffer,但输出视频是黑屏(CIImage 是正常的)。我认为问题出现在 newPixelBuffer 中。 func recordRealTimeFilterVide
为什么当您加载纵向 JPGS 并尝试使用 AVAssetWriter 时,生成的 mov 文件旋转了 90? 其他人看到了吗? 最佳答案 如果肖像 jpg 是在 iphone 上制作的,则它们的原始像
此代码适用于从图像创建视频。 AVAssetWritter 工作正常,没有错误并导出输出视频 - (.mov)。但在某些图像大小的情况下它会失败。120 x 160 - 失败180 x 640、240
我正在尝试将多个视频文件合并到一个具有特定编解码器设置的文件中。我曾经为此使用 AVAssetExportSession,但现在我需要比 AVAssetExportSession 提供更多的编解码器控
我正在 iOS 上编写一个视频编辑小应用。我关注了 this question 中评价最高的答案想用AVAssetwriter,最后写入还是失败了。当我进入 complete 回调时 [videoWr
创建 assetwriter 后,我的 friend 在他的设备上收到此错误 - 日志:AVAssetWriter:0x1e051900,outputURL = file://localhost/va
我有以下代码在 AVAssetWriter 中写入日期元数据,这在 iOS 13 中完全错误。需要知道这是 iOS 13 错误还是我做错了什么。 private var metadataIt
我正在完成一个将电影保存到相册的 iPhone 应用程序。电影源是一组图像。我用它制作电影并将它们很好地放入相册,但它总是在开始时有一个额外的绿色框架。 有什么想法吗? 我重新阅读了 Apple
我正在尝试使用 OSX AVAsset 类从电影文件中读取视频帧,调整颜色,然后将它们写出到新的电影文件中。我已经完成了所有工作,除了出于某种奇怪的原因,当我正在阅读以每秒 29.97 帧播放的视频时
我有几种方法可以将 mov 文件中的视频写入临时目录,但在大约 15 秒后。我收到错误: 收到内存警告。 收到内存警告。 收到内存警告。 收到内存警告。 然后应用程序崩溃了。我被卡住了,不知道出了什么
你好,我是 ios 开发的新手,我遇到了一些问题 我做了一些 AVAssetWriter 的设置,比如对象(我用它来写像素图作为视频的帧 - 它工作正常) self.assetWriter =
我录制音频和视频文件。用户可以只从视频切换到音频,也可以从音频切换到视频。但是当我从音频切换到视频时,第一帧是黑色的。 切换 func switch_to_audio(){ capture_s
我正在使用 AVAssetWriter 通过委托(delegate)从 ARSession 写入视频帧。 func session(_ session: ARSession, didUpdate fr
我正在开发一个使用 AVAssetWriter 录制视频的应用程序(源媒体是从 captureOutput(_ output: AVCaptureOutput, didOutput sampleBuf
我正在制作一个录制视频的应用程序。到目前为止,我已经能够使用 AVCaptureMovieFileOutput 成功录制视频和音频,但是,我现在需要实时编辑视频帧以将一些数据叠加到视频上。我开始切换到
是否可以在 iPhone 上使用 avassetwriter 合成绿屏图像——绿色背景下的动画 Actor 和背景照片并制作视频。 我有一个应用程序可以在绿色背景下创建动画角色的一系列屏幕截图。我想将
我正在使用 AVAssetWriter 将音频(和/或视频)写入 quicktime 电影格式。如何在不停止 session (即继续记录)的情况下定期(每隔几分钟)保存(或备份)此文件? 这是我在录
如果我包含的图像没有填满整个渲染区域,我用 AVAssetWriter 编写的每个文件都有黑色背景。有什么方法可以写透明吗?这是我用来获取像素缓冲区的方法: - (CVPixelBufferRef)p
我是一名优秀的程序员,十分优秀!