В чем разница между AVPlayerItem.duration и AVPlayerItem.asset.duration? - PullRequest
0 голосов
/ 23 января 2020

Я KVO-свойство AVPlayer.timeControlStatus, проигрыватель имеет один AVPlayerItem.

Видео представляет собой кодированный mpeg4 видеофайл 10 с, размещенный на удаленном сервере:

let asset = AVURLAsset(url: url, options: [AVURLAssetPreferPreciseDurationAndTimingKey: true])
let item = AVPlayerItem(asset: asset)

let player = AVQueuePlayer()
player.actionAtItemEnd = .pause
player.automaticallyWaitsToMinimizeStalling = false
player.insert(item, after: nil)

Когда свойство впервые меняется на .playing, я смотрю значения продолжительности в консоли отладки:

(lldb) po player.currentItem?.asset.duration
▿ Optional<CMTime>
  ▿ some : CMTime
    - value : 1281
    - timescale : 600
    ▿ flags : CMTimeFlags
      - rawValue : 1
    - epoch : 0

(lldb) po player.currentItem?.duration
▿ Optional<CMTime>
  ▿ some : CMTime
    - value : 0
    - timescale : 0
    ▿ flags : CMTimeFlags
      - rawValue : 17
    - epoch : 0

Почему эти значения отличаются?

1 Ответ

0 голосов
/ 24 января 2020

, когда player.currentItem?.duration равен 0, означает, что другими словами, вы воспроизводите живой эфир неопределенно.

Я не уверен, но player.currentItem?.asset.duration - это общее время, в течение которого пользователь может перемещаться с помощью ползунка, это может меняться со временем, когда игрок буферизует

...