我一直在搜索这个话题,但一无所获。我应该在网页上加载一定数量的.m4a
个文件,每个文件都在一个单独的播放器中。我找到并实施了jplayer
,声称处理格式。我决定默认使用闪回后备来避免向后不兼容。 jplayer的示例(http://www.jplayer.org/audio/m4a/TSP-01-Cro_magnon_man.m4a
)中提供的示例m4a文件工作正常,而我还没有设法播放我拥有的任何文件。
我在所有文件上运行file
unix命令。 jplayer的示例文件返回:
ISO Media, MPEG v4 system, version 2
非工作文件返回以下内容之一:
ISO Media, MPEG v4 system, 3GPP
ISO Media, MPEG v4 system, version 1
ISO Media, MPEG v4 system, iTunes AAC-LC
我使用以下PHP控制器代码加载音频文件。我需要这样做才能“重写”URL并隐藏文件的实际URI。
header('Content-Type: audio/mp4');
header('Content-Disposition: inline; filename=xxxxxxxxxxTrack'.$id.'.m4a');
echo file_get_contents(MVC::siteRoot().'/'.$filename);
(MVC :: siteRoot()返回存储脚本的物理目录。)
我再次尝试Content-Type: audio/mp4a-latm
无济于事。我使用以下代码加载jplayer:
$('.jp-jplayer').each(function() {
$(this).jPlayer({
ready: function () {
console.log($(this).attr('data-src'));
$(this).jPlayer("setMedia", {
m4a: $(this).attr('data-src')
});
$("#insp").jPlayerInspector({jPlayer:$(this)});
},
swfPath: "<?=MVC::httpRoot();?>/gui/swf/Jplayer.swf",
supplied: 'm4a',
wmode: 'window',
solution:"flash",
errorAlerts:true,
warningAlerts:true,
cssSelectorAncestor: '#' +
$(this).attr('id').replace('jquery_jplayer','jp_container')
});
});
在DOM端,对于由渐进数$ i标识的每个音频文件,会发生以下情况:
<div id="jquery_jplayer_<?=$i?>" class="jp-jplayer" data-src="<?=MVC::httpRoot()?>/get/audio/<?=$traccia['audioid']?>"></div>
<div id="jp_container_<?=$i?>" class="jp-audio">[...]
玩家似乎正确加载,DOM根据jplayer重新排列,但是在播放按钮的压力下没有任何反应。代表网络没有发现错误,文件正确传递但内容未播放且未发出警告或错误。实际上,我唯一能听到这些文件的方法是下载它们并在QuickTime中打开它们,因为甚至Chrome都不会播放它们。另一方面,Safari很乐意加载和播放文件,但不在网站内。遗憾的是,我不能直接控制上传文件的内容,因为它们来自iOS / Android应用程序,并且客户端出于某种原因请求.m4a格式。有没有人遇到类似的问题?
答案 0 :(得分:2)
DRM问题
MIME类型
您的域名服务器必须为所有媒体网址提供正确的MIME类型(内容类型)。
未能提供正确的MIME类型将阻止媒体在某些HTML5浏览器上运行。这是导致仅影响Firefox和Opera的问题的常见原因。其他浏览器不太严格,但如果您在任何浏览器上播放媒体时遇到问题,应始终检查MIME类型是否正确。
媒体MIME类型
MP3: audio/mpeg
MP4: audio/mp4 video/mp4
OGG: audio/ogg video/ogg
WebM: audio/webm video/webm
WAV: audio/wav
如果您对音频和视频媒体使用通用扩展名,例如audio.mp4和video.mp4,则只需使用MIME类型的视频版本即可。即。,video / mp4
在Apache服务器上,您可以使用.htaccess文件根据文件扩展名设置MIME类型:
# AddType TYPE/SUBTYPE EXTENSION
AddType audio/mpeg mp3
AddType audio/mp4 m4a
AddType audio/ogg ogg
AddType audio/ogg oga
AddType audio/webm webma
AddType audio/wav wav
AddType video/mp4 mp4
AddType video/mp4 m4v
AddType video/ogg ogv
AddType video/webm webm
AddType video/webm webmv
3。字节范围请求
您的服务器必须启用范围请求。通过查看服务器的响应是否包含其标题中的Accept-Ranges,可以轻松检查这一点。大多数HTML5浏览器允许在下载期间寻找新的文件位置,因此服务器必须允许请求新的Range。
无法接受字节范围请求会导致某些HTML5浏览器出现问题。通常无法从文件中读取持续时间,因为某些格式要求读取文件的开头和结尾以了解其持续时间。如果服务器上没有启用Range请求,Chrome往往会成为大多数问题的浏览器,但是所有浏览器都会遇到一些问题,即使只是你必须等到所有媒体加载才跳到接近结尾
众所周知,这个问题会影响Jetty 6服务器的默认配置。
https://groups.google.com/d/msg/jplayer/nSM2UmnSKKA/bC-l3k0pCPMJ
尝试限制对媒体文件的访问时要小心。用户必须可以通过互联网访问媒体URL,其响应必须采用预期的格式。
使用服务器响应禁用媒体的本地缓存可能会导致某些HTML5浏览器出现问题。这可能导致媒体的持续时间未知,这将在jPlayer的持续时间内显示为NaN。
如果你在后端做了一些魔术以使其更安全,那么他们确保你接受上面描述的字节范围请求。
是的,我只是复制/粘贴常见问题,不知道有关这些东西的任何内容