Tag: avfoundation

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

AVPlayerLayeranimation帧更改

每当我改变我的AVPlayerLayer帧,video不会立即resize,但animation到新的大小。 例如:我将帧从(0,0,100,100)更改为(0,0,400,400),视图的帧将立即更改,但video的大小将dynamic调整为新的大小。 有没有人遇到过这个问题? 如果是的话,有人知道一种方法来禁用默认animation? 谢谢!

QTMovieLayer具有非零“内容”的iOS替代品?

背景 QTKit(QuickTime Kit)是10.3版本的Mac框架,它在10.5中增加了一些图层,例如QTMovieLayer 。 QTMovieLayer的好处之一是可以使用图层上的常规content属性访问电影内容,并获取CAImageQueue对象。 与此相关的CALayer是,您可以创build一堆常规CALayer ,并将图像队列设置为其内容,并通过设置正确的contentRect将所有图层设置为电影的一部分。 这意味着您可以创build类似下面的图像,只有一个电影正在运行,同时获得同步和内存效率。 我可以发布这个代码,但我怀疑这是相关的我的问题,因为问题是关于iOS和QTKit不存在那里。 我的问题 我想在iOS上做同样的事情,但QTKit不存在。 也就是说,我正在寻找iOS 中存在的QTMovieLayer的替代scheme, 其中content属性不是零 (这是重要的部分),以便我可以在多个图层之间共享内容。 另外,当我设法让video在多个层次上播放时,我希望能够指定video的哪一部分应该在哪一层中播放(如上图所示) 我试过了 在iOS上,您可以使用AVFoundation或MediaPlayer框架来播放电影。 在AVFoundation你有AVPlayerLayer可以显示电影。 (您也有AVCaptureVideoPreviewLayer用于显示相机input的预览, AVSynchronizedLayer用于同步但不显示video)。 注意: 在所有这些例子中,我成功地让video在声音和所有东西的层中播放。 那不是我的问题。 问题是我无法获取内容与其他图层共享。 我已阅读技术说明TN2300 – 将QTKit代码转换为AV Foundation,但无法find有关在图层之间共享video内容的任何内容。 AVPlayerLayer 如果我创build一个这样的播放器图层,并尝试获取contents我只能回nil NSURL *videoURL = [[NSBundle mainBundle] URLForResource:@"video" withExtension:@"m4v"]; AVPlayer *player = [AVPlayer playerWithURL:videoURL]; [player play]; AVPlayerLayer *videoLayer = [AVPlayerLayer playerLayerWithPlayer:player]; id videoContent = videoLayer.contents // […]

在iOS的video中添加GIF水印

我需要完成这个function:在video上有一个GIF叠加层,希望将这个video和GIF组合成一个新的video。 我正在使用下面的代码,但结果只是没有GIF的video: – (void)mixVideoAsset:(AVAsset *)videoAsset { LLog(@"Begining"); NSDate * begin = [NSDate date]; // 2 – Create AVMutableComposition object. This object will hold your AVMutableCompositionTrack instances. AVMutableComposition *mixComposition = [[AVMutableComposition alloc] init]; // 3 – Video track AVMutableCompositionTrack *videoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; [videoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, videoAsset.duration) ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:kCMTimeZero error:nil]; // – Audio AVMutableCompositionTrack […]

如何使用AVAssetWriter将video裁剪成方形的iOS

我正在使用AVAssetWriter来录制video,我希望能够将video裁剪成一个偏离顶部的正方形。 这是我的代码 – NSDictionary *videoCleanApertureSettings = [NSDictionary dictionaryWithObjectsAndKeys: @320, AVVideoCleanApertureWidthKey, @320, AVVideoCleanApertureHeightKey, @10, AVVideoCleanApertureHorizontalOffsetKey, @10, AVVideoCleanApertureVerticalOffsetKey, nil]; NSDictionary *videoAspectRatioSettings = [NSDictionary dictionaryWithObjectsAndKeys: @3, AVVideoPixelAspectRatioHorizontalSpacingKey, @3,AVVideoPixelAspectRatioVerticalSpacingKey, nil]; NSDictionary *codecSettings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInteger:bitsPerSecond], AVVideoAverageBitRateKey, @1,AVVideoMaxKeyFrameIntervalKey, videoCleanApertureSettings, AVVideoCleanApertureKey, //AVVideoScalingModeFit,AVVideoScalingModeKey, videoAspectRatioSettings, AVVideoPixelAspectRatioKey, nil]; NSDictionary *videoCompressionSettings = [NSDictionary dictionaryWithObjectsAndKeys: AVVideoCodecH264, AVVideoCodecKey, codecSettings,AVVideoCompressionPropertiesKey, @320, AVVideoWidthKey, @320, AVVideoHeightKey, nil]; 每当我取消AVVideoScalingModeKey的注释,我的assetWriter给我一个关于不能应用videoCompressionSettings的错误。 […]

