2016-04-13 26 views
4

私は実際にAVFoundationで早送りと逆転再生を実装したいと考えています。なぜAVPlayerItemのcanPlayFastForwardメソッドがFalseを返すのですか?

私が知る限り、AVPlayerItemのcanPlayReverseとcanPlayFastForwardがFalseを返す場合、私はAVPlayerで0.0〜2.0レートしか再生できません。

しかし、私は-1.0が必要であり、2.0以上のレートも必要です。

私の問題はと理由結果がfalseの場合、私はちょうどを見つけることができないということです。

AppleのドキュメントでcanPlayFastForwardがいつfalseを返すかについては触れられていません。

誰もが、なぜcanPlayFastForward & canPlayReverseの結果であり、私はそれがにする方法を変更することができますを説明できますか?

答えて

2

可能性は、あなたが.readToPlay秒プロパティstatus変更「AVPlayerItem前のcanPlayReverseまたはcanPlayFastForwardAVPlayerItemチェックされています。そうしている場合は、常にfalseになります。

import AVFoundation 

let anAsset = AVAsset(URL: <#A URL#>) 
let playerItem = AVPlayerItem(asset: anAsset) 
let canPlayFastForward = playerItem.canPlayFastForward 
if (canPlayFastForward){ 
    print("This line won't execute") 
} 

代わりAVPlayerItemのプロパティstatusを守ってください。

は、このようにしないでください。以下はAppleのdocumentationです。

AVPlayerItemオブジェクトは動的です。 AVPlayerItem.canPlayFastForwardの値は、すべてのファイルベースの アセットと一部のストリーミングベースのアセット(ソースプレイリストがそれを許可するメディアを で提供している場合)が再生準備が整うと、YESに変更されます。 プレイヤーアイテムの再生準備が整ったときに通知を受ける方法は、 (KVO)を介してAVPlayerItem.statusプロパティを監視することです( )。同じクラスのobserveValue方法Ovveride

import AVFoundation 
dynamic var songItem:AVPlayerItem! //Make it instance variable 

let anAsset = AVAsset(URL: <#A URL#>) 
let songItem = AVPlayerItem(asset: anAsset) 
playerItem.addObserver(self, forKeyPath: "status", options: .new, context: nil) 

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 
     if let status = change?[.newKey] as? Int{ 
      if(status == AVPlayerItemStatus.readyToPlay.rawValue){ 
       yourPlayer.rate = 2.0 // or whatever you want 
      } 
     } 

    } 

songItemのステータス観測から、このクラスを削除することを忘れないでください

deinit { 
     playerItem.removeObserver(self, forKeyPath: "status") 
    } 
関連する問題