我们有一个可以播放长 mp3 文件(1 小时长)的应用程序。我们希望能够从文件中的设定点开始播放。但是,当我们这样做时,它的误差最多可达 10 秒。
代码如下:
let trackStart = arrTracks![MediaPlayer.shared.currentSongNo].samples
let frameRate : Int32 = (MediaPlayer.shared.player?.currentItem?.asset.duration.timescale)!
MediaPlayer.shared.player?.seek(to: CMTimeMakeWithSeconds(Double(trackStart), frameRate),
toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)
- 我们必须使用 AVPlayer,因为我们需要更高质量的“频谱:”AVAudioTimePitchAlgorithm。
我们在使用 AVAudioPlayer 时没有遇到问题,但是(据我所知)我们必须使用 AVPlayer,因为我们需要更高质量的“频谱:”AVAudioTimePitchAlgorithm。
[编辑:] - 错误是一致的 - 对于给定的请求位置,它总是从相同(错误)的位置播放。重启后也是如此。
非常感谢任何帮助!谢谢
[编辑:]
- 我们已经尝试过
preferredTimescale:playerTimescale
- 还尝试了
kCMTimeIndefinite
而不是kCMTimeZero
最佳答案
这就是 AVURLAsset
的 AVURLAssetPreferPreciseDurationAndTimingKey
的用途。
请注意,这会增加加载时间。
关于swift - 即使有公差,AVPlayer Seek 也不准确Before : kCMTimeZero,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54589084/