知识储备 1、AVFoundation AVAssetReader 从原始数据里获取音视频数据 AVAssetReaderTrackOutput 读取每帧的CMSampleBufferRef AVAssetTrack 核心思路 1、异步初始化音视频的AVAssetReader; 2、调用dispatch_group_leave通知异步加载完成; 3、通过dispatch_group_notify开始录制; 4、开始异步合并视频信息 endProcessing]; } return NO; } THImageMovieWriter 下面是核心的逻辑,设置多个音轨的合并信息,并通过AVMutableComposition设置为AVAssetReader atTime:kCMTimeZero error:nil]; } } self.assetAudioReader = [AVAssetReader
AVAssetReader+AVAssetReaderTrackOutput 既然AVPlayer在播放视频时会有性能问题,我们不如做自己的播放器。 AVAssetReader可以从原始数据里获取解码后的音视频数据。结合AVAssetReaderTrackOutput,能读取一帧帧的CMSampleBufferRef。 为此,我们可以写个MMovieDecoder的类,负责视频解码,每读出一个SampleBuffer就往上层回调: AVAssetReader* reader = [[AVAssetReader alloc AVAssetReader也能decode音频的SampleBuffer,不过本人还没想到如何播放CMSampleBufferRef的音频,目前只能静音播放。 4.
AVURLAsset 通过 URL 创建,URL 可以是本地资源,也可以是网络资源 AVComposition 可以将多个基于本地文件的媒体数据以自定义的时间安排组合在一起, 用以呈现或处理多个源的媒体数据 AVAssetReader 你可以使用 addOutput: 将一个或多个 AVAssetReaderOutput 添加到 AVAssetReader 对象中来读取资产的媒体数据 AVAssetTrack 媒体资产轨道对象 相比 AVAssetExportSession AVAssetReader + AVAssetWriter 可以有更细粒度的配置,比如我们可以将 CMSampleBuffer 经过特效处理后写入文件
AVAssetReader[103]:用于从 AVAsset 资源中读取媒体数据。 canAddOutput:[104]:检查 AVAssetReader 是否支持添加对应的 AVAssetReaderOutput。 addOutput:[105]:给 AVAssetReader 添加一个 AVAssetReaderOutput。注意必须在 AVAssetReader 开始读取之前添加。 language=objc [103]AVAssetReader: https://developer.apple.com/documentation/avfoundation/avassetreader language=objc [106]startReading: https://developer.apple.com/documentation/avfoundation/avassetreader
AVAssetReader 解码视频 使用AVAssetReader解码出yuv比较简单,下面直接贴出代码: AVURLAsset *asset = [AVURLAsset URLAssetWithURL :[[NSURL alloc] initFileURLWithPath:path] options:nil]; NSError *error; AVAssetReader* reader = [[AVAssetReader alloc] initWithAsset:asset error:&error]; NSArray* videoTracks = [asset tracksWithMediaType
3)Demuxer AVAssetReader[119]:用于从 AVAsset 资源中读取媒体数据。 canAddOutput:[120]:检查 AVAssetReader 是否支持添加对应的 AVAssetReaderOutput。 addOutput:[121]:给 AVAssetReader 添加一个 AVAssetReaderOutput。注意必须在 AVAssetReader 开始读取之前添加。 language=objc [119] AVAssetReader: https://developer.apple.com/documentation/avfoundation/avassetreader language=objc [121] addOutput:: https://developer.apple.com/documentation/avfoundation/avassetreader
import AVFoundation.AVAssetExportSession import AVFoundation.AVAssetImageGenerator import AVFoundation.AVAssetReader 资产类可通过这个类获得图片、文件、媒体库 AVAssetExportSession资源导出会话:是一个通过资源文件对象去创建一个指定预设的输出的转码内容会话 AVAssetImageGenerator用于截取视频某帧的画面 AVAssetReader
import AVFoundation.AVAssetExportSession import AVFoundation.AVAssetImageGenerator import AVFoundation.AVAssetReader
实现音视频同步器 Android 音视频播放器实现快速预览精准 seek Android 音视频播放器总结 iOS 专题计划: GPUImage 介绍 iOS AVFoundation 介绍 iOS 使用 AVAssetReader
资源加载:是用AVURLAsset加载资源文件,再创建资源读取器AVAssetReader,然后附加音频读取接口mReaderAudioTrackOutput和视频读取接口mReaderVideoTrackOutput
AVAssetReader(asset: asset) // 添加输出对象 assetReader.add(assetReaderOutput) // 开始解析 if assetReader.startReading
; } @property (nonatomic, strong, readwrite) KFDemuxerConfig* config; @property (nonatomic, strong) AVAssetReader // 使用 AVAssetReader 作为解封装器。解封装的目标是 config 中的 AVAsset 资源。 _demuxReader = [[AVAssetReader alloc] initWithAsset:self.config.asset error:error]; if (!
与方案2相比,有几个不同点: 1、CADisplayLink驱动渲染,并且每次只读取当前最新帧; 2、引入LYAssetReader,LYAssetReader是对AVAssetReader和AVAssetReaderTrackOutput
AVAssetTrack *assetAudioTrack = [audioAsset tracksWithMediaType:AVMediaTypeAudio].firstObject; //创建读取器 AVAssetReader *assetReader = [[AVAssetReader alloc] initWithAsset:audioAsset error:&error]; //读取音频track中的数据 NSDictionary
再看我之前工作的美拍,它最早是用的AVFoundation + GPUImage,因为那会时间比较早,所以都是直接用AVAssetReader + AVAssetWriter,后面转成了FFmpeg +