IOS AVPlayer gets fps

I am trying to figure out how to get the frame rate of a video using AVPlayer. AVPlayerItem has a speed variable, but only returns a value from 0 to 2 (usually 1 when playing). Does anyone have an idea how to get the frame rate of a video?

Greetings

+5
source share
6 answers

Use AVAssetTrack's nominalFrameRate property.

Below is the production method FrameRate: There queuePlayerisAVPlayer

-(float)getFrameRateFromAVPlayer
{
  float fps=0.00;
  if (self.queuePlayer.currentItem.asset) {
    AVAssetTrack * videoATrack = [[videoAsset tracksWithMediaType:AVMediaTypeVideo] lastObject];
    if(videoATrack)
    {
        fps = videoATrack.nominalFrameRate;
    }
  }
  return fps;
}
+12
source

, FrameRate, , iOS. , ffmpeg 1 (125 ) 25 iOS 7.x() 1,0, iOS 8.x - ) 0,99. , , ​​ ( ). , , (, 1 /), , ( FrameRate), , iOS, FrameRate . ?

+2

AVPlayer, .

AVPlayerItem rate - , .

- AVAssetTrack nominalFrameRate. AVAsset, .

AVAssetReader, , , , .

+1

AVPlayer - , , , 0,5 - , 2 - .

, FrameRate, . , , :

CMTime frameDuration = [myAsset tracksWithMediaType:AVMediaTypeVideo][0].minFrameDuration;
float fps = frameDuration.timescale/(float)frameDuration.value;

, . , ffmpeg -i .

----

, kCMTimeZero. , , - AVAssetReader , , .

+1

Swift 4 :

let asset = avplayer.currentItem.asset

let tracks = asset.tracks(withMediaType: .video)

let fps = tracks?.first?.nominalFrameRate

.

0

, API , . :( swift 4 , .

AVPlayerItem FPS . :)

private var numberOfRenderingFailures = 0
func isVideoRendering() -> Bool {
    guard let currentItem = player.currentItem else { return false }

    // Check if we are playing video tracks
    let isRendering = currentItem.tracks.contains { ($0.assetTrack?.mediaType == .video) && ($0.currentVideoFrameRate > 5) }
    if isRendering {
        numberOfRenderingFailures = 0
        return true
    }
    numberOfRenderingFailures += 1
    if numberOfRenderingFailures < 5 {
        return true
    }
    return false
}
0

All Articles