2013-08-01 59 views
3

我正在建立一個手機網絡應用程序,我正在實施視頻&音頻標籤。顯然,並非所有設備都知道運行所有文件格式。 Modernizr知道Codec會返回給我,但我怎麼知道我的文件是否有這個特定的編解碼器?在尋找一個圖書館,知道檢測支持特定的音頻視頻格式文件

我可以識別文件擴展名或mim類型,但是我需要將編解碼器與文件擴展名進行比較,並使用此數據維護一個數組,並且這看起來像是一個sisyphic任務。

你們說什麼?任何人都知道在一個知道向我們提供這些信息的好圖書館?或者,也許我的方法是錯誤的,這是實現這一目標的更好方法。

請不要以Firefox操作系統爲例向用戶顯示操作系統不支持特定文件格式的消息,但在處理音頻文件時他不提供此消息。這意味着我需要向用戶提供這種反饋,而且我還希望以我自己的應用程序的定製可視方式進行操作。

舉例: 我得到了video.mp4。 Modernizr返回H264的編解碼器。這兩條信息沒有關係。 我無法將我的視頻的後備廣告投放到可用的所有視頻格式中。該應用程序是Cloud Files Hosting的瀏覽器(如Dropbox),如果用戶上傳了一個無法在FirefoxOS上運行的文件,那麼他必須明白爲什麼它的文件不會運行,爲此我需要這個庫,而不是自己管理這種壓縮。

一些參考:

謝謝。

回答

2

如果你有機會到MIME類型,你可以簡單地使用audiovideocanPlayType()方法:

canPlay = (function(){ 
    var a = document.createElement('audio'), 
     v = document.createElement('video'); 

    function canPlayAudio(type){ 
    var mime = 'audio/'; 
    if (a && a.canPlayType) { 
     if (type.indexOf(mime) === -1) type = mime+type; 
     return !!a.canPlayType(type) || !!a.canPlayType(type.replace(/^audio\/(x-)?(.+)$/, mime+'x-$2')) 
    } return false 
    } 

    function canPlayVideo(type){ 
    var mime = 'video/'; 
    if (v && v.canPlayType) { 
     if (type.indexOf(mime) === -1) type = mime+type; 
     return !!v.canPlayType(type) || !!v.canPlayType(type.replace(/^video\/(x-)?(.+)$/, mime+'x-$2')) 
    } return false 
    } 

    return { 
    audio: canPlayAudio, 
    video: canPlayVideo 
    } 
})(); 

然後就可以進行測試這樣的(注:包括"audio/""video/"部分可選):

canPlay.audio('audio/mpeg') // true 
canPlay.audio('m4a')   // true 
canPlay.audio('wav')   // true 
canPlay.audio('flac')  // false 
canPlay.audio('audio/ogg') // true 

canPlay.video('video/mpeg') // false 
canPlay.video('video/mp4') // true 
canPlay.video('m4v')   // true 
canPlay.video('video/webm') // true 
canPlay.video('avi')   // false 
+0

謝謝@idbehold這個偉大的方向。爲了得到可能我必須通過編解碼器。任何想法我怎麼能做到這一點? – neoswf

+0

Man-你有關於Codec識別的答案,所以我真的能夠真正地用我的賞金來獎勵你嗎? – neoswf

+0

@NeoSwf我不認爲有一個編程方式來處理編解碼器。如果您知道某些需要編解碼器的MIME類型,我可以嘗試爲它們添加特定的檢查。讓我知道他們是什麼。 – idbehold