获取mp3文件的指定时间范围的字节范围位置

时间:2016-01-04 22:19:01

标签: ios mp3 avplayer

我希望能够确定NSData压缩mp3文件的一段开始和结束的字节位置。

例如,如果我使用长度为1分钟且1000000字节的AVPlayer(或任何播放器)播放mp3文件,我想知道文件中30秒标记的字节数发生,那么40秒标记发生了多少字节。

请注意,由于mp3文件被压缩,我不能将字节分成两半来确定30秒标记。

如果不能使用Swift / Objective-C,你知道这个决定是否可以用任何编程语言完成吗?谢谢!

1 个答案:

答案 0 :(得分:1)

事实证明我有一个不同的问题需要解决。我试图在几秒钟的准确度内近似特定时间的字节位置,比如32:45长播客节目的4:29点。

我沿着这些线使用了一个函数来计算近似的字节位置:

startTimeBytesPosition = (startTimeInSeconds / episodeDuration) * episodeFileSize

奇怪的是,这个功能对于某些剧集来说就像一个魅力,但对于其他剧集来说,最终的开始时间会减少大约30-40秒。

事实证明这种不准确性正在发生,因为一些mp3文件最初包含元数据,而元数据中存储的图像文件可能是+ 500KB,因此我根据带有图像文件的任何一集的字节位置计算时间关闭约500KB(翻译成约30-40秒)。

要解决此问题,我首先确定mp3文件中元数据的大小(以字节为单位),然后使用它来偏移近似函数:

startTimeBytesPosition = metadataBytesOffset + (startTimeInSeconds / episodeDuration) * episodeFileSize

到目前为止,这段代码似乎在几秒钟内准确地基于字节位置近似时间。

但是,我应该注意,这假设图像的元数据总是出现在mp3文件的开头,我不知道是否总是如此。