如何捕捉图像,而不显示在iOS预览

我想要在特定的情况下捕捉图像,例如按下button时; 但我不想显示任何video预览屏幕。 我猜captureStillImageAsynchronouslyFromConnection是我需要用于这种情况。 目前,如果我展示video预览,我可以捕捉图像。 但是,如果我删除代码以显示预览,则应用程序会崩溃,并显示以下输出: 由于未捕获的exception'NSInvalidArgumentException',原因:'*** – [AVCaptureStillImageOutput captureStillImageAsynchronouslyFromConnection:completionHandler:] – 非活动/无效的连接通过终止应用程序。 “ ***第一掷调用堆栈:(0x336ee8bf 0x301e21e5 0x3697c35d 0x34187 0x33648435 0x310949eb 0x310949a7 0x31094985 0x310946f5 0x3109502d 0x3109350f 0x31092f01 0x310794ed 0x31078d2d 0x37db7df3 0x336c2553 0x336c24f5 0x336c1343 0x336444dd 0x336443a5 0x37db6fcd 0x310a7743 0x33887 0x3382c)终止叫做抛出exception(LLDB) 所以这里是我的实现: BIDViewController.h: #import <UIKit/UIKit.h> #import <AVFoundation/AVFoundation.h> @interface BIDViewController : UIViewController { AVCaptureStillImageOutput *stillImageOutput; } @property (strong, nonatomic) IBOutlet UIView […]

IOS / iPhone的照片突发模式API

我试图在iPhone 5s上以最高分辨率(AVCaptureSessionPresetPhoto)捕捉多张照片。 我尝试使用下面的代码: dispatch_semaphore_t sync = dispatch_semaphore_create(0); while( [self isBurstModeEnabled] == YES ) { [stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error) { if (imageSampleBuffer != NULL) { NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer]; NSString *videoThumbPath = [NSString stringWithFormat:@"%@/img%d.png", burstFolderPath, index]; [imageData writeToFile:videoThumbPath atomically:YES]; if( 0 == index ) { [self NSLogPrint:[NSString stringWithFormat:@"Created photo at %@",videoThumbPath]]; } […]

iOS从.mov文件中提取audio

我一直试图从一个.mov文件中提取audio一段时间,我似乎无法得到它的工作。 具体来说,我需要提取audio并将其保存为.aif或.aiff文件。 我已经尝试使用AVMutableComposition,并将AVS文件加载为AVAsset。 在最终使用AVAssetExportSession(将输出文件types设置为AVFileTypeAIFF,这是我需要的格式)之前,仅将audio轨道添加到AVMutableComposition,以便将文件写入aif。 我得到一个错误,说这个输出文件types是无效的,我不确定为什么: *由于未捕获exception“NSInvalidArgumentException”而终止应用程序,原因:“输出文件types无效” AVAssetExportSession *exporter; exporter = [[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetHighestQuality] ; exporter.audioMix = audioMix; exporter.outputURL=[NSURL fileURLWithPath:filePath]; exporter.outputFileType=AVFileTypeAIFF; //Error occurs on this line 我不确定上述方法是否可行,但我可能会打开我只是做错事的可能性。 但是,如果有人知道另一种方法来实现我想要实现的目标,那么任何帮助都将不胜感激。 如果需要的话,我可以发布更详细的代码,但是现在我正在尝试一些其他的方法,所以现在有点杂乱。 谢谢您的帮助!

如何通过硬件解码在iOS上解码H.264帧?

我已经使用ffmpeg来解码从我的networking摄像头收到的每一帧。 简短代码如下所示: -(void) decodeFrame:(unsigned char *)frameData frameSize:(int)frameSize{ AVFrame frame; AVPicture picture; AVPacket pkt; AVCodecContext *context; pkt.data = frameData; pat.size = frameSize; avcodec_get_frame_defaults(&frame); avpicture_alloc(&picture, PIX_FMT_RGB24, targetWidth, targetHeight); avcodec_decode_video2(&context, &frame, &got_picture, &pkt); } 代码很好,但它是软件解码。 我想通过硬件解码来提高解码性能。 经过大量的研究,我知道可以通过AVFoundation框架来实现。 AVAssetReader类可能会有所帮助,但是我不知道下一步是什么。有没有人可以为我指出以下步骤? 任何帮助,将不胜感激。