ios swift avplayer hls

ios - ¿Cómo obtener el tamaño de video para la transmisión HLS dentro de AVPlayer?



swift (2)

Estoy tratando de obtener resolución de video al reproducir hls stream. Tengo el jugador típico de inicio:

let urlAsset = AVURLAsset(URL: currentVideoUrl) self.player=AVPlayer(playerItem: AVPlayerItem(asset:urlAsset)) .......

Uso KVO y trato de obtener el tamaño del video cuando obtengo el estado .ReadyToPlay para AVPlayerItem:

func resolutionSizeForVideo() { guard let videoTrack = self.player.currentItem?.asset.tracksWithMediaType(AVMediaTypeVideo).first else { return } let size = CGSizeApplyAffineTransform(videoTrack.naturalSize, videoTrack.preferredTransform) let frameSize = CGSize(width: fabs(size.width), height: fabs(size.height)) print ("video size: /(frameSize)") }

El problema es que tracksWithMediaType () siempre devuelve una matriz vacía (pero funciona para archivos sin transmisión, por ejemplo, para .mov).

¿Cómo puedo obtener el tamaño (CGRect) de la reproducción de video HLS dentro de AVPlayer?


¿Puedes registrar al menos la información del video usando este método?

func checkVideoRez(videoURL: NSURL) -> Bool { let videoAssetSource = AVAsset.init(URL: videoURL) let videoTrack = videoAssetSource.tracksWithMediaType(AVMediaTypeVideo)[0] let size = videoTrack.naturalSize let txf = videoTrack.preferredTransform let realVidSize = CGSizeApplyAffineTransform(size, txf) print(videoTrack) print(txf) print(size) print(realVidSize) ... }


Las pistas siempre devolverán nulo cuando se usa HLS. Si tiene una subclase UIView que anula su layerClass con un AVPlayerLayer para reproducir el video, puede obtener el tamaño con

playerView.layer.videoRect

Este es el tamaño del video y no de toda la capa.

Alternativamente, puede usar KVO para observar la presentación Tamaño del artículo

player.addObserver(self, forKeyPath: "currentItem.presentationSize", options: [.Initial, .New], context: nil)