2010-11-26 46 views
5

我目前正在使用AVPlayer和AVPlayerLayer來播放一些視頻。在播放視頻時,我在視頻中每隔30秒註冊一次時間更新。這用於繪製視頻中該點處加速度的圖形,並與視頻一起更新。該圖正在使用視頻中的CMTime,因此,如果我跳到視頻的其他部分,該圖就會立即表示視頻中的該時間點,而無需額外的工作。AVPlayerLayer - 重新編程車輪?

任何人,據我所知,如果我想獲得類似於MediaPlayer框架提供的界面,我將不得不自己這樣做。

我想知道的是,有沒有辦法使用我的AVPlayer與MediaPlayer框架? (不是我能看到的。)或者,有沒有辦法通過MediaPlayer框架註冊增量時間更新。

我的代碼,如果有人有興趣,如下:

[moviePlayer addPeriodicTimeObserverForInterval: CMTimeMake(1, 30) queue: dispatch_queue_create("eventQueue", NULL) usingBlock: ^(CMTime time) { 
loopCount = (int)(CMTimeGetSeconds(time) * 30); 
if(loopCount < [dataPointArray count]) { 
    dispatch_sync(dispatch_get_main_queue(), ^{ 
    [graphLayer setNeedsDisplay]; 
    }); 
} 
}]; 

謝謝!

回答

0

如果你正在談論MPMoviePlayer顯示的窗口鑲邊,那麼恐怕你正在考慮自己創建這個UI。

AFAIK沒有辦法通過MediaPlayer框架實現您需要的計時行爲,這非常簡單,就是「播放某些媒體」框架。你使用AVFoundation做正確的事情。

這使您需要自己創建UI。我的建議是從一個XIB文件開始創建總體佈局;頂部帶有完成按鈕的工具欄,一個代表自定義回放視圖的大視圖(使用AVPlayerLayer)和一個單獨的視圖來包含您的控件。

如果要模擬MPMoviePlayer UI,您需要編寫一些自定義控制器代碼以根據需要自動顯示/隱藏播放控件和工具欄。

+0

Woa。這個答案比問題晚了近一年,並且仍然被接受了!布拉沃。 – Almo 2012-05-15 17:37:12

0

您可能想要尋找AVSynchronizedLayer類。我認爲官方編程指南中沒有太多內容。你可以在這裏和那裏找到一些信息:subfurtherOtter Software

在O'Really編程的iOS 4(或5)中,還有一個關於如何讓一個方形移動/停止與動畫同步的簡短參考。 在WWDC 2011會議Working with Media in AV Foundation期間展示了另一個演示(不是很多代碼)。