【发布时间】:2019-02-08 09:11:18
【问题描述】:
我们有一个可以播放长 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 的问题,但是(AFAIK)我们必须使用 AVPlayer,因为我们需要质量更好的“频谱:”AVAudioTimePitchAlgorithm。
[编辑:] - 错误是一致的 - 对于给定的请求位置,它总是从相同(错误)的位置播放。重启后也是这样。
非常感谢任何帮助!谢谢
[编辑:]
- 我们已经尝试过
preferredTimescale: playerTimescale - 也试过
kCMTimeIndefinite而不是kCMTimeZero
【问题讨论】:
-
这听起来像是 AVURLAsset 的 AVURLAssetPreferPreciseDurationAndTimingKey developer.apple.com/documentation/avfoundation/… 的工作
-
@RhythmicFistman 修复了它。非常感谢,非常感谢您对此的帮助。出于某种原因,我无法单击勾选来接受此答案,因为它在评论中,但如果您重新发布为答案,我会接受它。
-
太棒了!我已经把我的推测变成了一个权威的答案。
标签: swift avplayer avaudioplayer seek seektotime