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