AVPlayer первую очередь измеряет время с помощью CMTime. Однако при использовании AVPlayerItemMetadataCollector для сбора метаданных диапазона дат из потока HLS результирующая группа AVDateRangeMetadataGroup содержит NSDate вместо CMTime s.
Моя проблема заключается в том, что я хочу добавить наблюдателя с граничным временем в плеер, поэтому я знаю, когда головка воспроизведения фактически входит в диапазон дат, но вы можете добавлять наблюдателя времени только с использованием CMTime. AVPlayer и AVPlayerItem могут искать Date и могут дать мне текущую головку воспроизведения как Date, но я не вижу способа конвертировать данную Date в CMTime которую я могу использовать для установки пограничного наблюдателя времени.
Теоретически, если бы я знал, что говорит тег EXT-X-PROGRAM-DATE-TIME я мог бы рассчитать смещение CMTime самостоятельно, но я не вижу способа получить это.
Единственное, что я подумал, это получить как currentTime и currentDate из AVPlayerItem, а затем рассчитать относительное смещение между currentDate и моей целевой датой и применить это к CMTime. Но проблема с этим решением заключается в том, что currentDate и currentTime не будут представлять точно такое же время. Дельта, по-видимому, будет очень мала, но она не будет равна нулю (если только сама rate не равна нулю).