Mojave/macOS 10.14.0: [Продолжительность AVPlayerItem] всегда неопределенна

Я пытаюсь прочитать продолжительность локально сохраненного аудиофайла, используя следующий код:

#import <Foundation/Foundation.h>
#import <CoreMedia/CoreMedia.h>
#import <AVFoundation/AVFoundation.h>

AVPlayer *player = [AVPlayer playerWithURL: urlForLocalAudioFile];
// busy wait - I know, not elegant, please ignore
int timeout = 0;
while (([player status] == AVPlayerStatusUnknown
        || [[player currentItem] status] == AVPlayerItemStatusUnknown)
        && timeout < 100) {
    [NSThread sleepForTimeInterval: 0.1];
    timeout++;
}
// make sure we have the right status
if ([[player currentItem] status] == AVPlayerItemStatusReadyToPlay) {
    CMTime cmTime = [[player currentItem] duration];
    if (CMTIME_IS_INDEFINITE(cmTime)) {
        NSLog(@"Duration is kCMTimeIndefinite");
    } else {
        NSLog(@"Time: %d", CMTimeGetSeconds(cmTime));
    }
} else {
    NSLog(@"Item not ready to play");
}

Код не выполняется в основном потоке AppKit и раньше работал в macOS 10.13.x и более ранних версиях. Теперь с 10.14.0 он всегда сообщает "Duration is kCMTimeIndefinite", Даже после того, как я начал проигрывать файл.

Может кто-нибудь, пожалуйста:

  1. подтвердить / опровергнуть это ошибка в macOS 10.14.0
  2. предложить обходной путь

Благодарю.

1 ответ

Это ошибка?

Да. См. Rdar: // 45039043.

Временное решение

использование

CMTime cmTime = [[[player currentItem] asset] duration];

вместо

CMTime cmTime = [[player currentItem] duration];
Другие вопросы по тегам