2016-10-14 18 views
1

根據this的回答,爲了測試瀏覽器播放HLS視頻的能力,可以使用MIME application/x-mpegURL。 但是,這種方法的問題是,它爲iPhone(實際上支持HLS)以及適用於Android的Firefox(不支持)返回maybe。儘管在Chrome和Firefox等桌面瀏覽器的情況下,返回空字符串效果很好。如何在不同的瀏覽器和不同的操作系統上精確檢測HLS支持?

是否有任何確切的方法來檢查瀏覽器中的HLS支持?

HTML5test.com能夠準確地預測HLS支持是「是」還是「否」。這是如何工作的?

+0

HTML5test.com正在做或ARENT?你最後的陳述有點模糊。 – Liam

+0

@Ram你有沒有試過在'

+0

@ guest271314不!你能詳細說明一下嗎? – Ram

回答

1

HTML5test.com能夠精確地預測HLS支持,因爲是的 或No.這是如何工作的?

在在鏈接頁面的源代碼見engine.js在行2405-2533其中HTMLMediaElement.canPlayType()使用

/* video element */ 

    function (results) { 
     var element = document.createElement('video'); 

     results.addItem({ 
      key: 'video.element', 
      passed: !!element.canPlayType 
     }); 


     /* audioTracks property */ 

     results.addItem({ 
      key: 'video.audiotracks', 
      passed: 'audioTracks' in element 
     }); 


     /* videoTracks property */ 

     results.addItem({ 
      key: 'video.videotracks', 
      passed: 'videoTracks' in element 
     }); 


     /* subtitles */ 

     results.addItem({ 
      key: 'video.subtitle', 
      passed: 'track' in document.createElement('track') 
     }); 


     /* poster */ 

     results.addItem({ 
      key: 'video.poster', 
      passed: 'poster' in element 
     }); 
    }, 


    /* video codecs */ 

    function (results) { 
     var element = document.createElement('video'); 

     /* mpeg-4 codec */ 

     results.addItem({ 
      key: 'video.codecs.mp4.mpeg4', 
      passed: !!element.canPlayType && canPlayType(element, 'video/mp4; codecs="mp4v.20.8"') 
     }); 

     /* h.264 codec */ 

     /* I added a workaround for IE9, which only detects H.264 if you also provide an audio codec. Bug filed @ connect.microsoft.com */ 

     results.addItem({ 
      key: 'video.codecs.mp4.h264', 
      passed: !!element.canPlayType && (canPlayType(element, 'video/mp4; codecs="avc1.42E01E"') || canPlayType(element, 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"')) 
     }); 

     /* h.265 codec */ 

     results.addItem({ 
      key: 'video.codecs.mp4.h265', 
      passed: !!element.canPlayType && (canPlayType(element, 'video/mp4; codecs="hvc1.1.L0.0"') || canPlayType(element, 'video/mp4; codecs="hev1.1.L0.0"')) 
     }); 

     /* theora codec */ 

     results.addItem({ 
      key: 'video.codecs.ogg.theora', 
      passed: !!element.canPlayType && canPlayType(element, 'video/ogg; codecs="theora"') 
     }); 

     /* vp8 in webm codec */ 

     results.addItem({ 
      key: 'video.codecs.webm.vp8', 
      passed: !!element.canPlayType && canPlayType(element, 'video/webm; codecs="vp8"') 
     }); 

     /* vp9 in webm codec */ 

     results.addItem({ 
      key: 'video.codecs.webm.vp9', 
      passed: !!element.canPlayType && canPlayType(element, 'video/webm; codecs="vp9"') 
     }); 

     /* does codec detection work properly? */ 

     var passed = true; 

     if (!!element.canPlayType) { 
      if (element.canPlayType('video/nonsense') == 'no') { 
       passed = false; 
       log('BUGGY: Codec detection bug in Firefox 3.5.0 - 3.5.1 and Safari 4.0.0 - 4.0.4 that answer "no" to unknown codecs instead of an empty string') 
      } 

      if (element.canPlayType('video/webm') == 'probably') { 
       passed = false; 
       log('BUGGY: Codec detection bug that Firefox 27 and earlier always says "probably" when asked about WebM, even when the codecs string is not present') 
      } 

      if (element.canPlayType('video/mp4; codecs="avc1.42E01E"') == 'maybe' && element.canPlayType('video/mp4') == 'probably') { 
       passed = false; 
       log('BUGGY: Codec detection bug in iOS 4.1 and earlier that switches "maybe" and "probably" around') 
      } 

      if (element.canPlayType('video/mp4; codecs="avc1.42E01E"') == 'maybe' && element.canPlayType('video/mp4') == 'maybe') { 
       passed = false; 
       log('BUGGY: Codec detection bug in Android where no better answer than "maybe" is given') 
      } 

      if (element.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"') == 'probably' && element.canPlayType('video/mp4; codecs="avc1.42E01E"') != 'probably') { 
       passed = false; 
       log('BUGGY: Codec detection bug in Internet Explorer 9 that requires both audio and video codec on test') 
      } 
     } 

     results.addItem({ 
      key: 'video.canplaytype', 
      passed: element.canPlayType ? (passed ? YES : YES | BUGGY) : NO 
     }); 
    }, 

參見Apple HTTP Live Streaming (HLS)

相關問題