AVPlayer
の再生開始の正確なタイミングを通知する方法を探しています。 「レート」プロパティがありますが、現在、更新を取得するためにNSTimer
で定期的にチェックしています。
KVOを試しましたが、KVOに準拠していないようです。
events があるときは、プレーヤー [〜#〜] End [〜#〜] があることを知っています。ここで一時停止について話しています。
私もKVOがAVPlayerItem's
"status"をサブスクライブしましたが、HTTPアセットがキャッシュを終了したときに再生/一時停止が表示されません。私はまた、play/pauseのすべての呼び出しの収集を開始し、後でインスタントUI更新を要求しましたが、AVPlayer
が実際に再生を開始するまでに、さらにいくつかの実行ループが必要です。ボタンを更新したいすぐに。
I OS 1以降の場合AVPlayerの新しいプロパティtimeControlStatusを確認できます。
if(avPlayerObject.timeControlStatus==AVPlayerTimeControlStatusPaused)
{
//Paused mode
}
else if(avPlayerObject.timeControlStatus==AVPlayerTimeControlStatusPlaying)
{
//Play mode
}
なぜ「レート」はKVOの苦情ではないと言うのですか?わたしにはできる。
これが私がしたことです:
- (void)viewDidLoad
{
...
[self.player addObserver:self forKeyPath:@"rate" options:0 context:nil];
}
その後:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
if ([keyPath isEqualToString:@"rate"]) {
if ([self.player rate]) {
[self changeToPause]; // This changes the button to Pause
}
else {
[self changeToPlay]; // This changes the button to Play
}
}
}
ビデオの現在の継続時間を追跡するデフォルトのオブザーバーとしてのAVPalyer。ビデオを一時停止または再開すると、1つのグローバル変数を使用して一時停止時間を取得できます(オブザーバー内でその変数を更新します)。
CMTime interval = CMTimeMake(1, 1);
//The capture of self here is coming in with your implicit property access of self.currentduration - you can't refer to self or properties on self from within a block that will be strongly retained by self.
//You can get around this by creating a weak reference to self before accessing timerDisp inside your block
__weak typeof(self) weakSelf = self;
self.timeObserverToken = [_player addPeriodicTimeObserverForInterval:interval queue:NULL usingBlock: ^(CMTime time)
{
_currentDuration = (int)CMTimeGetSeconds (_player.currentTime);
if(!_isPlaying)
{
_pausedDuration = _currentDuration;
}
}
player = AVPlayer(url: URL(fileURLWithPath: path))
player.addObserver(self, forKeyPath: "rate", options: NSKeyValueObservingOptions.new, context: nil)
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == "rate" {
if player.rate > 0 {
print("video started")
}
}
}
スウィフトで