gpt4 book ai didi

objective-c - 如何为 AVMetadataFormatiTunesMetadata 创建 AVMutableMetadataItem

转载 作者:行者123 更新时间:2023-12-03 16:58:05 25 4
gpt4 key购买 nike

我正在尝试使用 AVMutableMetadataItem 更新文件的轨道数。除了 AVMetadataFormatiTunesMetadata 之外,我已经取得了一些成功。我似乎无法弄清楚我需要设置什么值才能使其正常工作。我尝试创建 NSArray 的存档,如下所示

[NSKeyedArchiver archivedDataWithRootObject:[NSArray arrayWithObjects:
[NSNumber numberWithUnsignedInt:13],
[NSNumber numberWithUnsignedInt:32],
nil]];

但我最终得到的 track 和 trackOf 数字相差甚远。我到底应该传入什么作为键为 AVMetadataiTunesMetadataKeyTrackNumber 的 AVMutableMetadataItem 的值?

最佳答案

我花了很长时间才弄清楚这一点。感谢苹果的核心音频文档,其中完全没有说明如何处理它。或者任何其他与此相关的键。在我理解之前,我必须检查包含轨道信息的 MP4 文件。

回答

您需要为其分配一个包含轨道信息的 NSData。

数据必须由四个 16 位大端值组成,其中第二个是轨道编号,第三个是集合中的总轨道。第一个和第四个应该为零。

所以基本上你需要这样做

int16_t trackNumber = 1; // track number
int16_t tracksInCollection = 12; // total number of tracks in collection
int16_t data[4] = { 0, trackNumber, tracksInCollection, 0 };

metadataItem.keySpace = AVMetadataKeySpaceiTunes;
metadataItem.key = AVMetadataiTunesMetadataKeyTrackNumber;
metadataItem.value = [NSData dataWithBytes:data length:sizeof(data)];

注意:同样的方法也适用于 AVMetadataiTunesMetadataKeyDiscNumber 键。

关于字节顺序的评论

如果您不想担心字节顺序,您可以从 Berkeley 套接字 API“借用”方法。或者它可能是一个宏。不管怎样,它的工作原理是这样的:

bigendianval = htons(val);

int16_t trackNumber = htons(myTrackNumberVariable);

htons(主机到网络短)会将您的 16 位数字转换为大字节序 - 无论您自己系统的字节序如何。 IP 网络也是大尾数法,因此 htons 在这里可以重用。

关于objective-c - 如何为 AVMetadataFormatiTunesMetadata 创建 AVMutableMetadataItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14717833/

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