我想获得特定视频的帧速率。我试着查看AVFoundation
和AssetsLibrary
中的API,例如AVURLAsset或AVAssetReader。他们都没有真正的帮助。有没有人知道Apple的框架/库中的方法来获得帧速率
答案 0 :(得分:9)
更简单的选择是获取AVAssetTrack并读取其nominalFrameRate属性。 看起来this可以帮助您。
标称帧速率是轨道的帧速率,以每秒帧数为单位。(只读) AVAssetTrack类 @property(nonatomic,readonly)float nominalFrameRate
答案 1 :(得分:3)
对于iOS 7+,您可以使用AVPlayerItemTrack的currentVideoFrameRate属性。它是我见过的唯一一致测量FPS的属性。在HLS流中似乎打破了nominalFrameRate属性。
AVPlayerItem *item = AVPlayer.currentItem; // Your current item
float fps = 0.00;
for (AVPlayerItemTrack *track in item.tracks) {
if ([track.assetTrack.mediaType isEqualToString:AVMediaTypeVideo]) {
fps = track.currentVideoFrameRate;
}
}
答案 2 :(得分:0)
对于财产currentVideoFrameRate
,来自苹果公司的document:
如果该项目没有在播放,或者该曲目的媒体类型不是 视频,此属性的值为0.0。
它要求该项目处于“播放中”状态,所以我改用nominalFrameRate
。
它仍然可以在iOS 12,swift 4中使用:
let tracks = asset.tracks(withMediaType: .video)
let fps = tracks?.first?.nominalFrameRate
记住要处理零检查。