Tag: avassetwriter

AVAssetWriter多个会话和状态属性

我正在尝试与AVAssetWriter创build多个串行写入会话。 一旦我成功完成一个(在完成写入之后)状态设置为2(AVAssetWriterStatusCompleted)。 试图创build另一个会话,我打电话startWriting,但我得到的错误: [AVAssetWriter startWriting] cannot call method when status is 2 似乎我不能创build一个写作会议,除非我configuration的东西。 我是否必须重新创buildAVAssetWriter? 我一定错过了一些东西,文档没有帮助。 谢谢。

AVAssetWriter如何写下采样/压缩m4a / mp3文件

我试图采取本地m4a或MP3文件和压缩/下采样此文件(为了制作一个较小的文件的目的)。 最初,我使用AVAssetExportSession将AVAsset导出到临时目录,但我没有任何控制压缩/下采样的方法(只能使用预设,其中只有.wav文件格式支持质量下降) 。 然后,在这里几个例子,我尝试使用AVAssetReader / AVAssetWriter预制这个'出口'。 我创build我的读者/作家是这样的: NSString *exportPath = [NSHomeDirectory() stringByAppendingPathComponent:@"out.m4a"]; NSURL *exportURL = [NSURL fileURLWithPath:outPath]; // reader NSError *readerError = nil; AVAssetReader *reader = [[AVAssetReader alloc] initWithAsset:asset error:&readerError]; AVAssetTrack *track = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]; AVAssetReaderTrackOutput *readerOutput = [[AVAssetReaderTrackOutput alloc] initWithTrack:track outputSettings:nil]; [reader addOutput:readerOutput]; // writer NSError *writerError = nil; AVAssetWriter *writer = [[AVAssetWriter […]

如何将AVAssetReader和AVAssetWriter同时用于多个音轨(audio和video)?

