gpt4 book ai didi

objective-c - 通过 AVAssetReader 读取样本

转载 作者:太空狗 更新时间:2023-10-30 03:25:11 28 4
gpt4 key购买 nike

如何通过 AVAssetReader 读取样本?我找到了使用 AVAssetReader 进行复制或混合的示例,但这些循环始终由 AVAssetWriter 循环控制。是否可以只创建一个 AVAssetReader 并通读它,获取每个样本?

谢谢。

最佳答案

从您的问题中不清楚您是在谈论视频样本还是音频样本。要阅读视频示例,您需要执行以下操作:

  1. 构造一个 AVAssetReader:

    asset_reader = [[AVAssetReader alloc] initWithAsset:asset error:&error];
    (此处进行错误检查)

  2. 从您的 Assets 中获取视频轨道:

    NSArray* video_tracks = [asset tracksWithMediaType:AVMediaTypeVideo];
    AVAssetTrack* video_track = [video_tracks objectAtIndex:0];

  3. 设置所需的视频帧格式:

    NSMutableDictionary* dictionary = [[NSMutableDictionary alloc] init];[dictionary setObject:[NSNumber numberWithInt:<format code from CVPixelBuffer.h>] forKey:(NSString*)kCVPixelBufferPixelFormatTypeKey];

    请注意,某些视频格式是行不通的,如果您实时执行某些操作,某些视频格式的性能会优于其他格式(例如,BGRA 比 ARGB 快)。

  4. 构造实际轨道输出并将其添加到 Assets 读取器:

    AVAssetReaderTrackOutput* asset_reader_output = [[AVAssetReaderTrackOutput alloc] initWithTrack:video_track outputSettings:dictionary];[asset_reader addOutput:asset_reader_output];
  5. 启动 Assets 阅读器:

    [asset_reader startReading];

  6. 读出样本:

    CMSampleBufferRef buffer;while ( [asset_reader status]==AVAssetReaderStatusReading )      buffer = [asset_reader_output copyNextSampleBuffer];

关于objective-c - 通过 AVAssetReader 读取样本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4049207/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com