2009-05-25 75 views
17

我正在寫一個應用程序,其中的一部分允許用戶流/播放視頻。我想限制功能,以便他們只有在有WiFi連接的情況下才能播放視頻。然後,我會保存視頻,以便當他們只有3G(或更少)連接時,他們不能流式傳輸視頻,並且只能播放保存在手機上的視頻。同時流式傳輸並保存視頻?

理想情況下,我想讓MPMoviePlayerController流/播放電影,然後訪問電影數據並保存它。但是,MPMoviePlayerController api似乎不支持對電影數據的訪問。

我想避免和下載然後播放場景。有任何想法嗎?

+0

嗨,你有成功嗎? – Bkillnest 2016-03-15 02:23:06

回答

11

想到兩種解決方案。 這兩種解決方案都要求文件的格式可以逐行播放,例如,你不需要整個文件就可以播放它(但是無論如何這將是一個先決條件)。

  1. 使用線程下載數據並將其附加到文件,並從另一個線程播放文件。現在,這需要您可以處理MPMoviePlayerController中的EOF事件,並暫停播放,直到緩存文件被追加到然後恢復爲同一點爲止。

到目前爲止,我所看到的人們這樣做不起作用,因爲MPMoviePlayerController無法處理EOF事件。 (未經我自己測試)[Caching videos to disk after successful preload by MPMoviePlayerController

  1. 從文件中跳過播放並設置本地HTTP服務器和來自(在本地主機上)的流。這也沒有經過測試。 這個想法是,MPMoviePlayerController會更好地處理從HTTP流丟失數據的事件,然後直接讀取文件。 下滑可能是效率不高,但我認爲這是CPU的小幅增加。我不知道網絡接口是否可以處理它,但我認爲這不是問題。

我離開這個答案作爲一個維基,因爲我沒有一個工作解決方案,但我也想要一個。

+2

有人試過這個嗎?你有成功嗎? – calimarkus 2012-08-29 21:01:56

1

iPhone正在使用漸進式下載,因此它不會保存在設備上。爲此,您需要明確下載它,然後從本地文件夾播放視頻。

2

有一種方法可以完成這項工作,但您必須編寫自己的HTTP Live Streaming下載程序。

基本上,你解析的.m3u8文件(這是一個非常簡單的標準,但可以變得棘手的備用流和流的可能性會簡單地退出,需要一個新的播放列表繼續),然後下載塊.ts格式到您的本地存儲,比如文檔文件夾或Caches等。

然後,您必須設置本地HTTP服務器,以允許MPMoviePlayerController或AVPlayer通過HTTP訪問文件(因爲它們不會觸摸本地文件路徑),包括指向本地文件的重新編碼的播放列表文件,您必須從原始播放列表創建自己的文件。 CocoaHTTPServer對此非常有用。

一旦你完成了所有的工作,它會很好。在將本地HTTP URL呈現給電影播放器​​之前,在下載第一個或第二個塊之前,您不可避免地會出現一些延遲,但在此之後,您將無縫下載,錄製和預覽播放。

祝你好運!