OC之AVAsset

作者: 苏沫离 | 来源:发表于2018-10-16 23:59 被阅读0次

    AVAsset 用于建模同步视听媒体:如视频和声音 的抽象类。

    AVAsset定义了组成资源的轨道的集合属性。使用指向媒体资源 (本地或远程)URL初始化AVAsset,如下面的示例所示:

    AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:@""]];
    

    AVAsset是一个抽象类,因此创建示例中所示的AVAsset实际上是在创建一个名为AVURLAsset的具体子类的实例。在许多情况下,这是创建AVAsset的合适方法,但是当需要对其初始化进行更细粒度的控制时,也可以直接实例化AVURLAssetAVURLAsset的初始化程序接受一个选项字典,使用该字典可以根据特定用例定制资源的初始化。例如,如果正在为HLS流创建AVAsset,则可能希望在用户连接到蜂窝网络时阻止其检索其媒体。
    可以执行此操作,如以下示例所示:

    NSURL *url = [NSURL URLWithString:@""];
    NSDictionary *options = @{AVURLAssetAllowsCellularAccessKey:@NO};
    AVURLAsset *urlAsset = [AVURLAsset URLAssetWithURL:url options:options];
    

    还可以使用其他具体子类来实例化AVAsset,这些子类以有用的方式扩展视听媒体的基本模型,就像AVComposition对时间编辑一样。

    由于同步视听媒体的特性,在成功初始化AVAsset之后,其键的部分或全部值可能无法立即可用。任何键的值都可以在任何时候被请求,并且AVAsset总是同步返回它的值,尽管它可能必须阻止调用线程这样做。为了避免阻塞,可以注册对特定键的监听,并在它们的值可用时得到通知。有关详细信息,请参阅AVAsynchronousKeyValueLoading

    要播放AVAsset的实例,用它初始化AVPlayerItem的实例,使用播放器项设置其演示状态(例如是否应该播放AVAsset的限定timeRange),并将播放器项提供给AVPlayer对象根据项目是单独播放还是与其他项目集合播放。

    可以将AVAsset对象插入到AVMutableComposition对象中,以组合来自一个或多个源资源的视听构造。

    子类注释:目前,AVAsset的子类无法处理框架不支持的流协议或文件格式。

    1、创建AVAsset

    返回用于检查媒体资源的AVAsset

    + (instancetype)assetWithURL:(NSURL *)URL;
    

    2、加载数据中

    取消加载所有观察者的值。

    - (void)cancelLoading;
    

    此方法显式取消AVAsset-loadValuesAsynchronouslyForKeys:completionHandler:方法的任何挂起调用。只有当完全使用AVAsset并且希望终止任何未完成的请求时,才应使用此方法。如果任何加载请求仍处于挂起状态,AVAsset实例的重分配将隐式调用此方法。

    3、检查AVAsset

    只读属性 数据类型 描述
    duration CMTime AVAsset的持续时间;可以为用url初始化的AVAsset在初始化时设置与时间相关的属性所需的精确度(参阅AVURLAsset中的AVURLAssetPreferPreciseDurationAndTimingKey
    providesPrecise DurationAndTiming BOOL 指示AVAsset是否提供精确的时间的布尔值;如果为YES,则返回AVAsset的精确持续时间duration;如果为NO,则返回估计值。
    creationDate AVMetadataItem 指示AVAsset的创建日期;该值可能为 nil。如果AVAsset以可转换为NSDate对象的形式存储创建日期,则元数据项的dateValue属性将提供NSDate的实例。否则,创建日期仅作为字符串值使用AVMetadataItem类的-stringValue方法。
    naturalSize CGSize AVAsset可视部分的编码大小;被废弃。
    preferredRate float AVAsset播放的自然速度;此值通常(但不总是)为1.0。
    preferredTransform CGAffineTransform 应用于AVAsset的可视内容以进行呈现或处理的首选转换。该值通常(但不总是)转换。
    preferredVolume float 播放AVAsset可听媒体的首选音量;此值通常(但不总是)为1.0。
    preferredDisplayCriteria AVDisplayCriteria 显示标准,用于定义AVAsset的最佳电视显示模式。

    AVDisplayCriteria 包含定义媒体AVAsset的显示条件的属性的对象。不可创建此类的实例,而是使用AVAsset中的preferredDisplayCriteria属性检索媒体资产的显示条件,例如其理想帧速率;使用AVKit时,无需检索资产的显示标准。 AVKit使用其首选显示标准自动显示资产。

    4、确定可用性

    当可以执行指定的操作时,可用性属性的值为YES,即使仅在特定条件下为YES。只有在没有条件执行相关操作时,这些属性才返回NO。

    只读BOOL属性 描述
    playable 指示AVAsset或其URL是否可用于初始化AVPlayerItem实例。
    exportable 指示是否可以使用AVAssetExportSession导出AVAsset
    readable 指示是否可以使用AVAssetReader提取AVAsset的媒体数据。
    composable 指示AVAsset是否可以在AVCompositionTrack对象的一个段中使用。
    hasProtectedContent 指示AVAsset是否具有受保护的内容;未经成功授权,包含受保护内容的资产可能无法播放,即使可播放属性的值为YES。
    compatibleWithAirPlayVideo 指示AVAsset是否可以使用AirPlay Video在外部设备:如Apple TV 上播放使用此AVAsset初始化的AVPlayerItem
    compatibleWithSavedPhotosAlbum 指示是否可以将AVAsset写入“已保存的照片”相册。

    5、访问轨道

    只读属性NSArra 描述
    tracks AVAsset所包含的所有轨道AVAssetTrack的集合。
    trackGroups AVAsset中包含所有轨道组的数组;每个AVAssetTrackGroup实例代表AVAsset中不同的轨道分组。如果未定义任何轨道组,则此属性将包含空数组。
    5.1、指定trackID

    如果没有指定trackID,则返回nil;当AVAssetTrack属性中的数据已加载时,可以不阻塞地调用此方法。

    - (AVAssetTrack *)trackWithTrackID:(CMPersistentTrackID)trackID;
    
    5.2、指定媒体类型mediaType

    提供指定媒体的AVAssetAVAssetTrack对象数组。

    - (NSArray<AVAssetTrack *> *)tracksWithMediaType:(AVMediaType)mediaType;
    
    5.3、指定媒体特征mediaCharacteristic

    返回AVAssetAVAssetTrack数组,用于显示具有指定特征的媒体;如果没有具有指定特征的轨道可用,则为空数组。

    - (NSArray<AVAssetTrack *> *)tracksWithMediaCharacteristic:(AVMediaCharacteristic)mediaCharacteristic;
    
    • 参数mediaCharacteristic:接收器过滤其资产跟踪的媒体特征;有关有效值,例如AVMediaCharacteristicAudibleAVMediaCharacteristicVisual,请参阅介质特征。
    5.4、未使用的TrackID

    返回AVAsset中任何AVAssetTrack未使用的TrackID

    - (CMPersistentTrackID)unusedTrackID;
    
    5.5、一组相关轨道

    AVAssetTrackGroup 继承自NSObject,是AVAsset中的一组相关轨道。

    该实例描述了一组相关的备用轨道,一次只能播放其中一个。备用轨道组通常包含相同内容的变体,例如多个翻译中的字幕。
    客户端可以通过加载和获取AVAssettrackGroups属性的值来检查AVAsset实例中包含的轨道组。

    //组中轨道的ID。
    @property(nonatomic, readonly) NSArray<NSNumber *> *trackIDs;
    

    6、访问元数据

    可以使用AVMetadataItem提供的类方法将以下数组过滤到感兴趣的特定项目,例如-metadataItemsFromArray:filteredByIdentifier:-metadataItemsFromArray:withLocale:
    特别注意事项:当已加载availableMetadataFormats属性中的数据时,此方法可以无阻塞地调用。

    只读属性 数据类型 描述
    lyrics NSString AVAsset的词,使用适合当前语言环境的语言。
    metadata NSArray 所有元数据标识符的元数据项数组,其中有一个值可用.可以使用-metadataItemsFromArray:filteredAndSortedAccordingToPreferredLanguages:方法根据语言过滤AVMetadataItem实例数组。
    commonMetadata NSArray 每个公共元数据键的元数据项数组,其中有一个值可用。每个元数据AVMetadataItem键对应一个来自公共键空间的元数据键,该AVAsset对公共键空间具有可用值。
    availableMetadataFormats NSArray 每个字符串表示AVAsset可用的元数据格式AVMetadataFormat。元数据格式可以包括ID3,iTunes元数据等。对于AVMetadataItem支持的可用元数据格式,请参阅AVFoundation元数据键常量中的元数据格式常量。
    6.1、指定AVMetadataFormat

    返回AVMetadataItem对象的数组:对应于指定格式容器中的每个元数据项。

    - (NSArray<AVMetadataItem *> *)metadataForFormat:(AVMetadataFormat)format;
    
    • 参数format:想要项目的元数据格式。
    • 返回值:一个AVMetadataItem对象数组,一个用于指定格式的容器中的每个元数据项,如果没有指定格式的元数据,则为空数组。

    7、使用章节元数据

    //AVAsset中的章节元数据可用的区域
    @property(readonly) NSArray<NSLocale *> *availableChapterLocales;
    
    7.1、返回具有给定标题区域设置并包含指定键的章节数组

    返回具有给定标题区域设置并包含指定键的章节数组:

    - (NSArray<AVTimedMetadataGroup *> *)chapterMetadataGroupsWithTitleLocale:(NSLocale *)locale
    containingItemsWithCommonKeys:(NSArray<AVMetadataKey> *)commonKeys;
    
    • 参数locale:携带要返回的章节标题的元数据项的区域设置。
    • 参数commonKeysAVMetadataItem的公共键数组,包含在返回的数组中。AVMetadataCommonKeyArtwork是唯一受支持的键。

    返回数组中的每个对象都包含一个表示章节标题的AVMetadataItem对象,AVTimedMetadataGroup对象的时间范围属性等于章节标题项的时间范围。

    如果元数据项和元数据组的时间范围(时间戳和持续时间)重叠,则将具有指定公共键的AVMetadataItem添加到现有AVTimedMetadataGroup对象。

    不带章节标题的项目的区域设置不需要与指定的区域设置参数匹配。可以使用-metadataItemsFromArray:withLocale:基于区域设置过滤返回的项目。

    7.2、返回区域设置与首选语言列表最匹配的章节数组。

    返回区域设置与首选语言列表最匹配的章节数组。

    - (NSArray<AVTimedMetadataGroup *> *)chapterMetadataGroupsBestMatchingPreferredLanguages:(NSArray<NSString *> *)preferredLanguages;
    
    • 参数preferredLanguages:每个NSString对象都包含一个规范化的IETF BCP 47语言标识符。数组中标识符的顺序反映了首选语言顺序,最优选的语言是数组中的第一个。通常,通过从NSLocalepreferredLanguages类方法检索此数组来传递用户的首选语言。

    返回数组中的每个对象都包含一个表示章节标题的AVMetadataItem对象。AVTimedMetadataGroup对象的时间范围属性等于章节标题项的时间范围。

    所有可用的章节元数据都包含在元数据组中,包括具有公共键AVMetadataCommonKeyArtwork的项目(如果存在此类项目)。 如果元数据项的时间范围(时间戳和持续时间)与元数据组的时间范围(时间戳和持续时间)重叠,则不携带章节标题的项目将添加到现有的AVTimedMetadataGroup对象。这些项目的区域设置不需要与章节标题的区域设置相匹配。

    可以使用-metadataItemsFromArray:filteredAndSortedAccordingToPreferredLanguages:方法进一步过滤每个组中的元数据项。还可以使用metadataItemsFromArray:withLocale:方法根据区域设置过滤返回的项目。

    特别注意事项:当availableChapterLocales属性中的数据已加载时,变为可调用而不会阻塞。

    7.3、添加章节标记

    添加章节标记,使用户能够快速浏览您的内容。

    章节标记使用户能够快速浏览您的内容。在tvOS和macOS中的AVPlayerViewController中,如果在当前播放的资产中找到标记,则会自动呈现一个chapter-selection接口。还可以在需要创建自己的自定义chapter选择接口时直接检索这些数据。

    7.3.1、检索定时元数据

    章节标记是一种定时元数据,仅适用于AVAsset时间轴内的时间范围。可以使用-chapterMetadataGroupsBestMatchingPreferredLanguages:-chapterMetadataGroupsWithTitleLocale:containingItemsWithCommonKeys:方法来检索AVAsset的章节元数据。在异步加载AVAssetavailableChapterLocales键值之后,这些方法无需阻塞即可调用。

    AVAsset *asset = [AVAsset assetWithURL:[NSURL URLWithString:@""]];
    NSString *chapterLocalesKey = @"availableChapterLocales";
    [asset loadValuesAsynchronouslyForKeys:@[chapterLocalesKey] completionHandler:^{
        
        NSError *error = nil;
        AVKeyValueStatus status = [asset statusOfValueForKey:chapterLocalesKey error:&error];
        
        if (status == AVKeyValueStatusLoaded) {
            NSArray<AVTimedMetadataGroup *> *metadataGroups = [asset chapterMetadataGroupsBestMatchingPreferredLanguages:NSLocale.preferredLanguages];
            //过程元数据
        }else{
            // 处理其他状态
        }
    }];
    
    7.3.2、将定时元数据转换为章节数据

    这些方法返回的值是AVTimedMetadataGroup对象数组,每个对象代表一个单独的章节标记。AVTimedMetadataGroup对象由CMTimeRange组成,它定义了它的元数据应用的时间范围,AVMetadataItem对象数组表示章节的标题,以及它的缩略图。下面的示例展示了如何将AVTimedMetadataGroup数据转换为一个定制模型对象数组,称为Chapter,将在应用程序的视图层中显示。

    - (NSMutableArray<NSDictionary *> *)convertTimedMetadataGroupsToChapters:(NSArray<AVTimedMetadataGroup *> *)metadataGroups
    {
        NSMutableArray *chapter = [NSMutableArray arrayWithCapacity:metadataGroups.count];
        [metadataGroups enumerateObjectsUsingBlock:^(AVTimedMetadataGroup * _Nonnull group, NSUInteger idx, BOOL * _Nonnull stop) {
            //检索AVMetadataCommonIdentifierTitle元数据项
           NSArray<AVMetadataItem *> *titleItems = [AVMetadataItem metadataItemsFromArray:group.items filteredByIdentifier:AVMetadataCommonIdentifierTitle];
            
            //检索AVMetadataCommonIdentifierTitle元数据项
            NSArray<AVMetadataItem *> *artworkItems = [AVMetadataItem metadataItemsFromArray:group.items filteredByIdentifier:AVMetadataCommonIdentifierArtwork];
             NSString *title = titleItems.firstObject.stringValue ? : @"Default Title";
             UIImage *image = artworkItems.firstObject.dataValue ? [UIImage imageWithData:artworkItems.firstObject.dataValue] : [UIImage imageNamed:@"placeholder"];
            
            NSDictionary *dict = @{@"time":[NSValue valueWithCMTime:group.timeRange.start],
                                   @"title":title,@"image":image};
            [chapter addObject:dict];
        }];
        return chapter;
    }
    

    通过转换相关数据,可以构建一个chapter-selection接口,并使用chapter对象的时间值,使用播放器的-seekToTime:方法查找当前的表示。

    8、查找媒体选择

    只读属性 数据类型 描述
    preferredMediaSelection AVMediaSelection AVAsset的媒体选择组的默认媒体选择。
    availableMedia CharacteristicsWith MediaSelectionOptions NSArray 媒体选择选项可用的一系列媒体特征AVMediaCharacteristic
    allMediaSelections NSArray

    返回包含一个或多个具有指定媒体特征的选项的AVMediaSelectionGroup对象。

    - (AVMediaSelectionGroup *)mediaSelectionGroupForMediaCharacteristic:(AVMediaCharacteristic)mediaCharacteristic;
    
    • 参数 mediaCharacteristic:希望获得可用媒体选择选项的媒体特征。目前仅支持AVMediaCharacteristicAudibleAVMediaCharacteristicVisualAVMediaCharacteristicLegible

    • 通过AVMediaCharacteristicAudible获取各种语言和各种用途的音频媒体的可用选项组,例如描述性音频。

    • 传递AVMediaCharacteristicLegible以获取各种语言和各种用途的字幕的可用选项组。

    • 传递AVMediaCharacteristicVisual以获取视频媒体的可用选项组。

    • 返回值:一个AVMediaSelectionGroup对象,包含一个或多个具有mediaCharacteristic指定的媒体特征的选项,如果找不到,则为nil。

    当加载了availableMediaCharacteristicsWithMediaSelectionOptions键时,您可以调用此方法而无需阻塞。

    可以根据可播放性,区域设置过滤返回的媒体选择组中的选项,并且可以使用AVMediaSelectionGroup类中定义的过滤方法来完成其他媒体特征。

    9、管理引用访问限制

    接收方使用的引用限制。

    @property(nonatomic, readonly) AVAssetReferenceRestrictions referenceRestrictions;
    

    对于AVURLAsset,此属性反映了AVURLAssetReferenceRestrictionsKey传入的值(如果有)。

    此属性的默认值为AVAssetReferenceRestrictionForbidNone。 有关参考限制的完整讨论,请参见AVURLAssetReferenceRestrictionsKey

    10、处理片段电影

    只读属性 数据类型 描述
    canContainFragments BOOL 指示AVAsset是否能够通过片段进行扩展;对于QuickTime电影文件和MPEG-4文件,如果'moov'框中存在'mvex'框,则该值为YES。对于那些类型,'mvex'框表示可能存在后来的'moof'框。
    containsFragments BOOL 指示AVAsset是否由至少一个电影片段扩展;对于QuickTime影片文件和MPEG-4文件,如果canContainFragments为YES且“moov”框后面至少有一个“moof”框,则此属性的值为YES。
    overallDurationHint CMTime 该值指示碎片的总持续时间,这些碎片要么现在存在,要么将来可能被追加,以延长AVAsset的持续时间。对于QuickTime影片文件和MPEG-4文件,此属性的值是从mvex框的mehd框中获取的(如果存在)。如果没有可用的总片段持续时间提示,则此属性的值为kCMTimeInvalid

    11、指定媒体特征

    AVMediaCharacteristic 使用typedef修饰的字符串,用于指定媒体类型特征的常量。

    .mov文件和.m4v文件中的每个轨道都可以选择性地携带一个或多个标记的媒体特征,每个特征都声明了轨道媒体的用途,特征或其他一些区别特性。例如,包含原始节目内容和附加的视觉动作叙述描述的音频的音轨可能被标记为媒体特征“public.accessibility.describe -video”,以区别于存储在同一文件中不包含额外叙事的其他音轨。

    .mov和.m4v文件中的每个标记媒体特征 作为'tagc'类型的用户数据项存储在跟踪用户数据中,该用户数据项由标准原子头后跟一个数组 US-ASCII字符,包含标记的值。字符数组不是C字符串。用户数据项原子大小是标准原子标题大小和US-ASCII字符数组大小的总和。

    可以检查标记的媒体特征的轨道如下:

    NSArray *trackUserDataItems = [myAVAssetTrack metadataForFormat:AVMetadataFormatQuickTimeUserData];
    NSArray *trackTaggedMediaCharacteristics = [AVMetadataItem metadataItemsFromArray:trackUserDataItems
    withKey:AVMetadataQuickTimeUserDataKeyTaggedCharacteristic
    keySpace:AVMetadataKeySpaceQuickTimeUserData];
    for (AVMetadataItem *metadataItem in trackTaggedMediaCharacteristics) {
        NSString *thisTrackMediaCharacteristic = [metadataItem stringValue];
    }
    

    可以使用-hasMediaCharacteristic:来确定轨道是否具有特定的媒体特征,是否从其媒体类型或格式描述(例如AVMediaCharacteristicAudibleAVMediaCharacteristicContainsOnlyForcedSubtitles)推断出特征,或者需要显式标记(例如AVMediaCharacteristicTranscribesSpokenDialogForAccessibilityAVMediaCharacteristicEasyToRead)。请注意,显式标记不能用于覆盖轨道媒体类型或格式描述的推断; 例如,以下代码清单对任何音频轨道都返回NO,即使该轨道已经被视觉特征进行了反向标记。

    [anAVAssetTrack hasMediaCharacteristic:AVMediaCharacteristicVisual]
    

    如果AVAsset编写者的输出文件类型为mov或m4v,则可以将标记的媒体特征写入与AVAssetWriterInput对象关联的输出轨道的QuickTime用户数据,如下所示:

    AVMutableMetadataItem *myTaggedMediaCharacteristic = [[AVMutableMetadataItem alloc] init];
    [myTaggedMediaCharacteristic setKey:AVMetadataQuickTimeUserDataKeyTaggedCharacteristic];
    [myTaggedMediaCharacteristic setKeySpace:AVMetadataKeySpaceQuickTimeUserData];
    [myTaggedMediaCharacteristic setValue:aMeaningfulCharacteristicAsNSString];
    [myMutableArrayOfMetadata addObject:myTaggedMediaCharacteristic];
    [myAssetWriterInput setMetadata:myMutableArrayOfMetadata];
    
    11.1、AVMediaCharacteristic常量
    //表示媒体是看得见的
    AVMediaCharacteristicVisual
    
    //表示媒体是听得见的
    AVMediaCharacteristicAudible
    
    //表示媒体是清晰的。
    AVMediaCharacteristicLegible
    
    //表示媒体是基于帧的
    AVMediaCharacteristicFrameBased
    
    /* 表示设置包含由内容作者标记为AVAsset表示的内在内容;
     * 该特征的值是“public.main-program-content”;
     * 例如:显示演示文稿的主程序音频的选项(无论区域设置如何)通常都具有此特征。
     * 任何没有AVMediaCharacteristicIsAuxiliaryContent特征的选项都被认为具有该特征。
     */
    AVMediaCharacteristicIsMainProgramContent
                       
    /* 表示设置包括由内容作者标记为AVAsset表示的辅助内容;
     * 该特征值是“public.auxiliary-content”;
     * 例如:显示包含演示文稿注释的音频媒体的选项通常具有此特征。
     */
    AVMediaCharacteristicIsAuxiliaryContent
    
    /* 表示选项仅显示强制字幕;
     * 该特征值是“public.subtitles.forced-only”。
     * 只有强制字幕的媒体选项通常是在以下情况下选择的:
     *   (1)、用户没有选择具有可访问性特征或辅助用途的易读选项;
     *   (2)、其语言环境与所选的可听媒体选择选项的语言环境匹配。
     * 从呈现字幕媒体的相关轨道的格式描述推断出可读媒体选项的这种特性的存在。
     */
    AVMediaCharacteristicContainsOnlyForcedSubtitles
    
    /* 表示该选项包含其指定语言环境语言的易读内容,用于转录对话框;
     * 该特征值是“public.accessibility.transcribes-speaking-dialog”;
     * 可读媒体选项可以包括口语对话的转录和音乐和声音效果的描述;
     * 对于QuickTime影片和.m4v文件,仅当媒体选项明确标记有该特征时,才认为该媒体选项具有AVMediaCharacteristicTranscribesSpokenDialogForAccessibility的特征。
     */
    AVMediaCharacteristicTranscribesSpokenDialogForAccessibility
    
    /* 表示该选项包含其指定语言环境语言的清晰内容,用于描述节目音频中出现的音乐和声音效果;
     * 该特征值是“public.accessibility.describes-music-and-sound”;
     * 可读媒体选项可以包括口语对话的转录和音乐和声音效果的描述;
     * 对于QuickTime影片和.m4v文件,仅当媒体选项明确标记有该特征时,才认为该媒体选项具有AVMediaCharacteristicDescribesMusicAndSoundForAccessibility特征。
     */
    AVMediaCharacteristicDescribesMusicAndSoundForAccessibility
    
    /* 表示该选项以其指定语言环境的语言提供易读内容,并且已编辑内容以便于阅读;
     * 该特征值是“public.easy-to-read”。
     * 带有“易读”字幕的隐藏式字幕轨道(根据CEA-608规范)应标有此特性。
     * 在适当的情况下,字幕轨道也可以用这个特征标记。
     * 对于QuickTime影片和.m4v文件,仅当媒体选项明确标记有该特征时,才认为该媒体选项具有AVMediaCharacteristicEasyToRead特征。
     */
    AVMediaCharacteristicEasyToRead
    
    /* 表示该选项包含描述演示文稿可视部分的可听内容;
     * 该特征值是“public.accessibility.describes-video”;
     * 可读媒体选项可以包括口语对话的转录和音乐和声音效果的描述。
     * 对于QuickTime影片和.m4v文件,仅当媒体选项明确标记有该特征时,才认为该媒体选项具有AVMediaCharacteristicEasyToRead特征。
     */
    AVMediaCharacteristicDescribesVideoForAccessibility
    
    AVMediaCharacteristicLanguageTranslation
    AVMediaCharacteristicDubbedTranslation
    AVMediaCharacteristicVoiceOverTranslation
    AVMediaCharacteristicUsesWideGamutColorSpace
    

    二、AVURLAsset

    AVURLAsset AVAsset的具体子类,用于从本地或远程URL初始化AVAsset

    1、创建AVAsset

    返回对指定URL找到的媒体资源构建的AVAsset

    - (instancetype)initWithURL:(NSURL *)URL
    options:(NSDictionary<NSString *,id> *)options;
    + (instancetype)URLAssetWithURL:(NSURL *)URL
    options:(NSDictionary<NSString *,id> *)options;
    
    初始化选项可选键 描述
    AVURLAssetPreferPreciseDurationAndTimingKey 指示AVAsset是否应准备好指示精确的持续时间并按时间提供精确的随机访问,默认值为NO。YES表示在需要精确计时的情况下,可以接受更长的加载时间;然而,这种精确度可能需要在利用其任何部分的操作之前额外解析资源,这取决于其容器格式的细节;许多容器格式提供了足够的摘要信息以便精确计时,并且不需要额外的解析来准备它; QuickTime电影文件和MPEG-4文件是此类格式的示例。 其他格式不提供足够的摘要信息,只有在对文件内容进行初步检查后才能对它们进行精确的随机访问。如果只打算播放资产,则默认值为NO就足够了,因为当全精度不可用时,AVPlayer支持按时间进行近似随机访问。如果打算将AVAsset插入AVMutableComposition对象,通常需要精确的随机访问,建议使用YES值。
    AVURLAssetReferenceRestrictionsKey 枚举值,指示AVAsset在解析对外部媒体数据的引用时使用的限制。某些AVAsset可以包含对存储在资产容器文件外部的媒体数据的引用,例如在另一个文件中。可以使用此键指定遇到这些引用时要使用的策略。如果AVAsset包含一个或多个引用限制禁止的类型的引用,则AVAsset属性的加载将失败。此外,此类AVAsset不能与其他AVFoundation对象一起使用,例如AVPlayerItemAVAssetExportSession
    AVURLAssetHTTPCookiesKey AVURLAsset可以通过HTTP请求发送的HTTP cookie。标准跨站点策略仍然适用:cookie仅发送到它们适用的域。默认情况下,AVURLAsset只能访问应用于资源 URL的客户端默认cookie存储中的cookie。可以使用此初始化选项来补充资源可用的cookie。HTTP cookie不适用于非HTTPS URL。在HLS中,许多HTTP请求(例如,媒体,密钥,变体索引)可以被发布到不同的路径或主机。在这两种情况下,HTTP请求都将丢失任何不适用于AVURLAsset URL的cookie。此初始化选项允许AVURLAsset为这些HTTPS请求使用其他HTTP cookie。
    AVURLAssetAllowsCellularAccessKey 指示连接到蜂窝网络时是否允许代表AVAsset的网络请求,默认为YES。如果要限制默认行为,可以在初始化时将此值设置为NO。
    只读属性 数据类型 描述
    URL NSURL 初始化AVAsset的URL。
    assetCache AVAssetCache 提供对AVAssetCache实例的访问,以用于检查本地缓存的媒体数据。如果AVAsset尚未配置为存储或访问磁盘中的媒体数据,则此属性的值将为nil
    mayRequireContent KeysForMediaData Processing BOOL 允许将AVURLAsset作为内容键接收者添加到AVContentKeySession
    resourceLoader AVAssetResourceLoader AVAsset关联的资源加载程序。在加载过程中,可能会要求资源加载器对象协助加载资源。例如,需要解密的资源可能导致资源装入器被要求提供适当的解密密钥。可以将委托对象分配给资源加载器对象,并使用委托来拦截这些请求并提供适当的响应。

    2、查找兼容的轨道

    返回一个AVAssetTrack,可以从中将任何时间范围插入到给定的合成轨道中。

    - (AVAssetTrack *)compatibleTrackForCompositionTrack:(AVCompositionTrack *)compositionTrack;
    
    • 参数compositionTrack:请求兼容的AVAssetTrack对象的合成轨道。

    使用AVMutableCompositionTrack-insertTimeRange:ofTrack:atTime:error:方法插入轨道;这个方法是-mutableTrackCompatibleWithTrack:的逻辑补充。

    3、获得支持的媒体类型

    //返回AVURLAsset类支持的MIME类型的字符串数组。
    + (NSArray<NSString *> *)audiovisualMIMETypes;
    
    包含UTI的字符串数组,用于标识AVURLAsset支持的文件类型。
    + (NSArray<AVFileType> *)audiovisualTypes;
    
    /* 指示AVAsset是否可以使用给定的编解码器和容器类型播放。
     * 参数extendedMIMEType :扩展的MIME类型字符串,例如video / 3gpp2; codecs =“mp4v.20.9,mp4a.E1”或audio / aac;codecs=“mp4a.E1”。
     */
    + (BOOL)isPlayableExtendedMIMEType:(NSString *)extendedMIMEType;
    

    相关文章

      网友评论

        本文标题:OC之AVAsset

        本文链接:https://www.haomeiwen.com/subject/stckzftx.html