2012-03-21 182 views
11

我正在使用常規套接字通過網絡連接傳輸電影內容的小型iPhone應用程序。該視頻格式爲H.264。然而,我無法播放/解碼數據。我一直在考慮使用FFMPEG,但許可證使它不適合該項目。我一直在研究Apple的AVFoundation框架(尤其是AVPlayer),它似乎能夠處理h264內容,但是我只能找到使用url啓動電影的方法 - 而不是通過證明從內存緩衝網絡。在iOS上使用AVFoundation播放套接字流h.264電影

我一直在做一些測試,以反正這一點,使用以下方法:

  1. 使用常規AVPlayer播放短片。每次在網絡上收到數據時,都會使用帶附加模式的fopen將其寫入文件。 AVPlayer的資產然後用更新的數據重新加載/重新創建。這種方法似乎有兩個問題:首先,屏幕在短暫時間內變黑,而第一個資產被卸載並且新加載。其次,我不清楚播放停止的位置,所以我不確定如何找到合適的地方開始播放新的資源。
  2. 第二種方法是像第一種方法那樣將數據寫入文件,但不同之處在於數據被加載到第二個資產中。然後使用AVQueuedPlayer,其中第二個資產在播放器中插入/排隊,然後在緩衝完成時調用。第一個資產可以在沒有黑屏的情況下卸載。但是,使用這種方法,要找出從哪裏開始播放新資產,要比第一種方法更麻煩。

有沒有人做過這樣的事情,並使其工作?有沒有適當的方式使用AVFoundation

+0

您是否找到了答案?我也一樣,我試圖播放包含單個幀H264文件(0.264文件擴展名),並試圖對其進行解碼。 AVAssetReader不接受這種文件格式,我唯一的計劃是每幀創建一個mp4文件(這聽起來很瘋狂)。 – Cthutu 2012-05-16 15:06:52

+0

是否有特定的原因,爲什麼來源必須推動視頻,而不是讓應用程序拉它? HLS通常反過來工作。如果您的源計算機可以運行OSX,則有Apple工具可以通過UDP rtsp輸入流爲您分段。如果沒有,你可能僞造了AVPlayer以爲它通過在電話 - 塊運行的代理文件處理正常HLS,因爲它到達,並寫一些代碼來生成一個合適的假.m3u8播放列表來表示塊。 – 2012-07-03 22:17:31

回答

0

做到這一點的方法官方是HTTP實時流格式,它支持多個質量水平(除其他外)並自動將它們之間切換(例如:如果用戶移動來自WiFi到蜂窩)。

你可以在這裏找到文檔:Apple Http Streaming Docs