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
не равна нулю).