2016-09-13 27 views
0

我從一個名爲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

+1

程序員疼痛!我以爲我曾經有過這樣的工作,但目前還不行。我開始尋找一種解決方案,只爲找到我自己的帖子,我忘了我做了: - (.... – markjwill

回答