AVPlayer воспроизводит видеоблок, когда количество сегментов мультимедиа меньше? - PullRequest
3 голосов
/ 26 февраля 2020

Я не уверен в этом - когда AVPlayer получает файл списка воспроизведения, в котором недостаточно сегментов мультимедиа (например, только 1 или 2 сегмента мультимедиа только в списке воспроизведения, как показано ниже). А также в соответствии с документацией HLS Authoring Specification для устройств Apple

> 7. Требования к сегментации носителей

7.6. Длительности сегмента ДОЛЖНЫ быть номинально 6 секунд (например, NTS C 29,97 может быть 6,006 секунды).

7,7. Медиа-сегменты НЕ ДОЛЖНЫ превышать целевую длительность более чем на 0,5 секунды.

Ниже приведен пример файла моего плейлиста для VOD

#EXTM3U
   #EXT-X-VERSION:4
   #EXT-X-TARGETDURATION:2
   #EXT-X-MEDIA-SEQUENCE:56
   #EXT-X-ALLOW-CACHE:NO
   #EXT-X-DISCONTINUITY
   #EXTINF:2.009,
   http://media.example.com/first.ts

   #EXTM3U
   #EXT-X-VERSION:4
   #EXT-X-TARGETDURATION:2
   #EXT-X-MEDIA-SEQUENCE:56
   #EXT-X-ALLOW-CACHE:NO
   #EXT-X-DISCONTINUITY
   #EXTINF:2.003,
   http://media.example.com/Second.ts

   #EXTM3U
   #EXT-X-VERSION:4
   #EXT-X-TARGETDURATION:2
   #EXT-X-MEDIA-SEQUENCE:56
   #EXT-X-ALLOW-CACHE:NO
   #EXT-X-DISCONTINUITY
   #EXTINF:2.003,
   http://media.example.com/third.ts

+++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++

   #EXTM3U
   #EXT-X-VERSION:4
   #EXT-X-TARGETDURATION:2
   #EXT-X-MEDIA-SEQUENCE:56
   #EXT-X-ALLOW-CACHE:NO
   #EXT-X-DISCONTINUITY
   #EXTINF:2.004,
   http://media.example.com/first.ts
   #EXTINF:2.007,
   http://media.example.com/second.ts
   #EXTINF:2.003,

========================= ============================

   #EXTM3U
   #EXT-X-VERSION:4
   #EXT-X-TARGETDURATION:2
   #EXT-X-MEDIA-SEQUENCE:56
   #EXT-X-ALLOW-CACHE:NO
   #EXT-X-DISCONTINUITY
   #EXTINF:2.009,
   http://media.example.com/first.ts
   #EXTINF:2.008,
   http://media.example.com/second.ts
   #EXTINF:2.003,

Поэтому мой вопрос - AVPlayer будет воспроизводить контент только тогда, когда все 3 мультимедийные сегменты доступны или будут воспроизводиться даже при наличии 1 или 2 мультимедийных сегментов, как показано выше ??

1 Ответ

2 голосов
/ 04 марта 2020

Да. AVPlayer будет воспроизводить список воспроизведения, в котором есть один или несколько фрагментов видео или пакет .ts. Я попытался на моем конце ... с использованием фрагмента видео 2 секунды в файле списка воспроизведения, и это сработало. Ниже приведен пример кода, используемого для тестирования.

let urlStr = URL(string: "http://100.177.1.101/jumpingBunny.m3u8")

let asset = AVAsset(url: (urlStr ?? nil)!)
let playerItem = AVPlayerItem(asset: asset)
let player = AVPlayer(playerItem: playerItem)

var playerLayer: AVPlayerLayer?
playerLayer = AVPlayerLayer(player: player)
playerLayer?.videoGravity = AVLayerVideoGravity.resizeAspectFill
playerLayer!.frame = self.view.frame
self.view!.layer.addSublayer(playerLayer!)

let playerViewController = AVPlayerViewController()
playerViewController.player = player
playerViewController.showsPlaybackControls = true

player.play()
...