我希望能够确定一段 NSData 压缩 mp3 文件的开始和结束字节位置。
例如,如果我使用 AVPlayer(或任何播放器)播放 1 分钟长和 1000000 字节的 mp3 文件,我想知道文件中大约有多少字节出现 30 秒标记,那么 40 秒标记发生了多少字节。
请注意,由于 mp3 文件被压缩,我不能将字节分成两半来确定 30 秒标记。
如果这不能用 Swift/Objective-C 来完成,你知道这个决定是否可以用任何编程语言来完成吗?谢谢!
最佳答案
原来我有一个不同的问题要解决。我试图在几秒内准确估算特定时间的字节位置,例如 32:45 长的播客片段的 4:29 点。
我沿这些方向使用了一个函数来计算大致的字节位置:
startTimeBytesPosition = (startTimeInSeconds / episodeDuration) * episodeFileSize
该功能对某些剧集来说非常有效,但对于其他剧集而言,由此产生的开始时间会延迟大约 30-40 秒。
事实证明,这种不准确的发生是因为某些 mp3 在一开始就包含元数据,而存储在元数据中的图像文件可能超过 500KB,因此对于任何带有图像文件的剧集,我基于字节位置的时间计算都将关闭大约 500KB(在这种情况下转化为大约 30-40 秒)。
为了解决这个问题,我首先确定 mp3 文件中元数据的字节大小,然后使用它来抵消近似函数:
startTimeBytesPosition = metadataBytesOffset + (startTimeInSeconds / episodeDuration) * episodeFileSize
到目前为止,这段代码似乎在根据字节位置在几秒内准确地估算时间方面做得很好。
我应该注意,这是假设图像的元数据将始终出现在 mp3 文件的开头,我不知道情况是否总是如此。
关于ios - 获取 mp3 文件指定时间范围的字节范围位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34600896/