2012-04-02 20 views
0

出於某種奇怪的原因,HTML5 Audio API不會允許我在iOS 4和iPad 5和iPad上訪問currentTime。無論何時播放音頻元素,我都需要調整currentTime,但它的行爲與當前時間無法訪問一樣。無處不在尋找答案,我無法弄清楚。我的代碼在所有現代瀏覽器中工作正常,所以我有點難住。iPad HTML5音軌未復位

我的HTML標記

<p> 
    <a class="audio" href="assets/audio/ambient-sounds-1.mp3" data-flash="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/niftyplayer.swf" data-mp3="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/ambient-sounds-1.mp3" data-ogg="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/ambient-sounds-1.ogg"> 
     Ambient Sounds 
     <span class="audio-play">Play</span> 
     <audio preload=""> 
      <source preload="" src="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/ambient-sounds-1.mp3" type="audio/mpeg"> 
      <source preload="" src="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/ambient-sounds-1.ogg" type="audio/ogg"> 
     </audio> 
    </a> 
</p> 

<p> 
    <a class="audio" href="assets/audio/city_street.mp3" data-flash="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/niftyplayer.swf" data-mp3="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/city_street.mp3" data-ogg="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/city_street.ogg"> 
     City Street Sounds 
     <span class="audio-play">Play</span> 
     <audio preload=""> 
      <source preload="" src="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/city_street.mp3" type="audio/mpeg"> 
      <source preload="" src="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/city_street.ogg" type="audio/ogg"> 
     </audio> 
    </a> 
</p> 

<p> 
    <a class="audio" href="#" data-flash="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/niftyplayer.swf" data-mp3="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/crash.mp3" data-ogg="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/crash.ogg"> 
     Loud Crash 
     <span class="audio-play">Play</span> 
     <audio preload=""> 
      <source preload="" src="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/crash.mp3" type="audio/mpeg"> 
      <source preload="" src="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/crash.ogg" type="audio/ogg"> 
     </audio> 
    </a> 
</p> 

我的JavaScript

AudioPlayer = { 
    init: function() { 
     var player = this; 
     this.audio = $('.audio'); // Save and cache all audio elements so they can be targeted by mass stop() 

     player.audio.each(function() { 
      // Bind each audio element 
      player.bind($(this)); 
     }); 
    }, 

    bind: function (object) { 
     var player = this; 

     object.bind('touchstart click', function() { 

      // get the real DOM element, not the jQuery array 
      var audio = $(this).find('audio').get(0); 

      if(audio.paused) { // Check if its playing 
       player.play(audio); 
      } 
      else { 
       player.stop(audio); 
      } 

      return false; 
     }); 
    }, 

    play: function(audio) { 
     // Stop all existing audio elements and set them to 0 
     this.audio.each(function() { 
      var audioOther = $(this).find('audio').get(0); 
      audioOther.pause(); 
     }); 

     // Play the audio element 
     if(audio.currentTime) audio.currentTime = 0; 
     audio.play(); 
    }, 

    stop: function(audio) {  
     if(audio.currentTime) audio.currentTime = 0; 
     audio.play(); 
    } 

}; 
+1

它發回什麼錯誤? – 2012-04-02 16:18:56

+0

實際上它不會因if(audio.currentTime)而引發錯誤。但是,如果我試圖強行把它說currentTime的「試圖使用一個對象,是不是,或不再,可用。」 – 2012-04-02 16:25:14

+0

O和上所有的,因爲它似乎成功地加載到內存中,你沒有點擊,而不是點擊的元素的元素此錯誤火災。 – 2012-04-02 16:32:39

回答

1

有一個答案,爲什麼我的代碼不能正常工作,的iOS 4和5需要整個音頻元素被徹底摧毀(可怕的解決方案,但它的工作原理)。以下是如何解決我的問題的簡要說明,如果您遇到問題。

  1. 只有1個元素插入到頁面(我插入我的結束標記前右)。
  2. 在點擊播放新的音頻元素,徹底破壞現有的和你要播放的新曲目從頭開始重建。音頻元素
  3. 呼叫.play,你會好到哪裏去。
1

我也有同樣的問題,Google搜索,然後找到了這個網頁及以下頁面

http://remysharp.com/2010/12/23/audio-sprites/

這傢伙可能已經找到了更詳細的解答。

+0

我花了很多小時試圖讓他的解決方案工作。出於某種原因,iOS 4不願意合作。 – 2012-04-25 22:17:24

1

我有這些類型的問題,我也開始使用這種絕望的方式來解決這個問題,包括重新創建音頻組件,重新加載源等。

一天或兩天前,我發現媒體內容的來源必須是「純」的,才能夠從ipad成功使用它。

我想用「純」來表達所有沒有被之前代碼「轉化」的內容,它可能會在它到達ipad客戶端之前更改或刪除它的元數據。

在我正在研究的當前項目中,我發現使用Ipad我無法重播,也無法遍歷mm:ss位於「文檔」文件夾中的任何內容,但是如果我將該文件移動到別處,完美的是,我可以在我的ipad上播放它,轉到一分鐘:第二我希望,等等。

在我的情況下,一個.htaccess強制我的apache服務器通過一個「download.php」發送「get」查詢,該查詢檢查權限並執行類似的奇怪事情,然後這個download.php被調度該文件給客戶端,但沒有一個好方法或更多的ipad喜歡的方式。

我刪除了.htaccess綁定,並且ipad再次獲得了不錯的音頻處理。 (那download.php是不是太好使用...)

+0

那麼這個問題不是數據傳輸,它的iPad內存緩衝。感謝您的分享,以前沒有聽說過這個問題。 – 2013-04-13 00:18:19