Mojave / macOS 10.14.0: [Продолжительность AVPlayerItem] всегда неопределенна - PullRequest
0 голосов
/ 05 октября 2018

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

#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 Ответ

0 голосов
/ 05 октября 2018

Это ошибка?

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

Обходной путь

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

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

вместо

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