2012-04-22 168 views
2

我正在寫一個mac應用程序,可以將來自不同來源的視頻下載到本地硬盤。目前爲止效果很好,但我希望允許用戶在下載時播放這些視頻。仔細查看QTKit的文檔,我找不到任何方法可以將電影數據分段地提供給QTMovie對象。如何在下載時播放QuickTime電影?

有沒有一種方法可以實現與QTKit,AVFoundation或其他系統框架?我真的很想避免爲此帶來ffmpeg或其他第三方庫。

+0

這取決於電影文件的格式。有些格式設計爲流式傳輸,其他格式則不能。 – 2012-04-25 12:35:04

+0

@Rob,我知道某些格式無法流式傳輸。我想要下載的大多數電影應該採用流媒體格式。對於那些不是我將禁用下載播放功能。我不是要求一種方式去做不可能的事情(即以不可複製的格式流式傳輸電影) – Sven 2012-04-25 13:24:53

回答

2

您應該使用AV Foundation框架而不是QTKit。你想要做的第一件事是閱讀AV Foundation Programming Guide。儘管該指南主要涉及iOS,但自10.7版以來,AV Foundation功能在OS X上可用。

+0

感謝提示,不知道AVFoundation也可以在Mac上使用。但是這似乎並不具備所需的功能。 – Sven 2012-04-24 19:01:23

+0

Sven,如果您在鏈接的頁面中間向下滾動,則會有部分鏈接「Playback」,其中介紹瞭如何使用AVPlayer對象控制素材資源的播放,以及如何使用AVPlayerLayer對象顯示視頻。這不是你所需要的? 不知道這些類從當前正在下載的文件/資產中讀取的能力。 – 2012-04-25 03:49:10

+1

哦,從本地文件系統或流URL播放電影不成問題。我需要有關如何在下載時播放電影的信息。理想情況下,當我從網絡接收它們時,我需要傳入「NSData」對象。 – Sven 2012-04-25 13:28:39

3

問題在於QuickTime電影的工作原理。它們不是基於流的文件,因此一次輸入大量信息通常沒有用處。相反,它們是基於原子的文件,並且允許原子以任意順序出現。
根據創建QuickTime影片的方式,「moov」原子(提供重要信息並且是解釋媒體數據所必需的)可以(通常是)在文件的末尾。如果它結束了,那麼在完全下載之前播放電影是不可能的。如果moov數據在開頭(例如,如果有人使用「準備上網」選項保存了電影),則QuickTime將能夠立即開始播放文件。

只有像MPG傳輸流這樣的格式被設計用於流式傳輸或「漸進式下載」。

+0

有關漸進式播放如何工作的更多信息,您應該閱讀[逐行回放:原子故事](http://fabiensanglard.net/mobile_progressive_playback/index.php)。 – 0xced 2012-04-26 05:57:21

+0

謝謝,但這沒有幫助。大多數電影文件應該準備好流式傳輸,這不是問題。我需要的是一個API來播放這些。 – Sven 2012-04-29 08:03:58