在播放本地支持AAC编解码器的浏览器上播放扩展名为.m4a的文件时,我遇到了mediaelement.js的问题。
播放器Chrome加载,音频的第一分钟左右被缓冲,但文件永远不会播放。
发生了什么事?
答案 0 :(得分:2)
这是一个带有mediaelement.js的known issue。这与使用NetStream类而不是Sound类播放的Flash插件requiring AAC文件有关。
然而,有一种解决办法:你可以告诉媒体元素将文件视为视频,然后一切正常。初始化播放器时设置pluginVars: 'isvideo=true'
。 E.g。
$('#player').mediaelementplayer({
pluginVars: 'isvideo=true',
});
您可能还需要告诉mediaelement Flash插件能够处理mime类型的audio / mp4(出于某种原因,它目前只处理audio / m4a)。在mediaelement-and-player.js中找到mejs.plugins.flash并添加“audio / m4a”。
请注意,这将使本机处理AAC文件的浏览器完全不受影响;它只会在需要Flash后备时才会发挥作用。
另一个注意事项:我最近发现,如果不加区分地应用此方法,MP3文件可能无法播放。因此,您需要检测文件何时为MP4 / M4A,然后才应用它。
答案 1 :(得分:0)
为了扩展@ samuel-jack的答案,这就是我如何解决Firefox无法使用mediaelement.js在.m4a包装器中播放AAC音频的问题,其方式也允许播放mp3。
"audio/m4a"
添加到mejs.plugins.flash.types
数组确保使用正确的mime类型提供.mp4文件;将此添加到您的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脚本,然后基于每个文件运行它。当音频源类型属性包含isvideo=true
时,我们需要有选择地包含audio/mp4
hack。
$('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
});
});
这适用于OS 25上的Firefox 25和31,Chrome 36和Safari 7中的.m4a和.mp3文件,以及Windows 7上的Firefox 31。