必须在配置好 AVAssetWriter 添加完 AVAssetWriterInput 做好准备后再调用这个方法。 AVAssetWriterInput[97]:用于向 AVAssetWriter 实例的输出文件的一个轨道添加媒体采样数据。 readyForMoreMediaData[99]:表示 AVAssetWriterInput 是否已经准备好接收媒体数据。 markAsFinished[102]:标记 AVAssetWriterInput 为完成,表示已经完成向它添加媒体数据了。 language=objc [97]AVAssetWriterInput: https://developer.apple.com/documentation/avfoundation/avassetwriterinput
必须在配置好 AVAssetWriter 添加完 AVAssetWriterInput 做好准备后再调用这个方法。 AVAssetWriterInput[113]:用于向 AVAssetWriter 实例的输出文件的一个轨道添加媒体采样数据。 readyForMoreMediaData[115]:表示 AVAssetWriterInput 是否已经准备好接收媒体数据。 markAsFinished[118]:标记 AVAssetWriterInput 为完成,表示已经完成向它添加媒体数据了。 language=objc [113] AVAssetWriterInput: https://developer.apple.com/documentation/avfoundation/avassetwriterinput
3.1.1 AVAssetWriter 与AVAssetWriterInput AVAssetWriter通常由一个或多个AVAssetWriterInput对象构成,将AVAssetWriterInput 同时因为asset writer可以从多个数据源写入容器,因此必须要为写入文件的每个track(即音频轨道、视频轨道)创建一个对应的AVAssetWriterInput对象。 AVAssetWriterInput可以设置视频的主要参数如输出码率,帧率,最大帧间隔,编码方式,输出分辨率以及填充模式等。也可以设置音频的主要参数如采样率,声道,编码方式,输出码率等。 CMSampleBufferRef sampleBuffer = [assetReaderAudioOutput copyNextSampleBuffer]; 每个AVAssetWriterInput期望以 *assetWriterAudioInput = [AVAssetWriterInput assetWriterInputWithMediaType:[assetAudioTrack mediaType
AVCaptureAudioDataOutput *audioOutput; 麦克风输出 AVAssetWriter *assetWriter; 把多媒体数据写入文件的类 AVAssetWriterInput *assetWriterAudioInput; 音频输入 AVAssetWriterInput *assetWriterVideoInput;
AVCaptureStillImageOutput 音频——AVCaptureAudioDataOutput 视频——AVCaptureVideoDataOutput 生成视频文件——AVAssetWriter、AVAssetWriterInput [_captureSession addOutput:videoOut]; _videoOutput = videoOut; } 生成视频文件——AVAssetWriter、AVAssetWriterInput AVAssetWriterInput:用于处理指定的媒体类型,比如音频和视频。 canApplyOutputSettings:videoCompressionSettings forMediaType:AVMediaTypeVideo]) { _assetVideoInput = [AVAssetWriterInput canApplyOutputSettings:audioCompressionSettings forMediaType:AVMediaTypeAudio]) { _assetAudioInput = [AVAssetWriterInput
,AVAssetWriterInput也是根据AVMediaType分为video和audio,这个是重点!!! 解读代码第六步:(重点,要说的都在代码注释里面) #pragma mark -- #pragma mark -- 初始化AVAssetWriterInput -(void)initAssetWriterInputAndOutput * input = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo outputSettings:videoCompressionSettings self.audioWriterInput = ({ AVAssetWriterInput * input = [[AVAssetWriterInput alloc]initWithMediaType:AVMediaTypeAudio outputSettings:audioSettings
AVFoundation.AVAssetTrackGroup import AVFoundation.AVAssetTrackSegment import AVFoundation.AVAssetWriter import AVFoundation.AVAssetWriterInput AVAssetTrack资源的分轨 AVAssetTrackGroup这里面封装了一组资源的分轨 AVAssetTrackSegment表示资源分轨的一段 AVAssetWriter资源文件写入类 AVAssetWriterInput
@property (nonatomic, strong) AVAssetWriterInput *writerVideoInput; // Muxer 的视频输入。 @property (nonatomic, strong) AVAssetWriterInput *writerAudioInput; // Muxer 的音频输入。 CMSampleBufferGetFormatDescription((CMSampleBufferRef)CMSimpleQueueGetHead(_videoQueue)); _writerVideoInput = [AVAssetWriterInput CMSampleBufferGetFormatDescription((CMSampleBufferRef)CMSimpleQueueGetHead(_audioQueue)); _writerAudioInput = [AVAssetWriterInput
AVFoundation.AVAssetTrackGroup import AVFoundation.AVAssetTrackSegment import AVFoundation.AVAssetWriter import AVFoundation.AVAssetWriterInput
通过 AVFoundation 框架,可以使用 AVAssetWriter 和 AVAssetWriterInput 类来实现编码视频。
总结 旋转图像的的数据是个耗性能的操作,如果是用AVAssetWriter写QuickTime movie文件,更好的做法是设置AVAssetWriterInput的transform属性,而不是修改AVCaptureVideoDataOutput
网上也有人反馈类似问题 http://stackoverflow.com/questions/16686076/performance-issues-with-avassetwriterinput-audio-and-single-core-devices