2017-09-28 21 views
11

autoplay başarısızlığı Kullanıcılar tarafından bana bildirilmeye başlandı. Hatalar için kendi kodumu araştıran bir sürü zaman harcadım, ancak özellikle Safari 11(en yeni) ile ilgili olduğu anlaşılıyor.Safari 11/YouTube API'sı hatası. Hızlı oynatma/duraklatma ve

YouTube IFrame Embed API'sinin basit bir örneğini kullanırken, Safari, oynatma durumları arasında hızla değişecek ve duraklama bitene kadar duraklayacaktır.

Bu, örneğin en uygun hale getirilmiş sürümü değil, çünkü burada çalışmasını sağlayabilecek bazı keşifler var. İleriye atlamak ve otomatik oynatmak istedim, ama olması gerektiği gibi çalışmayacaktı. YT API örnekleri belgelenmiş olan start ve playVideo kullanmayı denedim.

Bunu yalnızca son zamanlarda, örnekte bazı ayrıntılı parametrelerin bulunduğunu açıklayan bir hata olduğunu doğruladım.

Notlar:

  • Bazen Video yenilemek kaç kere bağlı oynamak OLACAK, ama çok seyrek bu.
  • Otomatik yürütme bayrakları genellikle başarısız olur.
  • startSeconds çalışmıyor olduğundan bu örnekte start işaretini kullanın.
  • Kod örneği diğer tarayıcılarda çalışır: Chrome, Opera, Firefox

Burada sonunda ( durdurulmuş) 2 açılış, Oyuncu Devlet panik gösterir Safari'nin konsolu görebileceğiniz şeyin bir görüntü. Panic in the console

Hata kopyalayacak bir kopyala/yapıştır kod örneği burada. Herhangi bir HTML dosyasında Bırak ve özellikle farklı tarayıcılar ve farklı cihazlarda çalışan otomatik oynatmayı alma, ben video oynatıcılar ile birçok sorun yaşamaktadır

<style> 
    body, html, iframe { 
     position: absolute; left: 0; right: 0; top: 0; bottom: 0; width: 100%; height: 100%; 
     margin: 0; 
     padding: 0; 
     pointer-events: none; 
    } 
</style> 


<script> 
    var videoId = "9nwQ1F7oX-8"; 

    var playerVars = { 
     autohide: 1, 
     autopause: 0, 
     autoplay: 1, 
     cc_load_policy: "0", 
     disablekb: 1, 
     enablejsapi: 1, 
     iv_load_policy: 1, 
     modestbranding: 1, 
     origin: "*", 
     rel: 0, 
     showinfo: 0, 
     start: 122, 
     version: 3 
    }; 
</script> 


<iframe id="ytplayer" 
    frameborder="0" 
    allowfullscreen="1" 
    title="YouTube video player" 
    width="100%" 
    height="100%" 
    x-src="https://www.youtube.com/embed/9nwQ1F7oX-8?enablejsapi=1&amp;origin=*&amp;rel=0&amp;version=3&amp;iv_load_policy=3&amp;modestbranding=1&amp;showinfo=0&amp;autohide=1&amp;disablekb=1&amp;autoplay=1&amp;autopause=0&amp;cc_load_policy=0&amp;startSeconds=30&amp;widgetid=1" 
    src="https://www.youtube.com/embed/9nwQ1F7oX-8?enablejsapi=1&amp;origin=*&amp;start=122"> 
</iframe> 


<script> 
window.onYouTubeIframeAPIReady = function() { 
    console.log("YouTube is ready!", videoId, playerVars); 

    var api = new YT.Player("ytplayer", { 
     width: "100%", 
     height: "100%", 
     videoId: videoId, 
     playerVars: playerVars, 
     events: { 

      onError: function(e) { 
       // 100 – The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private. 
       // 101 – The owner of the requested video does not allow it to be played in embedded players. 
       // 150 – This error is the same as 101. It"s just a 101 error in disguise! 

       console.warn("An error has occurred", arguments); 
      }, 

      onReady: function() { 
       // log 
       console.log("YouTube player is ready to use"); 

       // 
       api.playVideo(); 
      }, 

      onStateChange: function(e) { 
       // log 
       console.log("YouTube state change ", e); 

       // Finished 
       if (e.data == 0) { 
        console.log("Finished"); 
       } 

       // Playing 
       else if (e.data === YT.PlayerState.PLAYING) { 
        console.log("Playing"); 
       } 

       // Pausing 
       else if (e.data === 2) { 
        console.log("Pausing"); 
       } 

       // Buffering 
       else if (e.data === 3) { 
        console.log("Buffering"); 
       } 
      } 
     } 
    }); 

} 
</script> 

<script src="https://www.youtube.com/iframe_api"></script> 
+0

Safari'deki oynatıcının Youtube oynat düğmesini gördüğü benzer bir durum vardı. Iframe'i görüntü yokken gizliyordum ama opaklığı 0'a ve 1'e hazır olduğunda değişti. Ve sonra video ya autoplay ya da –

cevap

1

Safari 11. başarısız görmelisiniz.

Otomatik oynatma özelliğinin ve API oynatma/duraklatma işleminin birbiriyle karıştığı ve oyuncu durumu panikine neden olduğu görülüyor.

benim durumumda iyi çalışmış son çözüm: playerVars içinde: '0 autoplay' kullanarak,

Seti otomatik oynatma kapalı olarak. 'api.playVideo();' 'onReady: içinde kullandığınız fonksiyon()' oradan almalı ve oyuncuyu ´play 'durumuna getirecektir.

+0

butonu ile oynanabiliyordu. . Bir fikriniz varsa, lütfen bir örnekle gönderin. Sağladığım kod kopya/pastable olmalı ve değiştirilmesi kolay olmalıdır. –