我希望能够确定NSData压缩mp3文件的一段开始和结束的字节位置。
例如,如果我使用长度为1分钟且1000000字节的AVPlayer(或任何播放器)播放mp3文件,我想知道文件中30秒标记的字节数发生,那么40秒标记发生了多少字节。
请注意,由于mp3文件被压缩,我不能将字节分成两半来确定30秒标记。
如果不能使用Swift / Objective-C,你知道这个决定是否可以用任何编程语言完成吗?谢谢!
答案 0 :(得分:1)
事实证明我有一个不同的问题需要解决。我试图在几秒钟的准确度内近似特定时间的字节位置,比如32:45长播客节目的4:29点。
我沿着这些线使用了一个函数来计算近似的字节位置:
startTimeBytesPosition = (startTimeInSeconds / episodeDuration) * episodeFileSize
奇怪的是,这个功能对于某些剧集来说就像一个魅力,但对于其他剧集来说,最终的开始时间会减少大约30-40秒。
事实证明这种不准确性正在发生,因为一些mp3文件最初包含元数据,而元数据中存储的图像文件可能是+ 500KB,因此我根据带有图像文件的任何一集的字节位置计算时间关闭约500KB(翻译成约30-40秒)。
要解决此问题,我首先确定mp3文件中元数据的大小(以字节为单位),然后使用它来偏移近似函数:
startTimeBytesPosition = metadataBytesOffset + (startTimeInSeconds / episodeDuration) * episodeFileSize
到目前为止,这段代码似乎在几秒钟内准确地基于字节位置近似时间。
但是,我应该注意,这假设图像的元数据总是出现在mp3文件的开头,我不知道是否总是如此。