为什么mediaelement.js在使用Flash后备时不能播放.m4a文件?

时间:2013-07-09 15:33:00

标签: flash mediaelement.js aac

在播放本地支持AAC编解码器的浏览器上播放扩展名为.m4a的文件时,我遇到了mediaelement.js的问题。

播放器Chrome加载,音频的第一分钟左右被缓冲,但文件永远不会播放。

发生了什么事?

2 个答案:

答案 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。

  1. 编辑 mediaelement-and-player.js mediaelement-and-player.min.js 并将"audio/m4a"添加到mejs.plugins.flash.types数组
  2. 确保使用正确的mime类型提供.mp4文件;将此添加到您的apache配置:

    AddType audio/mp4 m4a
    
  3. 使用类似于以下内容的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&amp;file=file.m4a" />
        </object>
    </audio>
    
  4. 加载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
        });
    });
    
  5. 这适用于OS 25上的Firefox 25和31,Chrome 36和Safari 7中的.m4a和.mp3文件,以及Windows 7上的Firefox 31。