2

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

播放器 chrome 加载,第一分钟左右的音频被缓冲,但文件从不播放。

这是怎么回事?

4

2 回答 2

2

这是 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,然后才应用它。

于 2013-07-09T15:32:59.720 回答
0

为了扩展@samuel-jack 的答案,这就是我如何解决 Firefox 无法使用 mediaelement.js 在 .m4a 包装器中播放 AAC 音频的问题,这种方式也允许播放 mp3。

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

    AddType audio/mp4 m4a
    
  3. 使用类似于以下内容的 HTML。$mime_type我使用的变量包含audio/mp4AAC 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.

    $('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 文件。

于 2014-08-26T13:25:52.090 回答