2017-11-07 3 views
1

애니메이션 및 재생 노래로 구성된 노래방 앱을 개발 중입니다. 여기서 가장 중요한 것은 둘 사이의 매우 정확한 동기화입니다.iOS 11 AVPlayer/mp3 currentTime 정확하지 않음

몇 달 전에 구현되었으며 iOS 9/10에서 모든 것이 훌륭하게 작동했습니다. 재생과 애니메이션 사이에 너무 큰 지연이 있었기 때문에 Android 앱 (ExoPlayer)에 문제가있었습니다. 마지막으로 우리는이 문제가 잘못된 노래 형식 (mp3)으로 인한 것임을 발견했습니다. 여기에 설명 된 내용은 https://github.com/google/ExoPlayer/issues/3233입니다. 우리는 mp4 형식으로 노래를 포장하여 고정 시켰습니다 (iOS에서는 여전히 mp3가 사용됨).

나는

self.player = AVPlayer(url: url) 

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

    return 0 
} 

모든 것이 아이폰 OS 11 출시 때까지 확인했다 HLS로 AVPlayer를 사용합니다. iOS 11에는 Android에 있던 동일한 동기화 해제 (player.currentTime이 정확하지 않음)가 있습니다. 흥미로운 점은 iOS 10 SDK를 기반으로 빌드되었고 AppStore에서 사용할 수있는 앱조차도 iOS 11에서 제대로 작동하지 않지만 iOS 10에서도 여전히 잘 작동한다는 것입니다.

서버 측의 내용이 변경되지 않았습니다. 그래서 애플은 디코딩/버퍼링에서 뭔가를 바꿔야 만했다. 지금 우리는 오디오 포맷/디코딩을 변경하고 있지만 여전히 궁금합니다. 왜 그런 일이 일어 났습니까? 누구든지 비슷한 것을 발견 했습니까?

안부

답변

0

당신은 AVURLAsset

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

이 옵션을 사용하지 않으면 을 만들이 옵션을 사용할 필요가 AVPlayer를 파일 길이 MP3 오디오 지속 시간을 측정, 그래서 시간을 얻을 수있는 작은 오류가 있습니다.

+0

여기까지입니다! 고마워;) 그래서 그것은 currentTime 반환 그냥 %로 기간을 곱한 것 같습니다 - 여기에 동기화가 발생했습니다. –