我知道如何使用AVAssetReader和AVAssetWriter,并成功地使用它们从一部电影中抓取video轨道并将其转码为另一部电影。 不过,我也想用audio来做这个。 在完成初始转码后,是否必须创buildAVAssetExportSession,还是在写作过程中有一些方法可以在音轨之间切换? 我讨厌不得不处理AVAssetExportSession的开销。 我问,因为使用拉风格的方法 – (while([assetWriterInput isReadyForMoreMediaData]){…} – 假设只有一个轨道,它怎么能用于多个轨道,即audio和video轨道?

模拟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 […]

使用AVAssetWriter录制和播放audio

我已经减less了这个问题,希望得到一些帮助。 基本上这个类有两种方法,一种是开始录制audio( -recordMode ),另一种是播放audio( playMode )。 我目前在一个项目中有一个单一的视图控制器与两个button,调用相应的方法(录音,播放)的类。 没有其他variables,这个类是独立的。 然而,它不会播放任何东西,我不明白为什么。 当我尝试播放文件时,我得到的文件大小为0,并且出现错误,因为您无法使用nil引用初始化AVAudioPlayer 。 但我不明白为什么这个文件是空的或为什么self.outputPath是nil 。 .h文件 #import <AVFoundation/AVFoundation.h> @interface MicCommunicator : NSObject<AVCaptureAudioDataOutputSampleBufferDelegate> @property(nonatomic,retain) NSURL *outputPath; @property(nonatomic,retain) AVCaptureSession * captureSession; @property(nonatomic,retain) AVCaptureAudioDataOutput * output; -(void)beginStreaming; -(void)playMode; -(void)recordMode; @end .m文件: @implementation MicCommunicator { AVAssetWriter *assetWriter; AVAssetWriterInput *assetWriterInput; } @synthesize captureSession = _captureSession; @synthesize output = _output; @synthesize outputPath = […]

使用GPUImage过滤video

我在我的应用程序中使用GPUImage并试图过滤video。 实时video过滤运行良好。 当我尝试从文件系统中读取video到内存中,并使用在Sunsetlakessoftware教程页面和SimpleVideoFileFilter演示中发布的代码应用filter时,会遇到麻烦。 编辑 :我意识到,我原来的职位可能不会提出一个具体的问题。 我所要求的是:如何从磁盘读取video到内存中,应用GPUImageFilter,然后用过滤的版本覆盖原始文件? 应用程序崩溃,出现以下错误: -[AVAssetWriter startWriting] Cannot call method when status is 2 状态2是AVAssetWriterStatusCompleted 。 我见过与其他三个AVAssetWriterStatus一样的故障。 我已经发布了下面的相关代码。 GPUImageFilter *selectedFilter = [self.allFilters objectAtIndex:indexPath.item]; // get the file url I stored when the video was initially captured NSURL *url = [self.videoURLsByIndexPath objectForKey:self.indexPathForDisplayedImage]; GPUImageMovie *movieFile = [[GPUImageMovie alloc] initWithURL:url]; movieFile.runBenchmark = YES; movieFile.playAtActualSpeed = NO; […]

从相机胶卷的图像创buildvideo – iOS sdk

我已经使用以下代码从图像创buildvideo。 此代码工作正常时,我从相机胶卷从网上下载或从屏幕截图中select的图像,但从相机显示放大在电影中select的图像。 我不知道相机的图像有什么问题。 任何人都可以请帮我解决这个问题。 -(IBAction)createV:(id)sender { NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]; NSString *videoOutputPath = [documentsDirectory stringByAppendingPathComponent:@"test_output.mp4"]; CGSize imageSize = [DatabaseAccess getusersetsize]; double nospf =[[[NSUserDefaults standardUserDefaults] valueForKey:@"duration"] intValue]; NSUInteger fps = 10; NSMutableArray *imageArray;// = [DatabaseAccess getimagelist:@"select imgname from tbl_userimage"]; NSArray* imagePaths = [DatabaseAccess getimagelist:@"select imgname,strftime('%d-%m-%Y', tdate) as tdate from tbl_userimage"]; imageArray = [[NSMutableArray alloc] initWithCapacity:imagePaths.count]; […]

AVAssetWriter可以使用透明度编写文件吗?

我用AVAssetWriter编写的每个文件都有一个黑色背景,如果我包含的图像不填充整个渲染区域。 有没有办法用透明度来书写? 这里是我用来获取像素缓冲区的方法: – (CVPixelBufferRef)pixelBufferFromCGImage:(CGImageRef)image { CGSize size = self.renderSize; NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:YES], kCVPixelBufferCGImageCompatibilityKey, [NSNumber numberWithBool:YES], kCVPixelBufferCGBitmapContextCompatibilityKey, nil]; CVPixelBufferRef pxbuffer = NULL; CVPixelBufferPoolCreatePixelBuffer(NULL, self.adaptor.pixelBufferPool, &pxbuffer); CVReturn status = CVPixelBufferCreate(kCFAllocatorDefault, size.width, size.height, kCVPixelFormatType_32ARGB, (__bridge CFDictionaryRef) options, &pxbuffer); if (status != kCVReturnSuccess){ NSLog(@"Failed to create pixel buffer"); } CVPixelBufferLockBaseAddress(pxbuffer, 0); void *pxdata = […]

更改AVCaptureDeviceInput导致AVAssetWriterStatusFailed

我试图改变相机视图Front和Back它工作正常。如果录像没有翻转与Pause/Record选项它工作正常。但如果我们Flip Camera View一次然后,进一步录制video不保存哪些线索到AVAssetWriterStatusFailed – The operation could not be completed 。 任何人都可以帮助我find我出错的地方吗? 以下是我的代码。 Camera.m – (void)flipCamera{ NSArray * inputs = _session.inputs; for ( AVCaptureDeviceInput * INPUT in inputs ) { AVCaptureDevice * Device = INPUT.device ; if ( [ Device hasMediaType : AVMediaTypeVideo ] ) { AVCaptureDevicePosition position = Device . position ; AVCaptureDevice * […]

更改AVMetadataItem

我有一些文件,-m4a -mp4 -mp3等。我想改变这些细节 AVMetadataItem AVMetadataCommonKeyArtwork AVMetadataCommonKeyArtist 我可以用AVAssetExportSession做,但我需要改变目录。 有没有办法可以直接在文件上写? 我发现这个程序,但不工作:( NSError *error; AVAssetWriter *assetWrtr = [[AVAssetWriter alloc] initWithURL:[NSURL fileURLWithPath:self.path] fileType:AVFileTypeAppleM4A error:&error]; NSLog(@"%@",error); NSArray *existingMetadataArray = assetWrtr.metadata; NSMutableArray *newMetadataArray = nil; if (existingMetadataArray) { newMetadataArray = [existingMetadataArray mutableCopy]; // To prevent overriding of existing metadata } else { newMetadataArray = [[NSMutableArray alloc] init]; } AVMutableMetadataItem *item = […]