在本身不支持 AAC 编解码器的浏览器上播放扩展名为 .m4a 的文件时,我遇到了 mediaelement.js 的问题。
播放器 chrome 加载,第一分钟左右的音频被缓冲,但文件从不播放。
这是怎么回事?
在本身不支持 AAC 编解码器的浏览器上播放扩展名为 .m4a 的文件时,我遇到了 mediaelement.js 的问题。
播放器 chrome 加载,第一分钟左右的音频被缓冲,但文件从不播放。
这是怎么回事?
这是 mediaelement.js 的一个已知问题。这与要求使用 NetStream 类而不是 Sound 类播放 AAC 文件的 Flash 插件有关。
但是,有一种解决方法:您可以告诉媒体元素将文件视为视频,然后一切正常。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 脚本,然后在每个文件的基础上运行它。isvideo=true
当音频源类型属性包含audio/mp4
.
$('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
});
});
这适用于 Firefox 25 和 31、Chrome 36 和 OS X 上的 Safari 7 以及 Windows 7 上的 Firefox 31 中的 .m4a 和 .mp3 文件。