The options for specifying media type characteristics.
SDKs
- iOS 11.0+
- macOS 10.13+
- Mac Catalyst 13.0+
- tvOS 11.0+
- watchOS 6.0+
Framework
- AVFoundation
Declaration
typedef NSString *AVMediaCharacteristic;
Discussion
Each track of .mov files and .m4v files (that is, files of type mov
and m4v
) can optionally carry one or more tagged media characteristics, each of which declares a purpose, a trait, or some other distinguishing property of the track's media.
For example, tag a track containing audio that mixes original program content with additional narrative descriptions of visual action with the media characteristic public
in order to distinguish it from other audio tracks stored in the same file that do not contain additional narrative.
Each tagged media characteristic in .mov
and .m4v
files is stored in track user data as a user data item of type 'tagc'
(represented as a Four
) that consists of a standard atom header (size and type) followed by an array of US-ASCII characters (8-bit, high bit clear) comprising the value of the tag. The character array is not a C string; there is no terminating zero. The user data item atom size is sum of the standard atom header size (8) and the size of the US-ASCII character array.
You can inspect the tagged media characteristics of a track as follows:
NSArray *trackUserDataItems = [myAVAssetTrack metadataForFormat:AVMetadataFormatQuickTimeUserData];
NSArray *trackTaggedMediaCharacteristics = [AVMetadataItem metadataItemsFromArray:trackUserDataItems
withKey:AVMetadataQuickTimeUserDataKeyTaggedCharacteristic
keySpace:AVMetadataKeySpaceQuickTimeUserData];
for (AVMetadataItem *metadataItem in trackTaggedMediaCharacteristics) {
NSString *thisTrackMediaCharacteristic = [metadataItem stringValue];
}
You can use has
to determine whether a track has a particular media characteristic, whether to infer the characteristic from its media type or format descriptions (such as AVMedia
or AVMedia
) or requires explicit tagging (such as AVMedia
or AVMedia
). You can't use explicit tagging to override inferences from tracks' media types or format descriptions; for example, the following returns false for any audio track, even when tagging the track with the visual characteristic.
[anAVAssetTrack hasMediaCharacteristic:AVMediaCharacteristicVisual]
You can write tagged media characteristics to the QuickTime user data of an output track associated with an AVAsset
object as follows, provided that the output file type of the asset writer is either mov
or m4v
:
AVMutableMetadataItem *myTaggedMediaCharacteristic = [[AVMutableMetadataItem alloc] init];
[myTaggedMediaCharacteristic setKey:AVMetadataQuickTimeUserDataKeyTaggedCharacteristic];
[myTaggedMediaCharacteristic setKeySpace:AVMetadataKeySpaceQuickTimeUserData];
[myTaggedMediaCharacteristic setValue:aMeaningfulCharacteristicAsNSString];
[myMutableArrayOfMetadata addObject:myTaggedMediaCharacteristic];
[myAssetWriterInput setMetadata:myMutableArrayOfMetadata];