2017-11-07 7 views
1

私は、アニメーションと再生曲からなるカラオケアプリを開発しています。ここで最も重要なのは、両方の間の非常に正確な同期です。iOS 11 AVPlayer/mp3 currentTime正確ではない

私は数ヶ月前にそれを実装しました.iOS 9/10ではすべてがうまくいっていました。再生とアニメーションの間に非常に大きな遅延があったため、Androidアプリ(ExoPlayer)に問題がありました。最後に、間違った曲形式(mp3)が原因で問題が発生していることが判明しました。ここで説明されています:https://github.com/google/ExoPlayer/issues/3233。 mp4形式に歌を詰め込むことで修正しました(まだiOS上にmp3が使用されています)。

私はHLS

でAVPlayerを使用

self.player = AVPlayer(url: url) 

// 
var currentTime_: Double { 
    if let player = self.player { 
     return player.currentTime().seconds 
    } 

    return 0 
} 

すべてがiOSの11のリリースまでOKでした。 iOS 11では、Android上にあったのと同じ同期解除(player.currentTimeは正確ではありません)があります。 興味深いのは、iOS 10 SDKでビルドされ、AppStoreで利用可能なアプリケーションであっても、iOS 11では正常に動作しませんが、iOS 10でもうまくいきます。

サーバ側の変更がありませんでした。だから、Appleはデコード/バッファリングで何かを変えなければならなかった。現在、私たちはオーディオフォーマット/デコードの変更に取り組んでいますが、まだ私は不思議です - なぜそれが起こったのですか?誰かが似たようなことに遭遇しましたか?あなたは、このオプションを使用しない場合はAVURLAsset

let asset = AVURLAsset(url: url, options: [AVURLAssetPreferPreciseDurationAndTimingKey: true]) 

を作成する場合は、このオプションを使用する必要がある

よろしく

答えて

0

、AVPlayerは、ファイルの長さによって、mp3オーディオ継続時間を計測し、それは時間を得るために小さな誤差があります。

+0

これです!ありがとう;)それで、currentTimeがちょうどパーセンテージに継続時間を掛けたように見えるので、ここでは非同期化が起こったのです。 –

関連する問題