【发布时间】:2024-05-17 17:40:01
【问题描述】:
在原生不支持 AAC 编解码器的浏览器上播放扩展名为 .m4a 的文件时,我遇到了 mediaelement.js 的问题。
播放器 chrome 加载,第一分钟左右的音频被缓冲,但文件从不播放。
发生了什么事?
【问题讨论】:
标签: flash mediaelement.js aac
在原生不支持 AAC 编解码器的浏览器上播放扩展名为 .m4a 的文件时,我遇到了 mediaelement.js 的问题。
播放器 chrome 加载,第一分钟左右的音频被缓冲,但文件从不播放。
发生了什么事?
【问题讨论】:
标签: flash mediaelement.js aac
这是带有 mediaelement.js 的 known issue。这与使用 NetStream 类而不是 Sound 类播放的 Flash 插件 requiring 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 数组中。确保使用正确的 mime 类型提供 .mp4 文件;将此添加到您的 apache 配置中:
AddType audio/mp4 m4a
使用类似于以下内容的 HTML。我使用的$mime_type 变量包含用于AAC mp4 音频文件的audio/mp4,以及用于普通mp3 文件的audio/mpeg。
<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 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
});
});
这适用于 Firefox 25 和 31、Chrome 36 和 OS X 上的 Safari 7 以及 Windows 7 上的 Firefox 31 中的 .m4a 和 .mp3 文件。
【讨论】: