我從一個名爲AVMovieEditor的蘋果演示應用程序開始。我試圖添加播放速度的視覺顯示。沒有任何修改AVMovieEditor就像視頻編輯應用程序一樣對J,K & L鍵作出響應。 J反向播放,J再次播放反向速度更快,K停頓,L播放,L再次播放更快,等等......在macOS應用中顯示AVplayer播放速度
但是我每次檢查AVplayer.rate
時都成功創建了觀察者, 1,0或1,儘管比實時播放快。事實上,當按下L時,速率從0變爲1,但再次按L時,速度從1增加到0。其結果是爲J相似,倒放除率變化爲-1,然後回到0
- (void)addPeriodicTimeObserver {
// about 30 times pr second
CMTime interval = CMTimeMake(33, 1000);
// Queue on which to invoke the callback
dispatch_queue_t mainQueue = dispatch_get_main_queue();
// Add time observer
self.timeObserverToken =
[self.movieViewController.playerView.player addPeriodicTimeObserverForInterval:interval
queue:mainQueue
usingBlock:^(CMTime time) {
NSLog(@"%f %f",
self.movieViewController.playerView.player.rate
// only shows -1,0,1 despite playback faster then 100%
[[self.movieViewController.playerView.player.currentItem.tracks[0] assetTrack] nominalFrameRate]);
// Always shows 29.97
}];
}
經過一番搜索我很爲難,我怎麼能找到一個有用的播放速率?
我想知道播放的實際幀頻,然後我會在GUI中製作一個指示燈,告知最終用戶當前的播放速率。
編輯:我發現數據的另一個有趣的一點,但它並沒有解決我的問題......
self.movieViewController.playerView.player.currentItem.tracks[0].currentVideoFrameRate
當以上時開始播放它坡道向上觀察從0到30ish,然後當L再次按下時,它會上升到60ish。這將解決我的問題,但2個細節。首先當L被按下時,第三次視頻播放增加,但currentVideoFrameRate
仍然掛在60ish左右。第二個問題是currentVideoFrameRate
只顯示正值。如果按兩次J,並且AVPlayer.rate
從-1回到0,則無法知道幀正在以相反的順序遍歷!
有一件事我沒有找到任何信息,我認爲可能揭示解決方案的是實體捕獲J,K鍵盤事件和正在應用的響應?
編輯2:Apple的quicktime播放器具有我在尋找的功能。它響應J,K & L(如AVMovieEditor),但它的播放速度分別顯示2x,5x,10x,30x & 60x,並將其顯示在左側以進行反向播放。這是僅供蘋果公司保留的,還是我可以擁有它!?
EDIT3:(!謝謝)基於一個答案我已經開始尋找另一個屬性AVplayerItem.timebase.rate
然而,這是給同樣不正確的結果。
我可以確認,視覺上球員率按預期增加,每按一下「L」鍵。我希望我以前使用的「請求的速率」(AVplayer.rate
)也會增加,因爲我看到它在回放中可視化表示,但不在報告的「請求速率」中。 (它變爲0)
「回放實際發生速率」的行爲類似。除了當我按停止鍵時,它仍然顯示1的比率,大概是因爲在請求停止時玩家正在玩。但是當回放速率大於1或小於-1時,AVplayerItem.timebase.rate
也報告「回放實際發生速率」爲0。
這是我目前用來查看房價的代碼。它是由觀察者觸發的,該觀察者監視所請求費率的變化。我是如何看待這些問題的?
NSLog(@"RequestedPlaybackRate:%f",myAVPlayer.rate);
NSLog(@"OccuringPlaybackRate:%f",CMTimebaseGetRate(myAVPlayerItem.timebase));
我也澄清了「請求速率」,其實就是我想要的東西,而不是「回放實際發生率」。
Edit4:
創造了這個問題很容易再現GitHub的項目,並與蘋果提交的bug報告。
https://github.com/markjwill/AVPlayerRateBug
程序員疼痛!我以爲我曾經有過這樣的工作,但目前還不行。我開始尋找一種解決方案,只爲找到我自己的帖子,我忘了我做了: - (.... – markjwill