ios – 如何获取AVPlayer内的HLS流的视频大小?

我打算在播放hls流时获得视频分辨率.
我有典型的玩家init:
let urlAsset = AVURLAsset(URL: currentVideoUrl)
 self.player=AVPlayer(playerItem: AVPlayerItem(asset:urlAsset))
 .......

我使用KVO,我试图获得视频大小,当我得到.ReadyToPlay状态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)")

}

问题是trackWithMediaType()总是返回空数组(但适用于非流文件,例如.mov).

如何获取AVPlayer内播放的HLS视频的大小(CGRect)?

解决方法

您是否能够使用此方法至少记录视频信息?
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)

...

}

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...