2010-09-22 68 views
18

我有一個HTML5視頻播放器,具有自定義搜索欄,這對iPhone(內嵌播放)和瀏覽器非常有用。在iPad上尋找HTML5視頻

它在iPad上播放也很棒,搜索欄隨着電影播放而更新,但由於某種原因,我無法尋求。

所有值是正確的,我想設置:

myPlayer.currentTime = XX; 

不幸的是,iPad的拒絕設置.currentTime屬性。

從我可以收集瀏覽器和iPad之間的區別在瀏覽器上獲得:

myPlayer.networkState = 3 
myPlayer.readyState = 4 

在iPad上我得到:

myPlayer.networkState = 2 
myPlayer.readyState = 3 

這是完全相同的代碼,運行本地MP4視頻。

任何想法爲什麼會發生這種情況?

乾杯, 安德烈

+0

您可以發佈設置當前時間的代碼嗎?我可以毫不費力地做到這一點。 – 2010-10-02 19:09:32

+0

Here:videoPlayerElement.currentTime = x * videoPlayerElement.duration/scrubberBg.width(); ...這在瀏覽器(其中幾個)以及iPad上運行時,值可以確定,但不會設置屬性。我正在運行3.2 – Andre 2010-10-03 14:49:38

+1

我發現在iOS上設置'video.currentTime'似乎在用戶操作後面進行門控。在設置'currentTime'之前發出'alert()'或觸摸事件似乎提供了正確的響應 - 當然除了它需要的用戶交互之外。 – eug 2012-01-24 22:08:08

回答

6

我有各種讓JavaScript來控制音頻元素的問題,和太多的無奈與currentTime屬性,與蘋果對什麼是事件的直接用戶啓動限制一起。

是否有某種與iPad上的JavaScript & HTML5視頻播放(或「功能」這是無證),這需要一個解決辦法怪異的bug它不會讓我感到吃驚。根據我的經驗,iPad擁有比官方文檔更獨特的做事方式。

您應該檢查錯誤緩衝可搜索,並尋求視頻元素的性能。看着你的readyState & networkState值,iPad似乎認爲視頻還沒有被完全加載 - 對於本地資源來說這很奇怪。

緩衝可查找應該等於整個視頻的時間範圍。尋求應該是TRUE。那至少應該給你一些關於這個問題的更多信息。

您是否使用其他視頻測試過它?它可能是iPad與iPad有問題的視頻存在某種編碼問題。

除此之外 - 之前的iPad操作系統版本中存在一個缺陷,無法設置currentTime屬性。你在使用最新的操作系統版本嗎?

+0

我使用的是3.2(因爲我無法將其限制到最新版本),並且我嘗試了不同的視頻源,並且出現了相同的問題:/ – Andre 2010-10-02 10:19:02

0

我有同樣的問題 - 這裏是我的情況的屬性:

UIWebView - iPad Simulator 
duration=4.861666679382324 
startTime=0 
currentTime=4.861666679382324 
buffered(1)=[0-0] 
seekable(0)= 
seeking=false 
error=null 
readystate=4 
networkstate=3 

Chrome: 
duration=4.9226298332214355 
startTime=0 
currentTime=4.9226298332214355 
buffered(1)=[0-4.9226298332214355] 
seekable(1)=[0-4.9226298332214355] 
seeking=false 
error=null 
readystate=4 
networkstate=1 

如此 - 沒有什麼是得到緩衝,沒有什麼可搜索。我正在通過UIWebView從iPad包的資源目錄播放本地剪輯。

就我而言,我需要的是重新設置爲每次播放後視頻的頂部,我可以通過調用來完成這「負荷()」

5

這個問題與值相關用於video.currentTime屬性。在我的具體情況下,我通過確保在尋找過程中使用帶有1個十進制數字的浮點數來解決此問題。

在iOS 3.2設置video.currentTime爲零確實將尋求視頻的開頭,但價值不會更新後 - timeupdate事件仍在正常出動,但如果你嘗試讀currentTime它總是返回相同的值。

尋求在開始視頻使用0.1代替0的,以尋求12.2345使用12.2

PS:你可以使用(+(12.2345).toFixed(1))到的小數位數限制爲1

+0

我有同樣的問題,並嘗試按照上面的四捨五入, t似乎在IOS 6.1上工作。 – mzedeler 2013-03-21 12:48:35

1

Kyle的回答是一個很好的一個。我想補充,你不能假設seekable屬性是在任何特定事件之後填入的。這意味着您不能等待loadedmetadata,canplay或其他任何事件,並且假設您可以在此時安全設置currentTime

看起來最安全的做法是在每個視頻相關事件之後檢查seekable,並且如果它包含您想要查找的時間,請在該位置設置currentTime。在iPad上,seekable可能會在canplaythrough事件發生後才能填充,這是相當晚的事件。

有關詳情,請參閱my blog post