在瀏覽器上播放帶有.m4a擴展名的文件時,如果本機不支持AAC編解碼器,則mediaelement.js出現問題。爲什麼mediaelement.js在使用Flash後備時不能播放.m4a文件?
播放器chrome加載,音頻的第一分鐘左右被緩衝,但文件從不播放。
發生了什麼事?
在瀏覽器上播放帶有.m4a擴展名的文件時,如果本機不支持AAC編解碼器,則mediaelement.js出現問題。爲什麼mediaelement.js在使用Flash後備時不能播放.m4a文件?
播放器chrome加載,音頻的第一分鐘左右被緩衝,但文件從不播放。
發生了什麼事?
這是一個帶有mediaelement.js的known issue。這與Flash插件requiring使用NetStream類而不是Sound類播放的AAC文件有關。
然而,還有一種解決方法:您可以告訴媒體元素將文件視爲視頻,然後所有內容都按原樣運行。初始化播放器時設置pluginVars: 'isvideo=true'
。例如。
$('#player').mediaelementplayer({
pluginVars: 'isvideo=true',
});
您可能還需要告訴的MediaElement的Flash插件能夠處理的MIME類型的音頻/ MP4(由於某種原因,它目前只處理音頻/ M4A)。在mediaelement-and-player.js中查找mejs.plugins.flash並添加「audio/m4a」。
請注意,這將使本機處理AAC文件的瀏覽器完全不受影響;它只會在需要Flash後備時發揮作用。
另一個注意事項:我最近發現,如果這個解決方法被濫用,MP3文件可能無法播放。因此,您需要檢測文件是MP4/M4A的時間,然後才應用它。
要擴展@ samuel-jack的回答,下面是我如何解決Firefox無法使用mediaelement.js在.m4a封裝中播放AAC音頻的問題,同時還允許播放mp3。
"audio/m4a"
到mejs.plugins.flash.types
陣列。確保.mp4文件與正確的MIME類型一起提供;它添加到你的Apache配置:
AddType audio/mp4 m4a
使用HTML類似如下。我使用的$mime_type
變量包含audio/mp4
用於AAC mp4音頻文件,而audio/mpeg
用於正常mp3文件。
<audio controls preload="metadata">
<source src="file.m4a" type="<?php echo $mime_type; ?>">
<object width="100%" height="30" type="application/x-shockwave-flash" data="flashmediaelement.swf">
<param name="movie" value="flashmediaelement.swf" />
<param name="flashvars" value="controls=true&file=file.m4a" />
</object>
</audio>
加載mediaelement腳本,然後在每個文件的基礎上運行它。當音頻來源類型屬性包含audio/mp4
時,我們需要選擇性地包含isvideo=true
黑客。
$('audio,video').each(function(i) {
// Need to add the 'isvideo' hack for 'audio/mp4' media types.
var plugin_vars = ($(this).children('source').attr('type').search('audio/mp4') > -1) ? 'isvideo=true' : '';
$(this).mediaelementplayer({
audioWidth: '100%',
videoWidth: '100%',
startVolume: 1.0,
pluginVars: plugin_vars
});
});
這非常適用於既.M4A和.mp3文件在Firefox 25和31,鉻36,和Safari 7 OS X,以及火狐31在Windows 7
我嘗試添加pluginVars ='isvideo = true',強制執行勻場模式,並在Flash可處理的類型列表中添加音頻/ mp4(音頻/ m4a已存在)。但m4a文件仍然有效。我應該寧願使用