我們有一個使用PhoneGap/Cordova 4.3.0構建的iOS應用程序。此應用程序通過在3210文件中使用<content src="http://example.com/foo" />
直接加載外部網站。所有的功能都包含在這個網站中,所以我們實際上並沒有使用任何本地的HTML或JS文件。科爾多瓦外部應用程序+本地視頻
作爲應用功能的一部分,我們必須播放一些視頻。由於該應用也可以離線工作,因此我們希望在本地緩存這些視頻。因此,我們使用FileTransfer插件將它們下載到設備,以及其他資源(如圖像或PDF)。在下載文件後,我們獲得了file://
協議的URL。我們也可以選擇使用cdvfile://
協議。當我們使用cdvfile://
網址顯示圖片時,圖片顯示正確。但是,視頻根本不能播放。
要發揮我們使用標準的HTML5視頻標籤的視頻:
<video width="auto" height="100%" controls="controls" autoplay="true">
<source src="..." type="video/mp4" />
</video>
本身工作的視頻,他們會從外部源正常播放(如,他們將發揮,如果我們訪問它們服務器而不是本地文件系統)。我意識到這個問題與網絡相關的概念有關,例如同源策略和訪問本地文件系統的限制。然而,同時我也想知道爲什麼在這些相同的限制條件下圖像工作正常。
我迄今爲止嘗試:
- 使用
file://
和cdvfile://
網址作爲視頻src
。這不會產生任何形式的視覺效果。屏幕只是黑色的。 - 使用
iframe
並將src
設置爲視頻網址。當使用file://
時,屏幕仍然是黑色的。但是,使用cdvfile://
時,會出現iOS視頻播放器界面,帶有播放按鈕和全屏按鈕,但視頻不播放,也沒有時間線。 - 將一個本地文件添加到cordova,名爲
video.html
,它將URL作爲參數並將該網址的video
標記呈現爲src
。該計劃是將此文件包含爲iframe
,但顯然我無法將iframe
作爲本地文件。我嘗試了各種可能指向該特定video.html
文件的URL(儘管實際上我不確定這是可能的)。我試過的是:cordova.file.applicationDirectory + 'www/video.html'
,http://localhost/www/video.html
,cdvfile://localhost/www/video.html
。 - 我找了一些可以播放視頻的cordova插件,但是我一直沒有找到適用於iOS的插件。大多數插件似乎都針對Android。
現在,我有可能以錯誤的方式解決這個問題。正如我所看到的,cordova的「標準用例」是您在本地存儲HTML/JS/CSS文件。像我使用的外部內容可能有點不尋常。我將解釋這個應用程序的要求,這些要求使我可以使用此功能。
- 該應用程序應該爲多個平臺構建(儘管我們從iOS開始)。因此我們使用PhoneGap。
- 它應該可以在線和離線訪問,儘管所有內容都來自服務器(本地不生產內容)。這就是我們下載內容並在本地保存的原因。
- 它也應該自動更新其本身的任何部分,而不需要從App Store進行更新。這就是我們使用外部頁面的原因 - 因爲它有一個
cache.manifest
,它允許我們控制Web應用程序代碼的更新,同時允許它在本地緩存。這可能是最重要的考慮因素,因爲如果我們想在Cordova中本地保留一些文件,我們將不得不在JavaScript內重新實現此緩存功能(儘可能使用盡可能薄的層)。
在任何情況下,我最關心的是如何得到這些視頻的工作。我願意嘗試最黑暗的解決方法!如果目前的開發決策確實無法實現,那麼也許你可以給我一些提示,告訴我應該如何構建應用程序以使其運行並且仍能滿足我的要求。
非常感謝!
我推薦使用遠程調試器並查看網絡中發生了什麼。也許mime文件類型不正確。 – 2015-04-14 14:31:05
你是否在任何地方使用'.toURL()'?如果是這樣,請嘗試用'.toNativeURL()替換' – FlyingLemon 2015-04-16 13:29:13
我已經嘗試了這些建議,我的發現是: @SergeySnegirev我調試了傳入的文件。 MIME類型沒問題。文件已成功下載到設備。但是,我無法調試通過'file://'或'cdvfile://'協議創建的請求,因爲它們實際上並不通過網絡。 (),'.toNativeURL()'和'.toInternalURL()'。前兩個給我一個'file://'URL,而最後給我一個'cdvfile://'URL。 'cdvfile://'網址適用於圖片,但不適用於視頻。 – Grampa 2015-04-17 08:42:47